feat(queue): move shuffle/loop controls into queue drawer, scoped to queue
Docker Build & Publish / push (push) Has been cancelled
Docker Build & Publish / build (push) Has been cancelled
Docker Build & Publish / Prune old image versions (push) Has been cancelled

This commit is contained in:
Senko-san
2026-06-13 18:17:21 +03:00
parent a8e060d1a8
commit 44c8d1870f
8 changed files with 65 additions and 60 deletions
+21 -1
View File
@@ -23,6 +23,8 @@ export interface QueueState {
source: QueueSource;
sourceId: string | null;
sourceName: string | null;
shuffle: boolean;
loop: boolean;
}
export const queueInitialState: QueueState = {
@@ -31,6 +33,8 @@ export const queueInitialState: QueueState = {
source: 'manual',
sourceId: null,
sourceName: null,
shuffle: false,
loop: false,
};
export const queueSlice = createSlice({
@@ -82,7 +86,15 @@ export const queueSlice = createSlice({
state.currentIndex = action.payload;
},
nextTrack(state) {
if (state.currentIndex < state.entries.length - 1) state.currentIndex++;
if (state.shuffle && state.entries.length > 1) {
let next = state.currentIndex;
while (next === state.currentIndex) {
next = Math.floor(Math.random() * state.entries.length);
}
state.currentIndex = next;
} else if (state.currentIndex < state.entries.length - 1) {
state.currentIndex++;
}
},
prevTrack(state) {
if (state.currentIndex > 0) state.currentIndex--;
@@ -91,6 +103,12 @@ export const queueSlice = createSlice({
state.entries = [];
state.currentIndex = -1;
},
toggleShuffle(state) {
state.shuffle = !state.shuffle;
},
toggleLoop(state) {
state.loop = !state.loop;
},
},
});
@@ -105,5 +123,7 @@ export const {
nextTrack,
prevTrack,
clearQueue,
toggleShuffle,
toggleLoop,
} = queueSlice.actions;
export default queueSlice.reducer;