From 10aec7bcac94d2c561da1b67b056a49cb5b332b4 Mon Sep 17 00:00:00 2001 From: jeffvli Date: Wed, 10 Dec 2025 19:34:59 -0800 Subject: [PATCH] always set start song index to 0 when adding to queue in shuffle mode --- src/renderer/store/player.store.ts | 37 +++++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/src/renderer/store/player.store.ts b/src/renderer/store/player.store.ts index 7bd8c992d..677f5e110 100644 --- a/src/renderer/store/player.store.ts +++ b/src/renderer/store/player.store.ts @@ -462,9 +462,40 @@ export const usePlayerStoreBase = createWithEqualityFn()( state.player.shuffle === PlayerShuffle.TRACK && state.player.queueType !== PlayerQueueType.PRIORITY ) { - state.queue.shuffled = generateShuffledIndexes( - newUniqueIds.length, - ); + // If targetSongUniqueId is provided, ensure it's at position 0 in shuffled array + if (targetSongUniqueId) { + const initialIndex = newUniqueIds.findIndex( + (id) => id === targetSongUniqueId, + ); + if (initialIndex !== -1) { + const allIndexes = Array.from( + { length: newUniqueIds.length }, + (_, i) => i, + ); + + const remainingIndexes = allIndexes.filter( + (idx) => idx !== initialIndex, + ); + + const shuffledRemaining = shuffleInPlace([ + ...remainingIndexes, + ]); + + state.queue.shuffled = [ + initialIndex, + ...shuffledRemaining, + ]; + } else { + // Fallback: if initial song not found, generate normally + state.queue.shuffled = generateShuffledIndexes( + newUniqueIds.length, + ); + } + } else { + state.queue.shuffled = generateShuffledIndexes( + newUniqueIds.length, + ); + } } });