From 5e7af98b76b7e2b37c00a4754f70b68c9d87e7df Mon Sep 17 00:00:00 2001 From: priyanshuANDcoad Date: Mon, 27 Jul 2026 20:18:12 +0530 Subject: [PATCH 1/3] fix(web): preserve slideshow pause state when viewing video slides --- .../components/asset-viewer/AssetViewer.svelte | 6 +++++- .../components/asset-viewer/SlideshowBar.svelte | 16 +++++++++++++--- web/src/lib/stores/slideshow.store.ts | 3 +++ 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/web/src/lib/components/asset-viewer/AssetViewer.svelte b/web/src/lib/components/asset-viewer/AssetViewer.svelte index 8f58dc97b9..58c04d8051 100644 --- a/web/src/lib/components/asset-viewer/AssetViewer.svelte +++ b/web/src/lib/components/asset-viewer/AssetViewer.svelte @@ -99,6 +99,8 @@ slideshowNavigation, slideshowState, slideshowRepeat, + slideshowPaused, + slideshowAutoplay, } = slideshowStore; const stackThumbnailSize = 60; const stackSelectedThumbnailSize = 65; @@ -210,7 +212,7 @@ const tracker = new InvocationTracker(); const navigateAsset = (order?: 'previous' | 'next') => { if (!order) { - if ($slideshowState === SlideshowState.PlaySlideshow) { + if ($slideshowState === SlideshowState.PlaySlideshow && !$slideshowPaused) { order = $slideshowNavigation === SlideshowNavigation.AscendingOrder ? 'previous' : 'next'; } else { return; @@ -296,6 +298,7 @@ const handlePlaySlideshow = async () => { slideshowStartAssetId = asset.id; + $slideshowPaused = !$slideshowAutoplay; try { await assetViewerHtmlElement?.requestFullscreen?.(); } catch (error) { @@ -314,6 +317,7 @@ } finally { $stopSlideshowProgress = true; $slideshowState = SlideshowState.None; + $slideshowPaused = false; } }; diff --git a/web/src/lib/components/asset-viewer/SlideshowBar.svelte b/web/src/lib/components/asset-viewer/SlideshowBar.svelte index 0ec5fe7dc0..b2758d5d59 100644 --- a/web/src/lib/components/asset-viewer/SlideshowBar.svelte +++ b/web/src/lib/components/asset-viewer/SlideshowBar.svelte @@ -31,7 +31,7 @@ onSetToFullScreen = () => {}, }: Props = $props(); - const { restartProgress, stopProgress, slideshowDelay, showProgressBar, slideshowNavigation, slideshowAutoplay } = + const { restartProgress, stopProgress, slideshowDelay, showProgressBar, slideshowNavigation, slideshowAutoplay, slideshowPaused } = slideshowStore; let progressBarStatus: ProgressBarStatus | undefined = $state(); @@ -156,8 +156,10 @@ shortcut: { key: ' ' }, onShortcut: () => { if (progressBarStatus === ProgressBarStatus.Paused) { + $slideshowPaused = false; progressBar?.play(); } else { + $slideshowPaused = true; progressBar?.pause(); } }, @@ -197,7 +199,15 @@ shape="round" color="secondary" icon={progressBarStatus === ProgressBarStatus.Paused ? mdiPlay : mdiPause} - onclick={() => (progressBarStatus === ProgressBarStatus.Paused ? progressBar?.play() : progressBar?.pause())} + onclick={() => { + if (progressBarStatus === ProgressBarStatus.Paused) { + $slideshowPaused = false; + progressBar?.play(); + } else { + $slideshowPaused = true; + progressBar?.pause(); + } + }} aria-label={progressBarStatus === ProgressBarStatus.Paused ? $t('play') : $t('pause')} /> {/if} @@ -240,7 +250,7 @@ {#if !isVideoSlide}