summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoman Artiukhin <bahusdrive@gmail.com>2024-02-04 11:04:23 +0200
committerRoman Artiukhin <bahusdrive@gmail.com>2024-06-24 16:59:14 +0300
commit5d39d987c0a0687cd3e919c01847172ff5ae8813 (patch)
treec0f6ded306a60bc1dadf2e089a10a1e23dc9e127
parent54e2facb8533358e06b2716753e12865c471c2be (diff)
downloadrockbox-5d39d987c0a0687cd3e919c01847172ff5ae8813.tar.gz
rockbox-5d39d987c0a0687cd3e919c01847172ff5ae8813.zip
plugins: playing time: Show info in 2 lines (header + details)
Improves readability on small screens. See WPS -> Context Menu -> Current Playlist -> Playing time Also, Russian translation is adjusted accordingly. Change-Id: I23662ccb324f07a742179ff274453416bb8eff08
-rw-r--r--apps/lang/english.lang46
-rw-r--r--apps/lang/russian.lang32
-rw-r--r--apps/plugins/playing_time.c98
3 files changed, 118 insertions, 58 deletions
diff --git a/apps/lang/english.lang b/apps/lang/english.lang
index 32170ce430..532f05baf7 100644
--- a/apps/lang/english.lang
+++ b/apps/lang/english.lang
@@ -12589,10 +12589,10 @@
12589 desc: playing time screen 12589 desc: playing time screen
12590 user: core 12590 user: core
12591 <source> 12591 <source>
12592 *: "Playlist elapsed: %s / %s %ld%%" 12592 *: "Playlist elapsed:"
12593 </source> 12593 </source>
12594 <dest> 12594 <dest>
12595 *: "Playlist elapsed: %s / %s %ld%%" 12595 *: "Playlist elapsed:"
12596 </dest> 12596 </dest>
12597 <voice> 12597 <voice>
12598 *: "Playlist elapsed" 12598 *: "Playlist elapsed"
@@ -12603,10 +12603,10 @@
12603 desc: playing time screen 12603 desc: playing time screen
12604 user: core 12604 user: core
12605 <source> 12605 <source>
12606 *: "Track elapsed: %s / %s %ld%%" 12606 *: "Track elapsed:"
12607 </source> 12607 </source>
12608 <dest> 12608 <dest>
12609 *: "Track elapsed: %s / %s %ld%%" 12609 *: "Track elapsed:"
12610 </dest> 12610 </dest>
12611 <voice> 12611 <voice>
12612 *: "Track elapsed" 12612 *: "Track elapsed"
@@ -12617,10 +12617,10 @@
12617 desc: playing time screen 12617 desc: playing time screen
12618 user: core 12618 user: core
12619 <source> 12619 <source>
12620 *: "Playlist remaining: %s" 12620 *: "Playlist remaining:"
12621 </source> 12621 </source>
12622 <dest> 12622 <dest>
12623 *: "Playlist remaining: %s" 12623 *: "Playlist remaining:"
12624 </dest> 12624 </dest>
12625 <voice> 12625 <voice>
12626 *: "Playlist remaining" 12626 *: "Playlist remaining"
@@ -12631,10 +12631,10 @@
12631 desc: playing time screen 12631 desc: playing time screen
12632 user: core 12632 user: core
12633 <source> 12633 <source>
12634 *: "Track remaining: %s" 12634 *: "Track remaining:"
12635 </source> 12635 </source>
12636 <dest> 12636 <dest>
12637 *: "Track remaining: %s" 12637 *: "Track remaining:"
12638 </dest> 12638 </dest>
12639 <voice> 12639 <voice>
12640 *: "Track remaining" 12640 *: "Track remaining"
@@ -12645,10 +12645,10 @@
12645 desc: playing time screen 12645 desc: playing time screen
12646 user: core 12646 user: core
12647 <source> 12647 <source>
12648 *: "Track %d / %d %d%%" 12648 *: "Track:"
12649 </source> 12649 </source>
12650 <dest> 12650 <dest>
12651 *: "Track %d / %d %d%%" 12651 *: "Track:"
12652 </dest> 12652 </dest>
12653 <voice> 12653 <voice>
12654 *: "Track" 12654 *: "Track"
@@ -12659,10 +12659,10 @@
12659 desc: playing time screen 12659 desc: playing time screen
12660 user: core 12660 user: core
12661 <source> 12661 <source>
12662 *: "Storage: %s (done %s, remaining %s)" 12662 *: "Storage (Done / Remaining):"
12663 </source> 12663 </source>
12664 <dest> 12664 <dest>
12665 *: "Storage: %s (done %s, remaining %s)" 12665 *: "Storage (Done / Remaining):"
12666 </dest> 12666 </dest>
12667 <voice> 12667 <voice>
12668 *: "Storage" 12668 *: "Storage"
@@ -12687,10 +12687,10 @@
12687 desc: playing time screen 12687 desc: playing time screen
12688 user: core 12688 user: core
12689 <source> 12689 <source>
12690 *: "Average track size: %s" 12690 *: "Average track size:"
12691 </source> 12691 </source>
12692 <dest> 12692 <dest>
12693 *: "Average track size: %s" 12693 *: "Average track size:"
12694 </dest> 12694 </dest>
12695 <voice> 12695 <voice>
12696 *: "Average track size" 12696 *: "Average track size"
@@ -12701,10 +12701,10 @@
12701 desc: playing time screen 12701 desc: playing time screen
12702 user: core 12702 user: core
12703 <source> 12703 <source>
12704 *: "Average bitrate: %ld kbps" 12704 *: "Average bitrate:"
12705 </source> 12705 </source>
12706 <dest> 12706 <dest>
12707 *: "Average bitrate: %ld kbps" 12707 *: "Average bitrate:"
12708 </dest> 12708 </dest>
12709 <voice> 12709 <voice>
12710 *: "Average bit rate" 12710 *: "Average bit rate"
@@ -16472,3 +16472,17 @@
16472 *: "English" 16472 *: "English"
16473 </voice> 16473 </voice>
16474</phrase> 16474</phrase>
16475<phrase>
16476 id: LANG_PERCENT_FORMAT
16477 desc: percent formatting ( `10%` is default , for `10 %` use '%ld %%' , for `%10` use '%%%ld' and so on)
16478 user: core
16479 <source>
16480 *: "%ld%%"
16481 </source>
16482 <dest>
16483 *: "%ld%%"
16484 </dest>
16485 <voice>
16486 *: none
16487 </voice>
16488</phrase>
diff --git a/apps/lang/russian.lang b/apps/lang/russian.lang
index 8a42c92f2b..cf4a762ae6 100644
--- a/apps/lang/russian.lang
+++ b/apps/lang/russian.lang
@@ -13576,10 +13576,10 @@
13576 desc: playing time screen 13576 desc: playing time screen
13577 user: core 13577 user: core
13578 <source> 13578 <source>
13579 *: "Playlist remaining: %s" 13579 *: "Playlist remaining:"
13580 </source> 13580 </source>
13581 <dest> 13581 <dest>
13582 *: "В списке осталось: %s" 13582 *: "В списке осталось:"
13583 </dest> 13583 </dest>
13584 <voice> 13584 <voice>
13585 *: "В списке осталось" 13585 *: "В списке осталось"
@@ -13590,10 +13590,10 @@
13590 desc: playing time screen 13590 desc: playing time screen
13591 user: core 13591 user: core
13592 <source> 13592 <source>
13593 *: "Playlist elapsed: %s / %s %ld%%" 13593 *: "Playlist elapsed:"
13594 </source> 13594 </source>
13595 <dest> 13595 <dest>
13596 *: "В списке проиграно: %s / %s %ld%%" 13596 *: "В списке проиграно:"
13597 </dest> 13597 </dest>
13598 <voice> 13598 <voice>
13599 *: "В списке проиграно" 13599 *: "В списке проиграно"
@@ -13924,10 +13924,10 @@
13924 desc: playing time screen 13924 desc: playing time screen
13925 user: core 13925 user: core
13926 <source> 13926 <source>
13927 *: "Track elapsed: %s / %s %ld%%" 13927 *: "Track elapsed:"
13928 </source> 13928 </source>
13929 <dest> 13929 <dest>
13930 *: "В треке проиграно: %s / %s %ld%%" 13930 *: "В треке проиграно:"
13931 </dest> 13931 </dest>
13932 <voice> 13932 <voice>
13933 *: "В трэке проиграно" 13933 *: "В трэке проиграно"
@@ -14118,10 +14118,10 @@
14118 desc: playing time screen 14118 desc: playing time screen
14119 user: core 14119 user: core
14120 <source> 14120 <source>
14121 *: "Track remaining: %s" 14121 *: "Track remaining:"
14122 </source> 14122 </source>
14123 <dest> 14123 <dest>
14124 *: "В треке осталось: %s" 14124 *: "В треке осталось:"
14125 </dest> 14125 </dest>
14126 <voice> 14126 <voice>
14127 *: "В трэке осталось" 14127 *: "В трэке осталось"
@@ -14272,10 +14272,10 @@
14272 desc: playing time screen 14272 desc: playing time screen
14273 user: core 14273 user: core
14274 <source> 14274 <source>
14275 *: "Average bitrate: %ld kbps" 14275 *: "Average bitrate:"
14276 </source> 14276 </source>
14277 <dest> 14277 <dest>
14278 *: "Средний битрейт: %ld kbps" 14278 *: "Средний битрейт:"
14279 </dest> 14279 </dest>
14280 <voice> 14280 <voice>
14281 *: "Средний битрейт" 14281 *: "Средний битрейт"
@@ -14331,10 +14331,10 @@
14331 desc: playing time screen 14331 desc: playing time screen
14332 user: core 14332 user: core
14333 <source> 14333 <source>
14334 *: "Average track size: %s" 14334 *: "Average track size:"
14335 </source> 14335 </source>
14336 <dest> 14336 <dest>
14337 *: "Средний размер трека: %s" 14337 *: "Средний размер трека:"
14338 </dest> 14338 </dest>
14339 <voice> 14339 <voice>
14340 *: "Средний размер трэка" 14340 *: "Средний размер трэка"
@@ -14452,10 +14452,10 @@
14452 desc: playing time screen 14452 desc: playing time screen
14453 user: core 14453 user: core
14454 <source> 14454 <source>
14455 *: "Storage: %s (done %s, remaining %s)" 14455 *: "Storage (Done / Remaining):"
14456 </source> 14456 </source>
14457 <dest> 14457 <dest>
14458 *: "Объём памяти: %s (роиграно %s, сталось %s)" 14458 *: "Объём памяти (роиграно / сталось):"
14459 </dest> 14459 </dest>
14460 <voice> 14460 <voice>
14461 *: "Объём памяти" 14461 *: "Объём памяти"
@@ -14607,10 +14607,10 @@
14607 desc: playing time screen 14607 desc: playing time screen
14608 user: core 14608 user: core
14609 <source> 14609 <source>
14610 *: "Track %d / %d %d%%" 14610 *: "Track:"
14611 </source> 14611 </source>
14612 <dest> 14612 <dest>
14613 *: "Трек %d / %d %d%%" 14613 *: "Трек:"
14614 </dest> 14614 </dest>
14615 <voice> 14615 <voice>
14616 *: "Трэк" 14616 *: "Трэк"
diff --git a/apps/plugins/playing_time.c b/apps/plugins/playing_time.c
index 354c5a3e06..1daf70c53e 100644
--- a/apps/plugins/playing_time.c
+++ b/apps/plugins/playing_time.c
@@ -31,6 +31,17 @@ const unsigned char * const byte_units[] =
31 ID2P(LANG_GIBIBYTE) 31 ID2P(LANG_GIBIBYTE)
32}; 32};
33 33
34const int menu_items[] = {
35 LANG_PLAYTIME_ELAPSED,
36 LANG_PLAYTIME_REMAINING,
37 LANG_PLAYTIME_TRK_ELAPSED,
38 LANG_PLAYTIME_TRK_REMAINING,
39 LANG_PLAYTIME_TRACK,
40 LANG_PLAYTIME_STORAGE,
41 LANG_PLAYTIME_AVG_TRACK_SIZE,
42 LANG_PLAYTIME_AVG_BITRATE,
43};
44
34const unsigned char * const * const kibyte_units = &byte_units[1]; 45const unsigned char * const * const kibyte_units = &byte_units[1];
35 46
36enum ePT_SECS { 47enum ePT_SECS {
@@ -68,6 +79,27 @@ struct playing_time_info {
68 long kbs[ePT_KBS_COUNT]; 79 long kbs[ePT_KBS_COUNT];
69}; 80};
70 81
82static char* get_percent_str(long percents)
83{
84 static char val[10];
85 rb->snprintf(val, 10, rb->str(LANG_PERCENT_FORMAT), percents);
86 return val;
87}
88
89static inline void prepare_time_string(const char *buf, size_t buffer_len, long elapsed_pct, const char *timestr1, const char *timestr2)
90{
91 if (rb->lang_is_rtl())
92 {
93 rb->snprintf(buf, buffer_len, "%s %s / %s",
94 get_percent_str(elapsed_pct), timestr2, timestr1);
95 }
96 else
97 {
98 rb->snprintf(buf, buffer_len, "%s / %s %s",
99 timestr1, timestr2, get_percent_str(elapsed_pct));
100 }
101}
102
71/* list callback for playing_time screen */ 103/* list callback for playing_time screen */
72static const char * playing_time_get_or_speak_info(int selected_item, void * data, 104static const char * playing_time_get_or_speak_info(int selected_item, void * data,
73 char *buf, size_t buffer_len, 105 char *buf, size_t buffer_len,
@@ -75,14 +107,22 @@ static const char * playing_time_get_or_speak_info(int selected_item, void * dat
75{ 107{
76 long elapsed_pct; /* percentage of duration elapsed */ 108 long elapsed_pct; /* percentage of duration elapsed */
77 struct playing_time_info *pti = (struct playing_time_info *)data; 109 struct playing_time_info *pti = (struct playing_time_info *)data;
78 switch(selected_item) { 110 int info_no = selected_item/2;
111 const int menu_name_id = menu_items[info_no];
112
113 if (!(selected_item%2))
114 {/* header */
115 return rb->str(menu_name_id);
116 }
117
118 switch(info_no) {
79 case 0: { /* elapsed and total time */ 119 case 0: { /* elapsed and total time */
80 char timestr1[25], timestr2[25]; 120 char timestr1[25], timestr2[25];
81 rb->format_time_auto(timestr1, sizeof(timestr1), 121 rb->format_time_auto(timestr1, sizeof(timestr1),
82 pti->secs[ePT_SECS_BEF], UNIT_SEC, false); 122 pti->secs[ePT_SECS_BEF], UNIT_SEC, true);
83 123
84 rb->format_time_auto(timestr2, sizeof(timestr2), 124 rb->format_time_auto(timestr2, sizeof(timestr2),
85 pti->secs[ePT_SECS_TTL], UNIT_SEC, false); 125 pti->secs[ePT_SECS_TTL], UNIT_SEC, true);
86 126
87 if (pti->secs[ePT_SECS_TTL] == 0) 127 if (pti->secs[ePT_SECS_TTL] == 0)
88 elapsed_pct = 0; 128 elapsed_pct = 0;
@@ -96,11 +136,10 @@ static const char * playing_time_get_or_speak_info(int selected_item, void * dat
96 elapsed_pct = (pti->secs[ePT_SECS_BEF] >> 7) * 100 136 elapsed_pct = (pti->secs[ePT_SECS_BEF] >> 7) * 100
97 / (pti->secs[ePT_SECS_TTL] >> 7); 137 / (pti->secs[ePT_SECS_TTL] >> 7);
98 } 138 }
99 rb->snprintf(buf, buffer_len, rb->str(LANG_PLAYTIME_ELAPSED), 139 prepare_time_string(buf, buffer_len, elapsed_pct, timestr1, timestr2);
100 timestr1, timestr2, elapsed_pct);
101 140
102 if (say_it) 141 if (say_it)
103 rb_talk_ids(false, LANG_PLAYTIME_ELAPSED, 142 rb_talk_ids(false, menu_name_id,
104 TALK_ID(pti->secs[ePT_SECS_BEF], UNIT_TIME), 143 TALK_ID(pti->secs[ePT_SECS_BEF], UNIT_TIME),
105 VOICE_OF, 144 VOICE_OF,
106 TALK_ID(pti->secs[ePT_SECS_TTL], UNIT_TIME), 145 TALK_ID(pti->secs[ePT_SECS_TTL], UNIT_TIME),
@@ -112,10 +151,10 @@ static const char * playing_time_get_or_speak_info(int selected_item, void * dat
112 char timestr[25]; 151 char timestr[25];
113 rb->format_time_auto(timestr, sizeof(timestr), pti->secs[ePT_SECS_AFT], 152 rb->format_time_auto(timestr, sizeof(timestr), pti->secs[ePT_SECS_AFT],
114 UNIT_SEC, false); 153 UNIT_SEC, false);
115 rb->snprintf(buf, buffer_len, rb->str(LANG_PLAYTIME_REMAINING), timestr); 154 rb->snprintf(buf, buffer_len, "%s", timestr);
116 155
117 if (say_it) 156 if (say_it)
118 rb_talk_ids(false, LANG_PLAYTIME_REMAINING, 157 rb_talk_ids(false, menu_name_id,
119 TALK_ID(pti->secs[ePT_SECS_AFT], UNIT_TIME)); 158 TALK_ID(pti->secs[ePT_SECS_AFT], UNIT_TIME));
120 break; 159 break;
121 } 160 }
@@ -123,9 +162,9 @@ static const char * playing_time_get_or_speak_info(int selected_item, void * dat
123 char timestr1[25], timestr2[25]; 162 char timestr1[25], timestr2[25];
124 163
125 rb->format_time_auto(timestr1, sizeof(timestr1), pti->trk_secs[ePT_SECS_BEF], 164 rb->format_time_auto(timestr1, sizeof(timestr1), pti->trk_secs[ePT_SECS_BEF],
126 UNIT_SEC, false); 165 UNIT_SEC, true);
127 rb->format_time_auto(timestr2, sizeof(timestr2), pti->trk_secs[ePT_SECS_TTL], 166 rb->format_time_auto(timestr2, sizeof(timestr2), pti->trk_secs[ePT_SECS_TTL],
128 UNIT_SEC, false); 167 UNIT_SEC, true);
129 168
130 if (pti->trk_secs[ePT_SECS_TTL] == 0) 169 if (pti->trk_secs[ePT_SECS_TTL] == 0)
131 elapsed_pct = 0; 170 elapsed_pct = 0;
@@ -139,11 +178,10 @@ static const char * playing_time_get_or_speak_info(int selected_item, void * dat
139 elapsed_pct = (pti->trk_secs[ePT_SECS_BEF] >> 7) * 100 178 elapsed_pct = (pti->trk_secs[ePT_SECS_BEF] >> 7) * 100
140 / (pti->trk_secs[ePT_SECS_TTL] >> 7); 179 / (pti->trk_secs[ePT_SECS_TTL] >> 7);
141 } 180 }
142 rb->snprintf(buf, buffer_len, rb->str(LANG_PLAYTIME_TRK_ELAPSED), 181 prepare_time_string(buf, buffer_len, elapsed_pct, timestr1, timestr2);
143 timestr1, timestr2, elapsed_pct);
144 182
145 if (say_it) 183 if (say_it)
146 rb_talk_ids(false, LANG_PLAYTIME_TRK_ELAPSED, 184 rb_talk_ids(false, menu_name_id,
147 TALK_ID(pti->trk_secs[ePT_SECS_BEF], UNIT_TIME), 185 TALK_ID(pti->trk_secs[ePT_SECS_BEF], UNIT_TIME),
148 VOICE_OF, 186 VOICE_OF,
149 TALK_ID(pti->trk_secs[ePT_SECS_TTL], UNIT_TIME), 187 TALK_ID(pti->trk_secs[ePT_SECS_TTL], UNIT_TIME),
@@ -155,21 +193,29 @@ static const char * playing_time_get_or_speak_info(int selected_item, void * dat
155 char timestr[25]; 193 char timestr[25];
156 rb->format_time_auto(timestr, sizeof(timestr), pti->trk_secs[ePT_SECS_AFT], 194 rb->format_time_auto(timestr, sizeof(timestr), pti->trk_secs[ePT_SECS_AFT],
157 UNIT_SEC, false); 195 UNIT_SEC, false);
158 rb->snprintf(buf, buffer_len, rb->str(LANG_PLAYTIME_TRK_REMAINING), timestr); 196 rb->snprintf(buf, buffer_len, "%s", timestr);
159 197
160 if (say_it) 198 if (say_it)
161 rb_talk_ids(false, LANG_PLAYTIME_TRK_REMAINING, 199 rb_talk_ids(false, menu_name_id,
162 TALK_ID(pti->trk_secs[ePT_SECS_AFT], UNIT_TIME)); 200 TALK_ID(pti->trk_secs[ePT_SECS_AFT], UNIT_TIME));
163 break; 201 break;
164 } 202 }
165 case 4: { /* track index */ 203 case 4: { /* track index */
166 int track_pct = pti->curr_display_index * 100 / pti->nb_tracks; 204 int track_pct = pti->curr_display_index * 100 / pti->nb_tracks;
167 205
168 rb->snprintf(buf, buffer_len, rb->str(LANG_PLAYTIME_TRACK), 206 if (rb->lang_is_rtl())
169 pti->curr_display_index, pti->nb_tracks, track_pct); 207 {
208 rb->snprintf(buf, buffer_len, "%s %d / %d",
209 get_percent_str(track_pct), pti->nb_tracks, pti->curr_display_index);
210 }
211 else
212 {
213 rb->snprintf(buf, buffer_len, "%d / %d %s",
214 pti->curr_display_index, pti->nb_tracks, get_percent_str(track_pct));
215 }
170 216
171 if (say_it) 217 if (say_it)
172 rb_talk_ids(false, LANG_PLAYTIME_TRACK, 218 rb_talk_ids(false, menu_name_id,
173 TALK_ID(pti->curr_display_index, UNIT_INT), 219 TALK_ID(pti->curr_display_index, UNIT_INT),
174 VOICE_OF, 220 VOICE_OF,
175 TALK_ID(pti->nb_tracks, UNIT_INT), 221 TALK_ID(pti->nb_tracks, UNIT_INT),
@@ -185,12 +231,12 @@ static const char * playing_time_get_or_speak_info(int selected_item, void * dat
185 rb->output_dyn_value(kbstr[i], sizeof(kbstr[i]), 231 rb->output_dyn_value(kbstr[i], sizeof(kbstr[i]),
186 pti->kbs[i], kibyte_units, 3, true); 232 pti->kbs[i], kibyte_units, 3, true);
187 } 233 }
188 rb->snprintf(buf, buffer_len, rb->str(LANG_PLAYTIME_STORAGE), 234 rb->snprintf(buf, buffer_len, "%s (%s / %s)",
189 kbstr[ePT_KBS_TTL], kbstr[ePT_KBS_BEF],kbstr[ePT_KBS_AFT]); 235 kbstr[ePT_KBS_TTL], kbstr[ePT_KBS_BEF],kbstr[ePT_KBS_AFT]);
190 236
191 if (say_it) { 237 if (say_it) {
192 int32_t voice_ids[ePT_KBS_COUNT]; 238 int32_t voice_ids[ePT_KBS_COUNT];
193 voice_ids[ePT_KBS_TTL] = LANG_PLAYTIME_STORAGE; 239 voice_ids[ePT_KBS_TTL] = menu_name_id;
194 voice_ids[ePT_KBS_BEF] = VOICE_PLAYTIME_DONE; 240 voice_ids[ePT_KBS_BEF] = VOICE_PLAYTIME_DONE;
195 voice_ids[ePT_KBS_AFT] = LANG_PLAYTIME_REMAINING; 241 voice_ids[ePT_KBS_AFT] = LANG_PLAYTIME_REMAINING;
196 242
@@ -205,10 +251,10 @@ static const char * playing_time_get_or_speak_info(int selected_item, void * dat
205 char str[10]; 251 char str[10];
206 long avg_track_size = pti->kbs[ePT_KBS_TTL] / pti->nb_tracks; 252 long avg_track_size = pti->kbs[ePT_KBS_TTL] / pti->nb_tracks;
207 rb->output_dyn_value(str, sizeof(str), avg_track_size, kibyte_units, 3, true); 253 rb->output_dyn_value(str, sizeof(str), avg_track_size, kibyte_units, 3, true);
208 rb->snprintf(buf, buffer_len, rb->str(LANG_PLAYTIME_AVG_TRACK_SIZE), str); 254 rb->snprintf(buf, buffer_len, "%s", str);
209 255
210 if (say_it) { 256 if (say_it) {
211 rb->talk_id(LANG_PLAYTIME_AVG_TRACK_SIZE, false); 257 rb->talk_id(menu_name_id, false);
212 rb->output_dyn_value(NULL, 0, avg_track_size, kibyte_units, 3, true); 258 rb->output_dyn_value(NULL, 0, avg_track_size, kibyte_units, 3, true);
213 } 259 }
214 break; 260 break;
@@ -217,10 +263,10 @@ static const char * playing_time_get_or_speak_info(int selected_item, void * dat
217 /* Convert power of 2 kilobytes to power of 10 kilobits */ 263 /* Convert power of 2 kilobytes to power of 10 kilobits */
218 long avg_bitrate = (pti->kbs[ePT_KBS_TTL] / pti->secs[ePT_SECS_TTL] 264 long avg_bitrate = (pti->kbs[ePT_KBS_TTL] / pti->secs[ePT_SECS_TTL]
219 * 1024 * 8 / 1000); 265 * 1024 * 8 / 1000);
220 rb->snprintf(buf, buffer_len, rb->str(LANG_PLAYTIME_AVG_BITRATE), avg_bitrate); 266 rb->snprintf(buf, buffer_len, "%ld kbps", avg_bitrate);
221 267
222 if (say_it) 268 if (say_it)
223 rb_talk_ids(false, LANG_PLAYTIME_AVG_BITRATE, 269 rb_talk_ids(false, menu_name_id,
224 TALK_ID(avg_bitrate, UNIT_KBIT)); 270 TALK_ID(avg_bitrate, UNIT_KBIT));
225 break; 271 break;
226 } 272 }
@@ -340,10 +386,10 @@ static bool playing_time(void)
340 struct gui_synclist pt_lists; 386 struct gui_synclist pt_lists;
341 int key; 387 int key;
342 388
343 rb->gui_synclist_init(&pt_lists, &playing_time_get_info, &pti, true, 1, NULL); 389 rb->gui_synclist_init(&pt_lists, &playing_time_get_info, &pti, true, 2, NULL);
344 if (rb->global_settings->talk_menu) 390 if (rb->global_settings->talk_menu)
345 rb->gui_synclist_set_voice_callback(&pt_lists, playing_time_speak_info); 391 rb->gui_synclist_set_voice_callback(&pt_lists, playing_time_speak_info);
346 rb->gui_synclist_set_nb_items(&pt_lists, 8); 392 rb->gui_synclist_set_nb_items(&pt_lists, 16);
347 rb->gui_synclist_set_title(&pt_lists, rb->str(LANG_PLAYING_TIME), NOICON); 393 rb->gui_synclist_set_title(&pt_lists, rb->str(LANG_PLAYING_TIME), NOICON);
348 rb->gui_synclist_draw(&pt_lists); 394 rb->gui_synclist_draw(&pt_lists);
349 rb->gui_synclist_speak_item(&pt_lists); 395 rb->gui_synclist_speak_item(&pt_lists);