diff --git a/web/src/routes/(user)/memory/[[photos=photos]]/[[assetId=id]]/MemoryVideoViewer.svelte b/web/src/routes/(user)/memory/[[photos=photos]]/[[assetId=id]]/MemoryVideoViewer.svelte index 2bfb594b3a..8ad6ec5ab5 100644 --- a/web/src/routes/(user)/memory/[[photos=photos]]/[[assetId=id]]/MemoryVideoViewer.svelte +++ b/web/src/routes/(user)/memory/[[photos=photos]]/[[assetId=id]]/MemoryVideoViewer.svelte @@ -4,7 +4,6 @@ import type { TimelineAsset } from '$lib/managers/timeline-manager/types'; import { autoPlayVideo } from '$lib/stores/preferences.store'; import { getAssetMediaUrl } from '$lib/utils'; - import { videoSessionManager } from '$lib/managers/video-session-manager.svelte'; import { AssetMediaSize } from '@immich/sdk'; import 'media-chrome/media-controller'; import { onMount } from 'svelte'; @@ -12,25 +11,15 @@ interface Props { asset: TimelineAsset; - videoPlayer: HTMLVideoElement | undefined; } - // eslint-disable-next-line no-useless-assignment - let { asset, videoPlayer = $bindable() }: Props = $props(); + let { asset }: Props = $props(); let showVideo = $state(false); onMount(() => { // Show video after mount to ensure fading in. showVideo = true; }); - - const controller = $derived(videoSessionManager.get(asset.id)); // self-acquires the controller for the asset - $effect(() => { - videoPlayer = controller?.element; - return () => { - videoPlayer = undefined; - }; - }); {#if showVideo} diff --git a/web/src/routes/(user)/memory/[[photos=photos]]/[[assetId=id]]/MemoryViewer.svelte b/web/src/routes/(user)/memory/[[photos=photos]]/[[assetId=id]]/MemoryViewer.svelte index ef671c399a..a168b8ecf9 100644 --- a/web/src/routes/(user)/memory/[[photos=photos]]/[[assetId=id]]/MemoryViewer.svelte +++ b/web/src/routes/(user)/memory/[[photos=photos]]/[[assetId=id]]/MemoryViewer.svelte @@ -21,6 +21,7 @@ import { authManager } from '$lib/managers/auth-manager.svelte'; import { memoryManager, type MemoryAsset } from '$lib/managers/memory-manager.svelte'; import type { TimelineAsset, Viewport } from '$lib/managers/timeline-manager/types'; + import { videoSessionManager } from '$lib/managers/video-session-manager.svelte'; import { Route } from '$lib/route'; import { getAssetBulkActions } from '$lib/services/asset.service'; import { locale } from '$lib/stores/preferences.store'; @@ -80,7 +81,7 @@ // need to include padding in the viewport for gallery const galleryViewport: Viewport = $derived({ height: viewport.height, width: viewport.width - 32 }); let progressBarController: Tween | undefined = $state(undefined); - let videoPlayer: HTMLVideoElement | undefined = $state(); + const videoPlayer = $derived(currentAssetId ? videoSessionManager.get(currentAssetId)?.element : undefined); const asHref = (asset: { id: string }) => `?${QueryParameter.ID}=${asset.id}`; const handleNavigate = async (asset?: { id: string }) => { @@ -516,7 +517,7 @@
{#key current.asset.id} {#if current.asset.isVideo} - + {:else} {/if}