mirror of
https://github.com/Jellify-Music/App.git
synced 2026-03-18 11:10:59 -05:00
remove explicit currentTrack and instead derive it from the currentIndex and actualQueue
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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<PlayerQueueStore> = {
|
||||
...state,
|
||||
queue: state.queue ?? [],
|
||||
unShuffledQueue: state.unShuffledQueue ?? [],
|
||||
currentTrack: state.currentTrack,
|
||||
} as unknown as PlayerQueueStore,
|
||||
}
|
||||
} catch (e) {
|
||||
@@ -122,12 +118,6 @@ export const usePlayerQueueStore = create<PlayerQueueStore>()(
|
||||
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')
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user