diff --git a/apps/gui/wps.c b/apps/gui/wps.c index cef232c6fc..4b0c7c056f 100644 --- a/apps/gui/wps.c +++ b/apps/gui/wps.c @@ -1035,7 +1035,7 @@ long gui_wps_show(void) gwps_leave_wps(true); if (browse_id3(audio_current_track(), playlist_get_display_index(), - playlist_amount())) + playlist_amount(), NULL)) return GO_TO_ROOT; restore = true; } diff --git a/apps/onplay.c b/apps/onplay.c index ec38ad9132..a3efadd8f6 100644 --- a/apps/onplay.c +++ b/apps/onplay.c @@ -1524,7 +1524,7 @@ static int browse_id3_wrapper(void) if (browse_id3(audio_current_track(), playlist_get_display_index(), - playlist_amount())) + playlist_amount(), NULL)) return GO_TO_ROOT; return GO_TO_PREVIOUS; } diff --git a/apps/playlist_viewer.c b/apps/playlist_viewer.c index 80239367e4..e9b57285cc 100644 --- a/apps/playlist_viewer.c +++ b/apps/playlist_viewer.c @@ -517,7 +517,7 @@ static enum pv_onplay_result show_track_info(const struct playlist_entry *curren return id3_retrieval_successful && browse_id3(&id3, current_track->index + 1, - viewer.num_tracks) ? PV_ONPLAY_USB : PV_ONPLAY_UNCHANGED; + viewer.num_tracks, NULL) ? PV_ONPLAY_USB : PV_ONPLAY_UNCHANGED; } diff --git a/apps/plugin.h b/apps/plugin.h index e44511a6f5..ed688eb753 100644 --- a/apps/plugin.h +++ b/apps/plugin.h @@ -157,12 +157,12 @@ int plugin_open(const char *plugin, const char *parameter); #define PLUGIN_MAGIC 0x526F634B /* RocK */ /* increase this every time the api struct changes */ -#define PLUGIN_API_VERSION 259 +#define PLUGIN_API_VERSION 260 /* update this to latest version if a change to the api struct breaks backwards compatibility (and please take the opportunity to sort in any new function which are "waiting" at the end of the function table) */ -#define PLUGIN_MIN_API_VERSION 259 +#define PLUGIN_MIN_API_VERSION 260 /* 239 Marks the removal of ARCHOS HWCODEC and CHARCELL */ @@ -489,7 +489,8 @@ struct plugin_api { void (*onplay_show_playlist_menu)(const char* path, void (*playlist_insert_cb)); bool (*browse_id3)(struct mp3entry *id3, - int playlist_display_index, int playlist_amount); + int playlist_display_index, int playlist_amount, + struct tm *modified); /* talking */ int (*talk_id)(int32_t id, bool enqueue); diff --git a/apps/plugins/properties.c b/apps/plugins/properties.c index 73ad841c0c..46cf818fb4 100644 --- a/apps/plugins/properties.c +++ b/apps/plugins/properties.c @@ -412,7 +412,7 @@ enum plugin_status plugin_start(const void* parameter) FOR_NB_SCREENS(i) rb->viewportmanager_theme_enable(i, true, NULL); - bool usb = props_type == PROPS_ID3 ? rb->browse_id3(&id3, 0, 0) : + bool usb = props_type == PROPS_ID3 ? rb->browse_id3(&id3, 0, 0, &tm) : browse_file_or_dir(&stats); FOR_NB_SCREENS(i) diff --git a/apps/screens.c b/apps/screens.c index 4fd6c2c2e2..91280a72f1 100644 --- a/apps/screens.c +++ b/apps/screens.c @@ -387,10 +387,13 @@ static const int id3_headers[]= LANG_ID3_ALBUM_GAIN, LANG_FILESIZE, LANG_ID3_PATH, + LANG_DATE, + LANG_TIME, }; struct id3view_info { struct mp3entry* id3; + struct tm *modified; int count; int playlist_display_index; int playlist_amount; @@ -488,6 +491,7 @@ static const char * id3_get_or_speak_info(int selected_item, void* data, { struct id3view_info *info = (struct id3view_info*)data; struct mp3entry* id3 =info->id3; + struct tm *tm = info->modified; int info_no=selected_item/2; if(!(selected_item%2)) {/* header */ @@ -662,6 +666,28 @@ static const char * id3_get_or_speak_info(int selected_item, void* data, if(say_it && val) output_dyn_value(NULL, 0, id3->filesize, byte_units, 4, true); break; + case LANG_DATE: + if (!tm) + return NULL; + + snprintf(buffer, buffer_len, "%04d/%02d/%02d", + tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday); + + val = buffer; + if (say_it) + talk_date(tm, true); + break; + case LANG_TIME: + if (!tm) + return NULL; + + snprintf(buffer, buffer_len, "%02d:%02d:%02d", + tm->tm_hour, tm->tm_min, tm->tm_sec); + + val = buffer; + if (say_it) + talk_time(tm, true); + break; } if((!val || !*val) && say_it) talk_id(LANG_ID3_NO_INFO, true); @@ -688,7 +714,8 @@ static int id3_speak_item(int selected_item, void* data) return 0; } -bool browse_id3(struct mp3entry *id3, int playlist_display_index, int playlist_amount) +bool browse_id3(struct mp3entry *id3, int playlist_display_index, int playlist_amount, + struct tm *modified) { struct gui_synclist id3_lists; int key; @@ -696,6 +723,7 @@ bool browse_id3(struct mp3entry *id3, int playlist_display_index, int playlist_a struct id3view_info info; info.count = 0; info.id3 = id3; + info.modified = modified; info.playlist_display_index = playlist_display_index; info.playlist_amount = playlist_amount; bool ret = false; diff --git a/apps/screens.h b/apps/screens.h index 3322ce53e7..47dc1375ca 100644 --- a/apps/screens.h +++ b/apps/screens.h @@ -39,7 +39,8 @@ int mmc_remove_request(void); bool set_time_screen(const char* title, struct tm *tm, bool set_date); #endif -bool browse_id3(struct mp3entry *id3, int playlist_display_index, int playlist_amount); +bool browse_id3(struct mp3entry *id3, int playlist_display_index, int playlist_amount, + struct tm *modified); int view_runtime(void); #ifdef HAVE_TOUCHSCREEN