From e6ed9229c2a2911a7c474576d7858134f89fb0e2 Mon Sep 17 00:00:00 2001 From: Kendall Garner <17521368+kgarner7@users.noreply.github.com> Date: Sun, 22 Oct 2023 22:21:31 +0000 Subject: [PATCH] [bugfix]: fix queue offset when removing tracks (#301) * [bugfix]: fix queue offset when removing tracks * Fix song index numbers when removing songs --------- Co-authored-by: jeffvli --- .../context-menu/context-menu-provider.tsx | 4 +++- src/renderer/store/player.store.ts | 17 ++++++++++++++--- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/renderer/features/context-menu/context-menu-provider.tsx b/src/renderer/features/context-menu/context-menu-provider.tsx index 19937b86..0f43dbc8 100644 --- a/src/renderer/features/context-menu/context-menu-provider.tsx +++ b/src/renderer/features/context-menu/context-menu-provider.tsx @@ -613,10 +613,12 @@ export const ContextMenuProvider = ({ children }: ContextMenuProviderProps) => { } } + ctx.tableApi?.redrawRows(); + if (isCurrentSongRemoved) { remote?.updateSong({ song: playerData.current.song }); } - }, [ctx.dataNodes, playerType, removeFromQueue]); + }, [ctx.dataNodes, ctx.tableApi, playerType, removeFromQueue]); const handleDeselectAll = useCallback(() => { ctx.tableApi?.deselectAll(); diff --git a/src/renderer/store/player.store.ts b/src/renderer/store/player.store.ts index dcbf190a..1bc06d87 100644 --- a/src/renderer/store/player.store.ts +++ b/src/renderer/store/player.store.ts @@ -631,10 +631,17 @@ export const usePlayerStore = create()( removeFromQueue: (uniqueIds) => { const queue = get().queue.default; const currentSong = get().current.song; + const currentPosition = get().current.index; + let queueShift = 0; - const newQueue = queue.filter( - (song) => !uniqueIds.includes(song.uniqueId), - ); + const newQueue = queue.filter((song, index) => { + const shouldKeep = !uniqueIds.includes(song.uniqueId); + if (!shouldKeep && index < currentPosition) { + queueShift += 1; + } + + return shouldKeep; + }); const newShuffledQueue = get().queue.shuffled.filter( (uniqueId) => !uniqueIds.includes(uniqueId), ); @@ -648,6 +655,10 @@ export const usePlayerStore = create()( if (isCurrentSongRemoved) { state.current.song = newQueue[0]; state.current.index = 0; + } else { + // if we removed any songs prior to the current one, + // shift the index back as necessary + state.current.index -= queueShift; } });