Fix slide timer not auto progressing

This commit is contained in:
MakD
2026-10-13 03:47:29 +05:30
parent 23dcd06d23
commit 8cd503c8fd
+55 -14
View File
@@ -342,6 +342,10 @@ const setConfig = (patch) => {
saveStoredConfig(patch);
const changed = applyConfig(patch, { label: "runtime" });
if (changed.includes("shuffleInterval") && STATE.slideshow.slideInterval) {
STATE.slideshow.slideInterval.interval = CONFIG.shuffleInterval;
}
if (changed.some((key) => STRUCTURAL_CONFIG_KEYS.has(key))) {
resetSlideshowState();
bootstrap();
@@ -1902,10 +1906,11 @@ class SlideTimer {
this.startedAt = Date.now() - (this.interval - this.remaining);
this.resumeId = setTimeout(() => {
this.resumeId = null;
this.callback();
this.startedAt = Date.now();
this.remaining = this.interval;
this.timerId = setInterval(this.callback, this.interval);
this.callback();
}, this.remaining);
return this;
}
@@ -3232,13 +3237,13 @@ const SlideshowManager = {
STATE.slideshow.trailerStartTimer = setTimeout(() => {
this.startTrailer(index, currentItemId, fallbackToTimer);
}, CONFIG.trailerStartDelayMs);
} else {
fallbackToTimer();
}
fallbackToTimer();
function fallbackToTimer() {
if (!STATE.slideshow.isPaused && STATE.slideshow.slideInterval) {
STATE.slideshow.slideInterval.restart();
STATE.slideshow.slideInterval.start();
}
}
@@ -3704,6 +3709,8 @@ const SlideshowManager = {
STATE.slideshow.isVideoPlaying = true;
this.setTrailerVisible(itemId, trailerContainer, true);
STATE.slideshow.slideInterval?.stop();
this.setProgressRunning(false);
},
onTrailerEnded(itemId, trailerContainer) {
@@ -3712,6 +3719,28 @@ const SlideshowManager = {
this.nextSlide();
},
resumeAfterTrailer(itemId) {
const currentItemId =
STATE.slideshow.itemIds[STATE.slideshow.currentSlideIndex];
if (itemId !== currentItemId) return;
if (
STATE.slideshow.isPaused ||
STATE.slideshow.hoverHeld ||
document.hidden
) {
return;
}
const timer = STATE.slideshow.slideInterval;
if (!timer || timer.timerId || timer.resumeId) return;
timer.start();
this.restartProgress(
document.querySelector(`.slide[data-item-id="${itemId}"]`),
);
},
onPlayerStateChange(event, itemId, trailerContainer) {
if (!document.querySelector(`.slide[data-item-id="${itemId}"]`)) return;
@@ -3726,7 +3755,13 @@ const SlideshowManager = {
event.data === YTRef.PlayerState.PAUSED ||
event.data === YTRef.PlayerState.CUED
) {
const currentItemId =
STATE.slideshow.itemIds[STATE.slideshow.currentSlideIndex];
if (itemId !== currentItemId) return;
STATE.slideshow.isVideoPlaying = false;
this.resumeAfterTrailer(itemId);
}
},
@@ -3735,10 +3770,6 @@ const SlideshowManager = {
`Trailer for ${itemId} failed with YouTube error ${event?.data}; continuing without it.`,
);
clearTimeout(STATE.slideshow.trailerWatchdog);
STATE.slideshow.trailerWatchdog = null;
STATE.slideshow.isVideoPlaying = false;
const slide = document.querySelector(`.slide[data-item-id="${itemId}"]`);
trailerContainer?.classList.remove("active");
slide?.querySelector(".backdrop")?.classList.remove("with-video");
@@ -3746,9 +3777,15 @@ const SlideshowManager = {
STATE.slideshow.slideVideoIds[itemId] = null;
if (!STATE.slideshow.isPaused && STATE.slideshow.slideInterval) {
STATE.slideshow.slideInterval.restart();
}
const currentItemId =
STATE.slideshow.itemIds[STATE.slideshow.currentSlideIndex];
if (itemId !== currentItemId) return;
clearTimeout(STATE.slideshow.trailerWatchdog);
STATE.slideshow.trailerWatchdog = null;
STATE.slideshow.isVideoPlaying = false;
this.resumeAfterTrailer(itemId);
},
async loadSlideshowData() {
@@ -4417,9 +4454,11 @@ const initPageVisibilityHandler = () => {
if (document.hidden) {
console.log("Tab inactive - pausing slideshow and videos");
wasVideoPlayingBeforeHide = STATE.slideshow.isVideoPlaying;
if (STATE.slideshow.slideInterval) {
STATE.slideshow.slideInterval.stop();
STATE.slideshow.slideInterval.pause();
}
SlideshowManager.setProgressRunning(false);
const currentItemId =
STATE.slideshow.itemIds[STATE.slideshow.currentSlideIndex];
if (currentItemId && STATE.slideshow.players[currentItemId]) {
@@ -4451,14 +4490,16 @@ const initPageVisibilityHandler = () => {
} catch (e) {
console.warn("Error resuming video on tab show:", e);
if (STATE.slideshow.slideInterval) {
STATE.slideshow.slideInterval.start();
STATE.slideshow.slideInterval.resume();
}
SlideshowManager.setProgressRunning(true);
}
}
} else {
if (STATE.slideshow.slideInterval) {
STATE.slideshow.slideInterval.start();
STATE.slideshow.slideInterval.resume();
}
SlideshowManager.setProgressRunning(true);
}
wasVideoPlayingBeforeHide = false;
}