From 114c1ddef17a4adfbe8ce4e2e435845a57419d11 Mon Sep 17 00:00:00 2001 From: skalthoff <32023561+skalthoff@users.noreply.github.com> Date: Mon, 29 Dec 2025 13:38:42 -0800 Subject: [PATCH] fix: Reset player state and hide miniplayer when queue becomes empty after track removal or refresh. (#880) Co-authored-by: Violet Caulfield <42452695+anultravioletaurora@users.noreply.github.com> --- src/providers/Player/hooks/mutations.ts | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/providers/Player/hooks/mutations.ts b/src/providers/Player/hooks/mutations.ts index 6c45d705..7aaed2d0 100644 --- a/src/providers/Player/hooks/mutations.ts +++ b/src/providers/Player/hooks/mutations.ts @@ -225,12 +225,19 @@ export const useRemoveFromQueue = () => { return async (index: number) => { trigger('impactMedium') - TrackPlayer.remove([index]) + await TrackPlayer.remove([index]) const prevQueue = usePlayerQueueStore.getState().queue const newQueue = prevQueue.filter((_, i) => i !== index) usePlayerQueueStore.getState().setQueue(newQueue) + + // If queue is now empty, reset player state to hide miniplayer + if (newQueue.length === 0) { + usePlayerQueueStore.getState().setCurrentTrack(undefined) + usePlayerQueueStore.getState().setCurrentIndex(undefined) + await TrackPlayer.reset() + } } } @@ -240,6 +247,13 @@ export const useRemoveUpcomingTracks = () => { const newQueue = await TrackPlayer.getQueue() usePlayerQueueStore.getState().setQueue(newQueue as JellifyTrack[]) + + // If queue is now empty, reset player state to hide miniplayer + if (newQueue.length === 0) { + usePlayerQueueStore.getState().setCurrentTrack(undefined) + usePlayerQueueStore.getState().setCurrentIndex(undefined) + await TrackPlayer.reset() + } } }