X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=aft.c;h=62db6e7b42bf663af95df97e6764c5ee8891fffc;hp=909da6aac53138db7e133e5eaa909445cbf3a455;hb=518a2727540cf5e105d28aa8fd31bb6afad05bf6;hpb=443e2564635fa60b561666db709f54901c2adf6f diff --git a/aft.c b/aft.c index 909da6aa..62db6e7b 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. */ @@ -687,7 +673,7 @@ int open_and_update_audio_file(struct osl_row *aft_row, struct audio_file_data * int ret = get_hash_of_row(aft_row, &aft_hash); struct afsi_change_event_data aced; struct osl_object map, chunk_table_obj; - char *tmp, *path; + char *path; if (ret < 0) return ret; @@ -728,14 +714,22 @@ int open_and_update_audio_file(struct osl_row *aft_row, struct audio_file_data * ret = load_chunk_info(&chunk_table_obj, &afd->afhi); if (ret < 0) goto err; - ret = get_attribute_text(&afd->afsi.attributes, " ", &tmp); - if (ret < 0) - goto err; - assert(tmp); - strncpy(afd->attributes_string, tmp, sizeof(afd->attributes_string)); - 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 - 1] = '\0'; + free(pb.buf); + } aced.aft_row = aft_row; aced.old_afsi = &afd->afsi; afs_event(AFSI_CHANGE, NULL, &aced); @@ -817,23 +811,21 @@ static char *make_attribute_lines(const char *att_bitmap, struct afs_info *afsi) return att_lines; } -static char *make_lyrics_line(struct afs_info *afsi) +static char *make_lyrics_lines(struct afs_info *afsi) { char *lyrics_name; lyr_get_name_by_id(afsi->lyrics_id, &lyrics_name); - if (!lyrics_name) - return make_message("%u", afsi->lyrics_id); - return make_message("%u (%s)", afsi->lyrics_id, lyrics_name); + return make_message("lyrics_id: %u\nlyrics_name: %s\n", + afsi->lyrics_id, lyrics_name? lyrics_name : "(none)"); } -static char *make_image_line(struct afs_info *afsi) +static char *make_image_lines(struct afs_info *afsi) { char *image_name; img_get_name_by_id(afsi->image_id, &image_name); - if (!image_name) - return make_message("%u", afsi->image_id); - return make_message("%u (%s)", afsi->image_id, image_name); + return make_message("image_id: %u\nimage_name: %s\n", + afsi->image_id, image_name? image_name : "(none)"); } static int print_list_item(struct ls_data *d, struct ls_options *opts, @@ -849,7 +841,7 @@ static int print_list_item(struct ls_data *d, struct ls_options *opts, struct ls_widths *w = &opts->widths; int have_score = opts->flags & LS_FLAG_ADMISSIBLE_ONLY; char asc_hash[2 * HASH_SIZE + 1]; - char *att_lines, *lyrics_line, *image_line; + char *att_lines, *lyrics_lines, *image_lines; if (opts->mode == LS_MODE_SHORT) { para_printf(b, "%s\n", d->path); @@ -899,17 +891,16 @@ static int print_list_item(struct ls_data *d, struct ls_options *opts, } hash_to_asc(d->hash, asc_hash); 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 */ + lyrics_lines = make_lyrics_lines(afsi); + image_lines = make_image_lines(afsi); if (opts->mode == LS_MODE_VERBOSE) { para_printf(b, "%s: %s\n" /* path */ "%s%s%s" /* score */ "attributes: %s\n" "hash: %s\n" - "image_id: %s\n" - "lyrics_id: %s\n" + "%s" /* image id, image name */ + "%s" /* lyrics */ "bitrate: %dkbit/s\n" "format: %s\n" "frequency: %dHz\n" @@ -924,8 +915,8 @@ static int print_list_item(struct ls_data *d, struct ls_options *opts, have_score? "\n" : "", att_lines, asc_hash, - image_line, - lyrics_line, + image_lines, + lyrics_lines, afhi->bitrate, audio_format_name(afsi->audio_format_id), afhi->frequency, @@ -945,7 +936,7 @@ static int print_list_item(struct ls_data *d, struct ls_options *opts, "%s%s%s" /* score */ "%s\n" /* attributes */ "hash: %s\n" - "image_id: %s\n" + "%s\n" /* image id, image name */ "lyrics_id: %s\n" "bitrate: %dkbit/s\n" "format: %s\n" @@ -961,8 +952,8 @@ static int print_list_item(struct ls_data *d, struct ls_options *opts, have_score? "\n" : "", att_lines, asc_hash, - image_line, - lyrics_line, + image_lines, + lyrics_lines, afhi->bitrate, audio_format_name(afsi->audio_format_id), afhi->frequency, @@ -977,11 +968,24 @@ static int print_list_item(struct ls_data *d, struct ls_options *opts, osl_close_disk_object(lyrics_def.data); } free(att_lines); - free(lyrics_line); - free(image_line); + free(lyrics_lines); + free(image_lines); 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;