mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-11-10 05:32:40 -05:00
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
This commit is contained in:
parent
d4f1247aec
commit
8a6aaaa5ed
1 changed files with 15 additions and 23 deletions
|
|
@ -654,7 +654,9 @@ static enum pv_onplay_result onplay_menu(int index)
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
/* shuffle */
|
/* 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;
|
ret = PV_ONPLAY_CHANGED;
|
||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
|
|
@ -779,8 +781,14 @@ static int playlist_callback_voice(int selected_item, void *data)
|
||||||
return 0;
|
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,
|
gui_synclist_set_voice_callback(playlist_lists,
|
||||||
global_settings.talk_file?
|
global_settings.talk_file?
|
||||||
&playlist_callback_voice:NULL);
|
&playlist_callback_voice:NULL);
|
||||||
|
|
@ -788,6 +796,7 @@ static void update_lists(struct gui_synclist * playlist_lists)
|
||||||
global_settings.playlist_viewer_icons?
|
global_settings.playlist_viewer_icons?
|
||||||
&playlist_callback_icons:NULL);
|
&playlist_callback_icons:NULL);
|
||||||
gui_synclist_set_title(playlist_lists, viewer.title, Icon_Playlist);
|
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_draw(playlist_lists);
|
||||||
gui_synclist_speak_item(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
|
/* the show_icons option in the playlist viewer settings
|
||||||
* menu might have changed */
|
* menu might have changed */
|
||||||
update_lists(playlist_lists);
|
update_lists(playlist_lists, false);
|
||||||
return exit;
|
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,
|
static bool open_playlist_viewer(const char* filename,
|
||||||
struct gui_synclist *playlist_lists,
|
struct gui_synclist *playlist_lists,
|
||||||
bool reload, int *most_recent_selection)
|
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))
|
if (!playlist_viewer_init(&viewer, filename, reload, most_recent_selection))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
prepare_lists(playlist_lists);
|
update_lists(playlist_lists, true);
|
||||||
|
|
||||||
return 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);
|
skin_update(CUSTOM_STATUSBAR, i, SKIN_REFRESH_ALL);
|
||||||
}
|
}
|
||||||
update_playlist(true);
|
update_playlist(true);
|
||||||
prepare_lists(&playlist_lists);
|
update_lists(&playlist_lists, true);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -1077,7 +1069,7 @@ enum playlist_viewer_result playlist_viewer_ex(const char* filename,
|
||||||
ret = PLAYLIST_VIEWER_USB;
|
ret = PLAYLIST_VIEWER_USB;
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
update_lists(&playlist_lists);
|
update_lists(&playlist_lists, false);
|
||||||
}
|
}
|
||||||
else if (global_settings.hotkey_tree == HOTKEY_DELETE)
|
else if (global_settings.hotkey_tree == HOTKEY_DELETE)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue