diff --git a/src/hooks/player/callbacks.ts b/src/hooks/player/callbacks.ts index c719d677..afa58b0e 100644 --- a/src/hooks/player/callbacks.ts +++ b/src/hooks/player/callbacks.ts @@ -187,7 +187,6 @@ export const useRemoveFromQueue = () => { // If queue is now empty, reset player state to hide miniplayer if (newQueue.length === 0) { - usePlayerQueueStore.getState().setCurrentTrack(undefined) usePlayerQueueStore.getState().setCurrentIndex(undefined) PlayerQueue.deletePlaylist(playlistId) } @@ -220,7 +219,6 @@ export const useResetQueue = () => () => { usePlayerQueueStore.getState().setShuffled(false) usePlayerQueueStore.getState().setQueueRef('Recently Played') usePlayerQueueStore.getState().setQueue([]) - usePlayerQueueStore.getState().setCurrentTrack(undefined) usePlayerQueueStore.getState().setCurrentIndex(undefined) } diff --git a/src/providers/Player/utils/event-handlers.ts b/src/providers/Player/utils/event-handlers.ts index 6fc4b641..42d19ee6 100644 --- a/src/providers/Player/utils/event-handlers.ts +++ b/src/providers/Player/utils/event-handlers.ts @@ -28,12 +28,7 @@ export async function updateTrackMediaInfo(tracks: TrackItem[]) { await TrackPlayer.updateTracks(updatedTracks) - const { currentTrack: storedCurrentTrack, queue: persistedQueue } = - usePlayerQueueStore.getState() - - const updatedCurrentTrack = - updatedTracks.find((t) => t.id === storedCurrentTrack?.id) ?? - persistedQueue.find((t) => t.id === storedCurrentTrack?.id) + const { queue: persistedQueue } = usePlayerQueueStore.getState() usePlayerQueueStore.setState((state) => ({ ...state, @@ -41,7 +36,6 @@ export async function updateTrackMediaInfo(tracks: TrackItem[]) { const updatedTrack = updatedTracks.find((ut) => ut.id === t.id) return updatedTrack ?? t }), - currentTrack: updatedCurrentTrack ?? state.currentTrack, })) } @@ -67,11 +61,12 @@ export async function onChangeTrack() { return } - const { currentIndex, currentTrack } = await TrackPlayer.getState() + const { currentIndex } = await TrackPlayer.getState() const actualQueue = await TrackPlayer.getActualQueue() // Get the last track and the last known position... - const previousTrack = usePlayerQueueStore.getState().currentTrack + const { queue: prevQueue, currentIndex: prevIndex } = usePlayerQueueStore.getState() + const previousTrack = prevIndex !== undefined ? prevQueue[prevIndex] : undefined const lastPosition = usePlayerPlaybackStore.getState().position // ...report that playback has stopped for the previous track, including the last position @@ -85,19 +80,18 @@ export async function onChangeTrack() { usePlayerQueueStore.setState((state) => ({ ...state, currentIndex, - currentTrack: currentTrack ?? undefined, queue: actualQueue, })) // ...report that playback has started for the new track... - await reportPlaybackStarted(currentTrack!, 0) + await reportPlaybackStarted(actualQueue[currentIndex], 0) // TODO: Fix audio normalization logic against nitro player const { enableAudioNormalization } = usePlayerSettingsStore.getState() // ...and apply audio normalization if enabled in settings if (enableAudioNormalization) { - const volume = calculateTrackVolume(currentTrack!) + const volume = calculateTrackVolume(actualQueue[currentIndex]) TrackPlayer.setVolume(volume) } } @@ -107,7 +101,8 @@ export async function onPlaybackProgress(position: number, totalDuration: number position, }) - const { currentTrack } = usePlayerQueueStore.getState() + const { queue, currentIndex } = usePlayerQueueStore.getState() + const currentTrack = currentIndex !== undefined ? queue[currentIndex] : undefined if (!currentTrack) return @@ -130,7 +125,8 @@ export async function onPlaybackProgress(position: number, totalDuration: number } export async function onPlaybackStateChange(state: TrackPlayerState, reason: Reason | undefined) { - const currentTrack = usePlayerQueueStore.getState().currentTrack + const { queue, currentIndex } = usePlayerQueueStore.getState() + const currentTrack = currentIndex !== undefined ? queue[currentIndex] : undefined const position = usePlayerPlaybackStore.getState().position if (!currentTrack || reason === 'skip') return diff --git a/src/stores/player/queue.ts b/src/stores/player/queue.ts index b8477124..fd9d1df2 100644 --- a/src/stores/player/queue.ts +++ b/src/stores/player/queue.ts @@ -30,9 +30,6 @@ type PlayerQueueStore = { queue: TrackItem[] setQueue: (queue: TrackItem[]) => void - currentTrack: TrackItem | undefined - setCurrentTrack: (track: TrackItem | undefined) => void - currentIndex: number | undefined setCurrentIndex: (index: number | undefined) => void } @@ -58,7 +55,6 @@ const queueStorage: PersistStorage = { ...state, queue: state.queue ?? [], unShuffledQueue: state.unShuffledQueue ?? [], - currentTrack: state.currentTrack, } as unknown as PlayerQueueStore, } } catch (e) { @@ -122,12 +118,6 @@ export const usePlayerQueueStore = create()( queue, }), - currentTrack: undefined, - setCurrentTrack: (currentTrack: TrackItem | undefined) => - set({ - currentTrack, - }), - currentIndex: undefined, setCurrentIndex: (currentIndex: number | undefined) => set({ @@ -148,16 +138,19 @@ export const useShuffle = () => usePlayerQueueStore((state) => state.shuffled) export const useQueueRef = () => usePlayerQueueStore((state) => state.queueRef) -export const useCurrentTrack = () => usePlayerQueueStore((state) => state.currentTrack) +export const useCurrentTrack = () => + usePlayerQueueStore((state) => + state.currentIndex !== undefined ? state.queue[state.currentIndex] : undefined, + ) /** * Returns only the current track ID for efficient comparisons. * Use this in list items to avoid re-renders when other track properties change. */ -export const useCurrentTrackId = () => { - const currentTrack = useCurrentTrack() - return currentTrack?.id -} +export const useCurrentTrackId = () => + usePlayerQueueStore((state) => + state.currentIndex !== undefined ? state.queue[state.currentIndex]?.id : undefined, + ) export const useCurrentIndex = () => usePlayerQueueStore((state) => state.currentIndex) @@ -173,7 +166,6 @@ export const setNewQueue = ( queue, queueRef, currentIndex: index, - currentTrack: queue[index], shuffled, }) } @@ -187,7 +179,6 @@ export const clearQueueStore = () => { setQueueRef, setUnshuffledQueue, setQueue, - setCurrentTrack, setCurrentIndex, setRepeatMode, } = usePlayerQueueStore.getState() @@ -196,7 +187,6 @@ export const clearQueueStore = () => { setQueueRef(undefined) setUnshuffledQueue([]) setQueue([]) - setCurrentTrack(undefined) setCurrentIndex(undefined) setRepeatMode('off') }