mirror of
https://github.com/Jellify-Music/App.git
synced 2026-04-21 09:08:56 -05:00
player fixes
This commit is contained in:
@@ -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 */}
|
||||
|
||||
@@ -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,
|
||||
}))
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user