summaryrefslogtreecommitdiff
path: root/apps/screens.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/screens.c')
-rw-r--r--apps/screens.c31
1 files changed, 26 insertions, 5 deletions
diff --git a/apps/screens.c b/apps/screens.c
index 869d081498..c519da9353 100644
--- a/apps/screens.c
+++ b/apps/screens.c
@@ -394,6 +394,7 @@ static const int id3_headers[]=
394struct id3view_info { 394struct id3view_info {
395 struct mp3entry* id3; 395 struct mp3entry* id3;
396 struct tm *modified; 396 struct tm *modified;
397 bool multiple_tracks;
397 int count; 398 int count;
398 int playlist_display_index; 399 int playlist_display_index;
399 int playlist_amount; 400 int playlist_amount;
@@ -491,6 +492,9 @@ static const char * id3_get_or_speak_info(int selected_item, void* data,
491{ 492{
492 struct id3view_info *info = (struct id3view_info*)data; 493 struct id3view_info *info = (struct id3view_info*)data;
493 struct mp3entry* id3 =info->id3; 494 struct mp3entry* id3 =info->id3;
495 const unsigned char * const *unit;
496 unsigned int unit_ct;
497 unsigned long length;
494 struct tm *tm = info->modified; 498 struct tm *tm = info->modified;
495 int info_no=selected_item/2; 499 int info_no=selected_item/2;
496 if(!(selected_item%2)) 500 if(!(selected_item%2))
@@ -593,10 +597,13 @@ static const char * id3_get_or_speak_info(int selected_item, void* data,
593 } 597 }
594 break; 598 break;
595 case LANG_ID3_LENGTH: 599 case LANG_ID3_LENGTH:
596 format_time(buffer, buffer_len, id3->length); 600 length = info->multiple_tracks ? id3->length : id3->length / 1000;
601
602 format_time_auto(buffer, buffer_len,
603 length, UNIT_SEC | UNIT_TRIM_ZERO, true);
597 val=buffer; 604 val=buffer;
598 if(say_it) 605 if(say_it)
599 talk_value(id3->length /1000, UNIT_TIME, true); 606 talk_value(length, UNIT_TIME, true);
600 break; 607 break;
601 case LANG_ID3_PLAYLIST: 608 case LANG_ID3_PLAYLIST:
602 if (info->playlist_display_index == 0 || info->playlist_amount == 0 ) 609 if (info->playlist_display_index == 0 || info->playlist_amount == 0 )
@@ -667,10 +674,20 @@ static const char * id3_get_or_speak_info(int selected_item, void* data,
667 case LANG_FILESIZE: /* not LANG_ID3_FILESIZE because the string is shared */ 674 case LANG_FILESIZE: /* not LANG_ID3_FILESIZE because the string is shared */
668 if (!id3->filesize) 675 if (!id3->filesize)
669 return NULL; 676 return NULL;
670 output_dyn_value(buffer, buffer_len, id3->filesize, byte_units, 4, true); 677 if (info->multiple_tracks)
678 {
679 unit = kibyte_units;
680 unit_ct = 3;
681 }
682 else
683 {
684 unit = byte_units;
685 unit_ct = 4;
686 }
687 output_dyn_value(buffer, buffer_len, id3->filesize, unit, unit_ct, true);
671 val=buffer; 688 val=buffer;
672 if(say_it && val) 689 if(say_it && val)
673 output_dyn_value(NULL, 0, id3->filesize, byte_units, 4, true); 690 output_dyn_value(NULL, 0, id3->filesize, unit, unit_ct, true);
674 break; 691 break;
675 case LANG_DATE: 692 case LANG_DATE:
676 if (!tm) 693 if (!tm)
@@ -720,8 +737,11 @@ static int id3_speak_item(int selected_item, void* data)
720 return 0; 737 return 0;
721} 738}
722 739
740/* Note: Setting multiple_tracks parameter to true causes filesize value
741 * to be treated as KiB (instead of Bytes), and length as s instead of ms.
742 */
723bool browse_id3(struct mp3entry *id3, int playlist_display_index, int playlist_amount, 743bool browse_id3(struct mp3entry *id3, int playlist_display_index, int playlist_amount,
724 struct tm *modified) 744 struct tm *modified, bool multiple_tracks)
725{ 745{
726 struct gui_synclist id3_lists; 746 struct gui_synclist id3_lists;
727 int key; 747 int key;
@@ -730,6 +750,7 @@ bool browse_id3(struct mp3entry *id3, int playlist_display_index, int playlist_a
730 info.count = 0; 750 info.count = 0;
731 info.id3 = id3; 751 info.id3 = id3;
732 info.modified = modified; 752 info.modified = modified;
753 info.multiple_tracks = multiple_tracks;
733 info.playlist_display_index = playlist_display_index; 754 info.playlist_display_index = playlist_display_index;
734 info.playlist_amount = playlist_amount; 755 info.playlist_amount = playlist_amount;
735 bool ret = false; 756 bool ret = false;