]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - aft.c
Teach the ls command to print the amplification value.
[paraslash.git] / aft.c
diff --git a/aft.c b/aft.c
index 5bedc9281b4f23872ac329e01cce16452d786cc3..49cdf0503da4fcec6c9ac5581324680575275632 100644 (file)
--- a/aft.c
+++ b/aft.c
@@ -98,6 +98,8 @@ struct ls_widths {
        unsigned short duration_width;
        /** size of the num played field. */
        unsigned short num_played_width;
+       /** size of the amp field. */
+       unsigned short amp_width;
 };
 
 /** Data passed from the ls command handler to its callback function. */
@@ -142,8 +144,10 @@ enum afsi_offsets {
        AFSI_LYRICS_ID_OFFSET = 24,
        /** Storage position of the .audio_format_id field. */
        AFSI_AUDIO_FORMAT_ID_OFFSET = 28,
-       /** 3 bytes reserved space for future usage. */
-       AFSI_AUDIO_FORMAT_UNUSED_OFFSET = 29,
+       /** Storage position of the amplification field. */
+       AFSI_AMP_OFFSET = 29,
+       /** 2 bytes reserved space for future usage. */
+       AFSI_AUDIO_FORMAT_UNUSED_OFFSET = 30,
        /** On-disk storage space needed. */
        AFSI_SIZE = 32
 };
@@ -167,7 +171,8 @@ void save_afsi(struct afs_info *afsi, struct osl_object *obj)
        write_u32(buf + AFSI_LYRICS_ID_OFFSET, afsi->lyrics_id);
        write_u8(buf + AFSI_AUDIO_FORMAT_ID_OFFSET,
                afsi->audio_format_id);
-       memset(buf + AFSI_AUDIO_FORMAT_UNUSED_OFFSET, 0, 3);
+       write_u8(buf + AFSI_AMP_OFFSET, afsi->amp);
+       memset(buf + AFSI_AUDIO_FORMAT_UNUSED_OFFSET, 0, 2);
 }
 
 /**
@@ -192,6 +197,7 @@ int load_afsi(struct afs_info *afsi, struct osl_object *obj)
        afsi->lyrics_id = read_u32(buf + AFSI_LYRICS_ID_OFFSET);
        afsi->audio_format_id = read_u8(buf +
                AFSI_AUDIO_FORMAT_ID_OFFSET);
+       afsi->amp = read_u8(buf + AFSI_AMP_OFFSET);
        return 1;
 }
 
@@ -899,6 +905,7 @@ static int print_list_item(struct ls_data *d, struct ls_options *opts,
                ret = para_printf(b,
                        "%s"    /* score */
                        "%s "   /* attributes */
+                       "%*u "  /* amp */
                        "%*d "  /* image_id  */
                        "%*d "  /* lyrics_id */
                        "%*d "  /* bitrate */
@@ -911,6 +918,7 @@ static int print_list_item(struct ls_data *d, struct ls_options *opts,
                        "%s\n", /* path */
                        score_buf,
                        att_buf,
+                       w->amp_width, afsi->amp,
                        w->image_id_width, afsi->image_id,
                        w->lyrics_id_width, afsi->lyrics_id,
                        w->bitrate_width, afhi->bitrate,
@@ -955,6 +963,7 @@ static int print_list_item(struct ls_data *d, struct ls_options *opts,
                "%s: %lu\n" /* seconds total */
                "%s: %s\n" /* last played time */
                "%s: %d\n" /* num_played */
+               "%s: %u\n" /* ampplification */
                "%s" /* tag info */
                "%s: %lu\n" /* chunk time */
                "%s: %lu\n", /* num chunks */
@@ -975,6 +984,7 @@ static int print_list_item(struct ls_data *d, struct ls_options *opts,
                status_item_list[SI_SECONDS_TOTAL], afhi->seconds_total,
                status_item_list[SI_LAST_PLAYED], last_played_time,
                status_item_list[SI_NUM_PLAYED], afsi->num_played,
+               status_item_list[SI_AMPLIFICATION], afsi->amp,
                afhi->info_string,
                status_item_list[SI_CHUNK_TIME], tv2ms(&afhi->chunk_tv),
                status_item_list[SI_NUM_CHUNKS], afhi->chunks_total
@@ -1245,6 +1255,8 @@ static int prepare_ls_row(struct osl_row *row, void *ls_opts)
        /* get the number of chars to print this amount of time */
        tmp = get_duration_width(d->afhi.seconds_total);
        w->duration_width = PARA_MAX(w->duration_width, tmp);
+       GET_NUM_DIGITS(d->afsi.amp, &num_digits);
+       w->amp_width = PARA_MAX(w->amp_width, num_digits);
        if (options->flags & LS_FLAG_ADMISSIBLE_ONLY) {
                GET_NUM_DIGITS(score, &num_digits);
                num_digits++; /* add one for the sign (space or "-") */
@@ -1740,7 +1752,7 @@ static int get_row_pointer_from_result(struct osl_object *result, void *private)
 
 static int add_one_audio_file(const char *path, void *private_data)
 {
-       int ret, send_ret = 1;
+       int ret, send_ret = 1, fd;
        uint8_t format_num = -1;
        struct private_add_data *pad = private_data;
        struct afh_info afhi, *afhi_ptr = NULL;
@@ -1764,7 +1776,7 @@ static int add_one_audio_file(const char *path, void *private_data)
                goto out_free;
        }
        /* We still want to add this file. Compute its hash. */
-       ret = mmap_full_file(path, O_RDONLY, &map.data, &map.size, NULL);
+       ret = mmap_full_file(path, O_RDONLY, &map.data, &map.size, &fd);
        if (ret < 0)
                goto out_free;
        hash_function(map.data, map.size, hash);
@@ -1789,7 +1801,7 @@ static int add_one_audio_file(const char *path, void *private_data)
         * there is a hash sister and FORCE was not given.
         */
        if (!hs || (pad->flags & ADD_FLAG_FORCE)) {
-               ret = compute_afhi(path, map.data, map.size, &afhi);
+               ret = compute_afhi(path, map.data, map.size, fd, &afhi);
                if (ret < 0)
                        goto out_unmap;
                format_num = ret;
@@ -1807,6 +1819,7 @@ static int add_one_audio_file(const char *path, void *private_data)
        goto out_free;
 
 out_unmap:
+       close(fd);
        munmap(map.data, map.size);
 out_free:
        if (ret < 0 && send_ret >= 0)