From 8769ef42c84de55cea4cd6820802e8b8f53393c8 Mon Sep 17 00:00:00 2001 From: Andre Noll Date: Thu, 1 Nov 2007 17:40:43 +0100 Subject: [PATCH 1/1] Append ls -v output to status items. This needs more work, but it avoids code duplication in the long run. --- afs.h | 22 ++++++++++++++++++++++ aft.c | 44 +++++++++++++++++++++++++++++--------------- audiod.c | 3 +++ command.c | 5 +++-- 4 files changed, 57 insertions(+), 17 deletions(-) diff --git a/afs.h b/afs.h index d0c162fb..b16f32ce 100644 --- a/afs.h +++ b/afs.h @@ -90,10 +90,32 @@ struct afs_table { enum play_mode {PLAY_MODE_MOOD, PLAY_MODE_PLAYLIST}; +/** + * Data about one audio file. + * + * Needed to produce ls and stat output. + */ +struct ls_data { + /** Usual audio format handler information. */ + struct afh_info afhi; + /** Audio file selector information. */ + struct afs_info afsi; + /** The full path of the audio file. */ + char *path; + /** The score value (if -a was given). */ + long score; + /** The sha1 hash of audio file. */ + HASH_TYPE *hash; +}; +int make_status_items(struct ls_data *d, struct para_buffer *pb); + +#define AFS_STATUS_INFO_SIZE 4096 + struct audio_file_data { enum play_mode current_play_mode; char attributes_string[MAXLINE]; char path[_POSIX_PATH_MAX]; + char afs_status_info[AFS_STATUS_INFO_SIZE]; int fd; long score; struct afs_info afsi; diff --git a/aft.c b/aft.c index 909da6aa..e45938d3 100644 --- a/aft.c +++ b/aft.c @@ -96,20 +96,6 @@ struct ls_widths { unsigned short num_played_width; }; -/** Data passed to the different compare functions (called by qsort()). */ -struct ls_data { - /** Usual audio format handler information. */ - struct afh_info afhi; - /** Audio file selector information. */ - struct afs_info afsi; - /** The full path of the audio file. */ - char *path; - /** The score value (if -a was given). */ - long score; - /** The sha1 hash of audio file. */ - HASH_TYPE *hash; -}; - /** Data passed from the ls command handler to its callback function. */ struct ls_options { /** The given command line flags. */ @@ -736,6 +722,22 @@ int open_and_update_audio_file(struct osl_row *aft_row, struct audio_file_data * afd->attributes_string[sizeof(afd->attributes_string) - 1] = '\0'; free(tmp); + { + struct ls_data d = { + .afhi = afd->afhi, + .afsi = afd->afsi, + .path = path, + .score = afd->score, + .hash = file_hash + }; + struct para_buffer pb = {.buf = NULL}; + ret = make_status_items(&d, &pb); + if (ret < 0) + goto err; + strncpy(afd->afs_status_info, pb.buf, AFS_STATUS_INFO_SIZE); + afd->afs_status_info[AFS_STATUS_INFO_SIZE] = '\0'; + free(pb.buf); + } aced.aft_row = aft_row; aced.old_afsi = &afd->afsi; afs_event(AFSI_CHANGE, NULL, &aced); @@ -901,7 +903,6 @@ static int print_list_item(struct ls_data *d, struct ls_options *opts, att_lines = make_attribute_lines(att_buf, afsi); lyrics_line = make_lyrics_line(afsi); image_line = make_image_line(afsi); - /* TODO: Merge this with status items */ if (opts->mode == LS_MODE_VERBOSE) { para_printf(b, "%s: %s\n" /* path */ @@ -982,6 +983,19 @@ static int print_list_item(struct ls_data *d, struct ls_options *opts, return 1; } +int make_status_items(struct ls_data *d, struct para_buffer *pb) +{ + struct ls_options opts = { + .flags = LS_FLAG_FULL_PATH | LS_FLAG_ADMISSIBLE_ONLY, + .mode = LS_MODE_VERBOSE, + }; + time_t current_time; + + time(¤t_time); + return print_list_item(d, &opts, pb, current_time); +} + + static int ls_audio_format_compare(const void *a, const void *b) { struct ls_data *d1 = *(struct ls_data **)a, *d2 = *(struct ls_data **)b; diff --git a/audiod.c b/audiod.c index 38aa5aaf..d2d0004a 100644 --- a/audiod.c +++ b/audiod.c @@ -118,6 +118,9 @@ struct command_task { int get_audio_format_num(char *name) { int i; + + while (isspace(*name)) + name++; FOR_EACH_AUDIO_FORMAT(i) if (!strcmp(name, audio_formats[i])) return i; diff --git a/command.c b/command.c index 3a58300e..8ec57fec 100644 --- a/command.c +++ b/command.c @@ -119,7 +119,7 @@ static char *get_status(struct misc_meta_data *nmmd) "%s:%s\n" "%s:%s\n" "%s:%s\n" "%s:%u\n" "%s:%li\n" "%s:%s\n" "%s:%s\n" "%s" "%s:%s\n" "%s:%lu.%lu\n" "%s:%lu.%lu\n" "%s:%s\n" - "%s:%s\n" "%s:%u\n", + "%s:%s\n" "%s:%u\n" "%s\n", status_item_list[SI_FILE_SIZE], nmmd->size / 1024, status_item_list[SI_MTIME], mtime, status_item_list[SI_LENGTH], nmmd->afd.afhi.seconds_total, @@ -147,7 +147,8 @@ static char *get_status(struct misc_meta_data *nmmd) status_item_list[SI_ATTRIBUTES], mmd->afd.attributes_string, status_item_list[SI_DIRECTORY], dirname? dirname : "(none)", - status_item_list[SI_LYRICS_ID], nmmd->afd.afsi.lyrics_id + status_item_list[SI_LYRICS_ID], nmmd->afd.afsi.lyrics_id, + nmmd->afd.afs_status_info ); free(basename); -- 2.39.2