From 32994aaaa5e1e08f133f6745d657f290f08f51e8 Mon Sep 17 00:00:00 2001 From: Timo <6156589+Shik3i@users.noreply.github.com> Date: Thu, 2 Jul 2026 13:30:20 +0200 Subject: [PATCH] Support dynamic Disney+ timeline offset/scale caching for accurate seek sync --- extension/content.js | 13 ++++++++++--- scripts/test-content-video-finder.cjs | 2 ++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/extension/content.js b/extension/content.js index 95d6dad..22412db 100644 --- a/extension/content.js +++ b/extension/content.js @@ -60,6 +60,8 @@ const PAGE_API_SEEK_BRIDGE = 1; let lastDisneyPlusTimelineCandidates = []; let lastKnownDisneyPlusDuration = 0; + let lastKnownDisneyPlusScale = 1; + let lastKnownDisneyPlusStart = 0; function hostMatchesUrl(host, url) { const normalized = String(url || '') @@ -265,6 +267,8 @@ const nativeStart = Number.isFinite(current) ? current - ui.current * nativeScale : (range ? range.start : 0); + lastKnownDisneyPlusScale = nativeScale; + lastKnownDisneyPlusStart = nativeStart; return { ...(range || {}), current: ui.current, @@ -275,13 +279,16 @@ } if (lastKnownDisneyPlusDuration > 0) { + const calculatedCurrent = (Number.isFinite(current) && lastKnownDisneyPlusScale > 0) + ? (current - lastKnownDisneyPlusStart) / lastKnownDisneyPlusScale + : 0; return { start: 0, end: lastKnownDisneyPlusDuration, duration: lastKnownDisneyPlusDuration, - current: Number.isFinite(current) ? current : 0, - nativeScale: 1, - nativeStart: 0 + current: Math.max(0, Math.min(lastKnownDisneyPlusDuration, calculatedCurrent)), + nativeScale: lastKnownDisneyPlusScale, + nativeStart: lastKnownDisneyPlusStart }; } diff --git a/scripts/test-content-video-finder.cjs b/scripts/test-content-video-finder.cjs index f7d0bc6..113f8e6 100644 --- a/scripts/test-content-video-finder.cjs +++ b/scripts/test-content-video-finder.cjs @@ -92,6 +92,8 @@ function loadTimelineFns(hostname, document = makeDocument()) { return Function('window', 'document', [ 'let lastDisneyPlusTimelineCandidates = [];', 'let lastKnownDisneyPlusDuration = 0;', + 'let lastKnownDisneyPlusScale = 1;', + 'let lastKnownDisneyPlusStart = 0;', extractFunction('hostMatchesUrl', source), extractFunction('matchesPlayerUrls', source), extractFunction('isDisneyPlusHost', source),