Add option to resume next track on automatic track change --- apps/lang/english.lang | 14 ++++++++++++++ apps/menus/settings_menu.c | 4 +++- apps/playback.c | 9 +++++++-- apps/settings.h | 2 ++ apps/settings_list.c | 34 ++++++++++++++++++++++++++++++++++ 5 files changed, 60 insertions(+), 3 deletions(-) diff --git a/apps/lang/english.lang b/apps/lang/english.lang index 9328a4f..1a13000 100644 --- a/apps/lang/english.lang +++ b/apps/lang/english.lang @@ -12723,3 +12723,17 @@ *: "Automatic resume" + + id: LANG_AUTORESUME_AUTOMATIC + desc: resume on automatic track change + user: core + + *: "Resume on automatic track change" + + + *: "Resume on automatic track change" + + + *: "Resume on automatic track change" + + diff --git a/apps/menus/settings_menu.c b/apps/menus/settings_menu.c index 3cefbfa..2ceeb28 100644 --- a/apps/menus/settings_menu.c +++ b/apps/menus/settings_menu.c @@ -371,10 +371,12 @@ MAKE_MENU(bookmark_settings_menu, ID2P(LANG_BOOKMARK_SETTINGS), 0, #ifdef HAVE_TAGCACHE MENUITEM_SETTING(autoresume_enable, &global_settings.autoresume_enable, NULL); +MENUITEM_SETTING(autoresume_automatic, &global_settings.autoresume_automatic, + NULL); MAKE_MENU(autoresume_menu, ID2P(LANG_AUTORESUME), 0, Icon_NOICON, - &autoresume_enable); + &autoresume_enable, &autoresume_automatic); #endif /* HAVE_TAGCACHE */ /* AUTORESUME MENU */ diff --git a/apps/playback.c b/apps/playback.c index e33a4ac..1e515d5 100644 --- a/apps/playback.c +++ b/apps/playback.c @@ -1002,8 +1002,13 @@ static void audio_update_trackinfo(void) thistrack_id3->elapsed = 0; #ifdef HAVE_TAGCACHE - /* Resume all manually selected tracks if so configured */ - resume = global_settings.autoresume_enable && !automatic_skip; + /* Ignoring resume position for automatic track change if so configured */ + resume = global_settings.autoresume_enable && + (!automatic_skip /* Resume all manually selected tracks */ + || (global_settings.autoresume_automatic >= 0 /* Not never resume? */ + && (global_settings.autoresume_automatic == 0 /* Always resume? */ + || thistrack_id3->length /* Long track? */ + >= global_settings.autoresume_automatic * 60UL * 1000UL))); #endif if (!resume) diff --git a/apps/settings.h b/apps/settings.h index 4c28753..591a2c9 100644 --- a/apps/settings.h +++ b/apps/settings.h @@ -577,6 +577,8 @@ struct user_settings #endif bool tagcache_autoupdate; /* automatically keep tagcache in sync? */ bool autoresume_enable; /* enable autoupdate feature? */ + int autoresume_automatic; /* resume next track? -1=never, + 0=always, other = if longer than .. min */ bool runtimedb; /* runtime database active? */ #endif /* HAVE_TAGCACHE */ diff --git a/apps/settings_list.c b/apps/settings_list.c index 3da5f1d..34ca31e 100644 --- a/apps/settings_list.c +++ b/apps/settings_list.c @@ -332,6 +332,33 @@ static int32_t getlang_unit_0_is_skip_track(int value, int unit) return TALK_ID(value, UNIT_SEC); } +#ifdef HAVE_TAGCACHE +static const char* formatter_autoresume_automatic(char *buffer, + size_t buffer_size, + int val, const char *unit) +{ + (void)unit; + if (val == -1) + return str(LANG_NEVER); + else if (val == 0) + return str(LANG_ALWAYS); + else + snprintf(buffer, buffer_size, "%d min", val); + return buffer; +} + +static int32_t getlang_autoresume_automatic(int value, int unit) +{ + (void)unit; + if (value == -1) + return LANG_NEVER; + else if (value == 0) + return LANG_ALWAYS; + else + return TALK_ID(value, UNIT_MIN); +} +#endif + #ifdef HAVE_BACKLIGHT #ifdef SIMULATOR #define DEFAULT_BACKLIGHT_TIMEOUT 0 @@ -1260,6 +1287,13 @@ const struct settings_list settings[] = { BOOL_SETTING(0, autoresume_enable, LANG_AUTORESUME_ENABLE, false, "autoresume enable", off_on, LANG_AUTORESUME_ENABLE_YES, LANG_SET_BOOL_NO, NULL), + TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, autoresume_automatic, + LANG_AUTORESUME_AUTOMATIC, 0, "autoresume next track", + "never,all,5m,10m,15m,20m,25m,30m", + UNIT_MIN, formatter_autoresume_automatic, + getlang_autoresume_automatic, NULL, + 8, -1,0,5,10,15,20,25,30), + OFFON_SETTING(0, runtimedb, LANG_RUNTIMEDB_ACTIVE, false, "gather runtime data", NULL), #endif -- 1.7.1