player fixes

This commit is contained in:
Violet Caulfield
2026-03-04 16:40:16 -06:00
parent 69a1969102
commit e7b9b83732
3 changed files with 34 additions and 10 deletions
+1 -1
View File
@@ -131,7 +131,7 @@ export default function PlayerScreen(): React.JSX.Element {
inset={0}
position='absolute'
marginHorizontal={'$5'}
marginTop={'$5'}
marginTop={'$2'}
marginBottom={bottom}
>
{/* flexGrow 1 */}
+13 -7
View File
@@ -28,15 +28,21 @@ export async function updateTrackMediaInfo(tracks: TrackItem[]) {
await TrackPlayer.updateTracks(updatedTracks)
const actualQueue = await TrackPlayer.getActualQueue()
const { currentTrack: storedCurrentTrack, queue: persistedQueue } =
usePlayerQueueStore.getState()
const { currentTrack: storedCurrentTrack } = usePlayerQueueStore.getState()
const updatedCurrentTrack = actualQueue.find((t) => t.id === storedCurrentTrack?.id)
if (updatedCurrentTrack) {
usePlayerQueueStore.getState().setCurrentTrack(updatedCurrentTrack)
}
const updatedCurrentTrack =
updatedTracks.find((t) => t.id === storedCurrentTrack?.id) ??
persistedQueue.find((t) => t.id === storedCurrentTrack?.id)
usePlayerQueueStore.getState().setQueue(actualQueue)
usePlayerQueueStore.setState((state) => ({
...state,
queue: persistedQueue.map((t) => {
const updatedTrack = updatedTracks.find((ut) => ut.id === t.id)
return updatedTrack ?? t
}),
currentTrack: updatedCurrentTrack ?? state.currentTrack,
}))
}
/**
+20 -2
View File
@@ -7,13 +7,18 @@ import {
onPlaybackProgress,
onPlaybackStateChange,
onTracksNeedUpdate,
updateTrackMediaInfo,
} from './event-handlers'
import useJellifyStore from '../../../stores'
/**
* Initializes the player by registering event handlers and restoring state from storage.
* This function should be called once during app startup.
*/
export default function Initialize() {
restoreFromStorage()
registerEventHandlers()
restoreFromStorage()
}
function registerEventHandlers() {
@@ -64,6 +69,19 @@ function restoreFromStorage() {
TrackPlayer.skipToIndex(persistedIndex)
TrackPlayer.seek(savedPosition)
// Proactively resolve URLs for tracks that have empty/stale URLs after
// restoration (same pattern as useLoadNewQueue). Without this the player
// buffers endlessly on the first play attempt after an app restart.
TrackPlayer.getTracksNeedingUrls()
.then((tracksNeedingUrls) => {
if (tracksNeedingUrls.length > 0) {
return updateTrackMediaInfo(tracksNeedingUrls)
}
})
.catch((error) => {
console.warn('Failed to resolve URLs for restored queue:', error)
})
}
try {