From 5ae5543cdaeb32dc85bdff595c65f13f0d0e27b1 Mon Sep 17 00:00:00 2001 From: vicrodh Date: Sat, 7 Mar 2026 23:03:28 -0600 Subject: [PATCH] fix: remove position recall from session restore, always start from beginning Position restore was unreliable (always showed 0:01). Session restore now loads the track ready to play from start without seeking. --- src/lib/stores/playerStore.ts | 33 ++++++--------------------------- 1 file changed, 6 insertions(+), 27 deletions(-) diff --git a/src/lib/stores/playerStore.ts b/src/lib/stores/playerStore.ts index eaf8156e9..e69577181 100644 --- a/src/lib/stores/playerStore.ts +++ b/src/lib/stores/playerStore.ts @@ -165,7 +165,7 @@ let gaplessRequestInFlight = false; let gaplessAttemptTrackId: number | null = null; // Session restore state - when set, next play will load the track first -let pendingSessionRestore: { trackId: number; position: number } | null = null; +let pendingSessionRestore: { trackId: number } | null = null; // Listeners const listeners = new Set<() => void>(); @@ -315,22 +315,14 @@ export function setQueueEnded(ended: boolean): void { queueEnded = ended; } -/** - * Set visual-only current time (no backend seek). Used by session restore. - */ -export function setPlayerCurrentTime(time: number): void { - currentTime = time; - notifyListeners(); -} - // ============ Playback Controls ============ /** * Set pending session restore - will load track on next play */ -export function setPendingSessionRestore(trackId: number, position: number): void { - pendingSessionRestore = { trackId, position }; - console.log('[Player] Set pending session restore:', { trackId, position }); +export function setPendingSessionRestore(trackId: number): void { + pendingSessionRestore = { trackId }; + console.log('[Player] Set pending session restore:', trackId); } /** @@ -376,11 +368,10 @@ export async function togglePlay(): Promise { if (newIsPlaying) { // Check if we need to load the track first (session restore) if (pendingSessionRestore && pendingSessionRestore.trackId === currentTrack.id) { - console.log('[Player] Loading restored track:', pendingSessionRestore.trackId); - const savedPosition = pendingSessionRestore.position; + console.log('[Player] Loading restored track from start:', pendingSessionRestore.trackId); pendingSessionRestore = null; // Clear before loading - // Restore source-specific playback + // Restore source-specific playback (always from start) if (currentTrack.source === 'plex') { const plexBaseUrl = getUserItem('qbz-plex-poc-base-url') || ''; const plexToken = getUserItem('qbz-plex-poc-token') || ''; @@ -410,18 +401,6 @@ export async function togglePlay(): Promise { }); } - // Seek to saved position after a short delay to let audio load - if (savedPosition > 0) { - setTimeout(async () => { - try { - await invoke('v2_seek', { position: savedPosition }); - console.log('[Player] Seeked to restored position:', savedPosition); - } catch (seekErr) { - console.error('[Player] Failed to seek to restored position:', seekErr); - } - }, 500); - } - } else { await invoke('v2_resume_playback'); }