From a5959b19b8c51c5325321dff01d690699046935a Mon Sep 17 00:00:00 2001 From: Honey Date: Sat, 2 May 2026 21:27:57 +0200 Subject: [PATCH] fix: pwa changes --- src/main.js | 3 ++- src/player.js | 8 +++++++- src/state.js | 1 + 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main.js b/src/main.js index 852441a..211922f 100644 --- a/src/main.js +++ b/src/main.js @@ -118,7 +118,8 @@ window.addEventListener('load', () => { S.audio.addEventListener('pause', () => { setPlayIcon(false); document.getElementById('player-art').classList.remove('spinning'); - if(navigator.mediaSession) navigator.mediaSession.playbackState = 'paused'; + // Skip during track transitions — src change fires pause but we're about to play() immediately + if(!S._changingTrack && navigator.mediaSession) navigator.mediaSession.playbackState = 'paused'; }); S.previewAudio.addEventListener('timeupdate', updatePreviewProgress); S.previewAudio.addEventListener('ended', stopPreview); diff --git a/src/player.js b/src/player.js index 76ee3e2..b0826f2 100644 --- a/src/player.js +++ b/src/player.js @@ -17,8 +17,14 @@ export function playQueue(songs, startIdx) { export function playCurrent() { if(S.qIdx < 0 || S.qIdx >= S.queue.length) return; const s = S.queue[S.qIdx]; + // Pre-update MediaSession before src change so the OS never sees a "paused" flash + // (setting src fires pause synchronously; _changingTrack suppresses that in the pause handler) + updateMediaSession(s); + if(navigator.mediaSession) navigator.mediaSession.playbackState = 'playing'; + S._changingTrack = true; S.audio.src = streamUrl(s.id); - S.audio.play(); + S._changingTrack = false; + S.audio.play().catch(() => {}); updatePlayerUI(s); onNpSongChange(s.id); renderQueue(); diff --git a/src/state.js b/src/state.js index 36216b5..84957bc 100644 --- a/src/state.js +++ b/src/state.js @@ -12,6 +12,7 @@ export const S = { previewAudio: null, previewCurrent: null, _scrubbing: false, + _changingTrack: false, _msPosLast: 0, queueOpen: false,