fix: preserve player position only when switching away from existing playback

This commit is contained in:
2026-06-16 15:28:21 +02:00
committed by Milas Holsting
parent 795bbe825f
commit 4557d8552c

View File

@@ -43,6 +43,7 @@ export const loadVideoSource = (url: string, type?: string): void => {
const wasPlaying = !state.elements.video.paused; const wasPlaying = !state.elements.video.paused;
const prevDisplayTime = displayTimeFromAbsolute(state.elements.video.currentTime); const prevDisplayTime = displayTimeFromAbsolute(state.elements.video.currentTime);
const shouldPreservePosition = prevDisplayTime > 0;
// Fully reset the element before setting a new source. // Fully reset the element before setting a new source.
destroyVideoSource(); destroyVideoSource();
@@ -57,9 +58,10 @@ export const loadVideoSource = (url: string, type?: string): void => {
state.elements.video.load(); state.elements.video.load();
} }
// Try an eager seek; if metadata isn't ready yet, main.ts will restore via pendingSeekTime. // Preserve position only when switching away from an existing playback state.
state.playback.pendingSeekTime = prevDisplayTime; // On initial load, a zero pending seek would overwrite server-provided resume time.
if (state.elements.video.readyState >= HTMLMediaElement.HAVE_METADATA) { state.playback.pendingSeekTime = shouldPreservePosition ? prevDisplayTime : null;
if (shouldPreservePosition && state.elements.video.readyState >= HTMLMediaElement.HAVE_METADATA) {
invalidateBounds(); invalidateBounds();
state.elements.video.currentTime = absoluteTimeFromDisplay(prevDisplayTime); state.elements.video.currentTime = absoluteTimeFromDisplay(prevDisplayTime);
state.playback.pendingSeekTime = null; state.playback.pendingSeekTime = null;