Append ls -v output to status items.
authorAndre Noll <maan@systemlinux.org>
Thu, 1 Nov 2007 16:40:43 +0000 (17:40 +0100)
committerAndre Noll <maan@systemlinux.org>
Thu, 1 Nov 2007 16:40:43 +0000 (17:40 +0100)
This needs more work, but it avoids code duplication in the
long run.

afs.h
aft.c
audiod.c
command.c

diff --git a/afs.h b/afs.h
index d0c162f..b16f32c 100644 (file)
--- 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 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;
index 38aa5aa..d2d0004 100644 (file)
--- 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;
index 3a58300..8ec57fe 100644 (file)
--- 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);