From 8a6aaaa5eda552548e5efc1b19e837c4dad4d88a Mon Sep 17 00:00:00 2001 From: Christian Soffke Date: Wed, 1 Nov 2023 16:09:11 +0100 Subject: Playlist Viewer: Make Shuffle behave like Reshuffle Moves currently playing track to the front of the playlist when shuffling. Also fixes issues with an incorrect resume index after repeatedly applying shuffle. Change-Id: Ieff76e47318a07ee5004b063ded439f2af4bae2f --- apps/playlist_viewer.c | 38 +++++++++++++++----------------------- 1 file changed, 15 insertions(+), 23 deletions(-) diff --git a/apps/playlist_viewer.c b/apps/playlist_viewer.c index d9f5d1c203..d0fc9a8370 100644 --- a/apps/playlist_viewer.c +++ b/apps/playlist_viewer.c @@ -654,7 +654,9 @@ static enum pv_onplay_result onplay_menu(int index) break; case 5: /* shuffle */ - playlist_randomise(viewer.playlist, current_tick, false); + playlist_sort(viewer.playlist, !viewer.playlist); + playlist_randomise(viewer.playlist, current_tick, !viewer.playlist); + viewer.selected_track = 0; ret = PV_ONPLAY_CHANGED; break; case 6: @@ -779,8 +781,14 @@ static int playlist_callback_voice(int selected_item, void *data) return 0; } -static void update_lists(struct gui_synclist * playlist_lists) +static void update_lists(struct gui_synclist * playlist_lists, bool init) { + if (init) + { + gui_synclist_init(playlist_lists, playlist_callback_name, + &viewer, false, 1, NULL); + gui_synclist_set_nb_items(playlist_lists, viewer.num_tracks); + } gui_synclist_set_voice_callback(playlist_lists, global_settings.talk_file? &playlist_callback_voice:NULL); @@ -788,6 +796,7 @@ static void update_lists(struct gui_synclist * playlist_lists) global_settings.playlist_viewer_icons? &playlist_callback_icons:NULL); gui_synclist_set_title(playlist_lists, viewer.title, Icon_Playlist); + gui_synclist_select_item(playlist_lists, viewer.selected_track); gui_synclist_draw(playlist_lists); gui_synclist_speak_item(playlist_lists); } @@ -814,27 +823,10 @@ static bool update_viewer_with_changes(struct gui_synclist *playlist_lists, enum /* the show_icons option in the playlist viewer settings * menu might have changed */ - update_lists(playlist_lists); + update_lists(playlist_lists, false); return exit; } -static void prepare_lists(struct gui_synclist * playlist_lists) -{ - gui_synclist_init(playlist_lists, playlist_callback_name, - &viewer, false, 1, NULL); - gui_synclist_set_voice_callback(playlist_lists, - global_settings.talk_file ? - &playlist_callback_voice : NULL); - gui_synclist_set_icon_callback(playlist_lists, - global_settings.playlist_viewer_icons ? - &playlist_callback_icons : NULL); - gui_synclist_set_nb_items(playlist_lists, viewer.num_tracks); - gui_synclist_set_title(playlist_lists, viewer.title, Icon_Playlist); - gui_synclist_select_item(playlist_lists, viewer.selected_track); - gui_synclist_draw(playlist_lists); - gui_synclist_speak_item(playlist_lists); -} - static bool open_playlist_viewer(const char* filename, struct gui_synclist *playlist_lists, bool reload, int *most_recent_selection) @@ -844,7 +836,7 @@ static bool open_playlist_viewer(const char* filename, if (!playlist_viewer_init(&viewer, filename, reload, most_recent_selection)) return false; - prepare_lists(playlist_lists); + update_lists(playlist_lists, true); return true; } @@ -1038,7 +1030,7 @@ enum playlist_viewer_result playlist_viewer_ex(const char* filename, skin_update(CUSTOM_STATUSBAR, i, SKIN_REFRESH_ALL); } update_playlist(true); - prepare_lists(&playlist_lists); + update_lists(&playlist_lists, true); } break; #endif @@ -1077,7 +1069,7 @@ enum playlist_viewer_result playlist_viewer_ex(const char* filename, ret = PLAYLIST_VIEWER_USB; goto exit; } - update_lists(&playlist_lists); + update_lists(&playlist_lists, false); } else if (global_settings.hotkey_tree == HOTKEY_DELETE) { -- cgit v1.2.3