From fc0dec833b8a675cb6f7ce341727c36613b78e66 Mon Sep 17 00:00:00 2001 From: WardPearce Date: Fri, 7 Nov 2025 16:06:33 +1300 Subject: [PATCH] More improvements to player positioning on watch page --- materialious/src/lib/components/Player.svelte | 14 ++++++ materialious/src/lib/css/global.css | 4 ++ materialious/src/lib/watch.ts | 16 +++++-- materialious/src/routes/(app)/+layout.svelte | 45 ++++++++++++------- .../routes/(app)/watch/[slug]/+page.svelte | 13 +++++- 5 files changed, 71 insertions(+), 21 deletions(-) diff --git a/materialious/src/lib/components/Player.svelte b/materialious/src/lib/components/Player.svelte index fe17fe28..820bcda7 100644 --- a/materialious/src/lib/components/Player.svelte +++ b/materialious/src/lib/components/Player.svelte @@ -458,6 +458,20 @@ }); playerElement = document.getElementById('player') as HTMLMediaElement; + // Due to how our player is rendered in layout for stateful pip + // we calaculate player height to then allow children pages + // to wrap around it. + function updateVideoPlayerHeight() { + const container = document.getElementById('shaka-container') as HTMLElement; + + if (container) { + const height = container.getBoundingClientRect().height; + document.documentElement.style.setProperty('--video-player-height', `${height}px`); + } + } + window.addEventListener('resize', updateVideoPlayerHeight); + updateVideoPlayerHeight(); + // Change instantly to stop video from being loud for a second restoreVolumePreference(); diff --git a/materialious/src/lib/css/global.css b/materialious/src/lib/css/global.css index 481ecaca..17589e02 100644 --- a/materialious/src/lib/css/global.css +++ b/materialious/src/lib/css/global.css @@ -2,6 +2,10 @@ display: none; } +:root { + --video-player-height: 0px; +} + @font-face { font-family: Inter; src: url('/static/inter.ttf'); diff --git a/materialious/src/lib/watch.ts b/materialious/src/lib/watch.ts index 38299bee..f79562b3 100644 --- a/materialious/src/lib/watch.ts +++ b/materialious/src/lib/watch.ts @@ -10,6 +10,7 @@ import { loadEntirePlaylist } from '$lib/playlist'; import { authStore, playerProxyVideosStore, + playerState, returnYTDislikesInstanceStore, returnYtDislikesStore } from '$lib/store'; @@ -19,11 +20,18 @@ import { get } from 'svelte/store'; import { _ } from './i18n'; export async function getWatchDetails(videoId: string, url: URL) { + const playerStateRetrieved = get(playerState); + let video; - try { - video = await getVideo(videoId, get(playerProxyVideosStore), { priority: 'high' }); - } catch (errorMessage: any) { - error(500, errorMessage); + + if (playerStateRetrieved && playerStateRetrieved.data.video.videoId === videoId) { + video = playerStateRetrieved.data.video; + } else { + try { + video = await getVideo(videoId, get(playerProxyVideosStore), { priority: 'high' }); + } catch (errorMessage: any) { + error(500, errorMessage); + } } if (video.premium) { diff --git a/materialious/src/routes/(app)/+layout.svelte b/materialious/src/routes/(app)/+layout.svelte index 252673a5..ef9f7646 100644 --- a/materialious/src/routes/(app)/+layout.svelte +++ b/materialious/src/routes/(app)/+layout.svelte @@ -406,22 +406,35 @@
{#if $playerState} -
- {#if playerIsPip} - -
- {/if} - {#key $playerState.data.video.videoId} - - {/key} - {#if playerIsPip} - - {/if} +
+
+ {#if playerIsPip} + +
+ {/if} + {#key $playerState.data.video.videoId} + + {/key} + {#if playerIsPip} + + {/if} +
{/if} diff --git a/materialious/src/routes/(app)/watch/[slug]/+page.svelte b/materialious/src/routes/(app)/watch/[slug]/+page.svelte index 437f0de3..d4b7d3bd 100644 --- a/materialious/src/routes/(app)/watch/[slug]/+page.svelte +++ b/materialious/src/routes/(app)/watch/[slug]/+page.svelte @@ -520,7 +520,7 @@ {/if}
{#if !theatreMode} -
+