Add ability to save/restore queue (#111)

* add ability to save/restore play queue

* Add restoreQueue action

* Add optional pause param on setQueue

---------

Co-authored-by: jeffvli <jeffvictorli@gmail.com>
This commit is contained in:
Kendall Garner 2023-05-21 09:29:58 +00:00 committed by GitHub
parent c1c6ce33e4
commit 106fc90c4a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 180 additions and 7 deletions

View file

@ -74,6 +74,7 @@ export interface PlayerSlice extends PlayerState {
previous: () => PlayerData;
removeFromQueue: (uniqueIds: string[]) => PlayerData;
reorderQueue: (rowUniqueIds: string[], afterUniqueId?: string) => PlayerData;
restoreQueue: (data: Partial<PlayerState>) => PlayerData;
setCurrentIndex: (index: number) => PlayerData;
setCurrentTime: (time: number) => void;
setCurrentTrack: (uniqueId: string) => PlayerData;
@ -615,6 +616,20 @@ export const usePlayerStore = create<PlayerSlice>()(
return get().actions.getPlayerData();
},
restoreQueue: (data) => {
set((state) => {
state.current = {
...state.current,
...data.current,
};
state.queue = {
...state.queue,
...data.queue,
};
});
return get().actions.getPlayerData();
},
setCurrentIndex: (index) => {
if (get().shuffle === PlayerShuffle.TRACK) {
const foundSong = get().queue.default.find(
@ -874,6 +889,7 @@ export const useQueueControls = () =>
moveToTopOfQueue: state.actions.moveToTopOfQueue,
removeFromQueue: state.actions.removeFromQueue,
reorderQueue: state.actions.reorderQueue,
restoreQueue: state.actions.restoreQueue,
setCurrentIndex: state.actions.setCurrentIndex,
setCurrentTrack: state.actions.setCurrentTrack,
setShuffledIndex: state.actions.setShuffledIndex,

View file

@ -69,6 +69,7 @@ export interface SettingsState {
followSystemTheme: boolean;
fontContent: string;
playButtonBehavior: Play;
resume: boolean;
showQueueDrawerButton: boolean;
sideQueueType: SideQueueType;
skipButtons: {
@ -128,6 +129,7 @@ const initialState: SettingsState = {
followSystemTheme: false,
fontContent: 'Poppins',
playButtonBehavior: Play.NOW,
resume: false,
showQueueDrawerButton: false,
sideQueueType: 'sideQueue',
skipButtons: {