Append ls -v output to status items.
[paraslash.git] / aft.c
diff --git a/aft.c b/aft.c
index 909da6a..e45938d 100644 (file)
--- 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(&current_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;