From ec7b281103375a2fc5582f55398600b4b9573b87 Mon Sep 17 00:00:00 2001 From: Pas <74743263+Pasithea0@users.noreply.github.com> Date: Sun, 18 May 2025 16:02:21 -0600 Subject: [PATCH] disable controls if watchparty guest --- src/components/player/atoms/Episodes.tsx | 4 +-- .../player/atoms/NextEpisodeButton.tsx | 2 ++ .../player/atoms/SkipIntroButton.tsx | 15 ++++++----- src/components/player/atoms/Skips.tsx | 16 +++++++----- src/pages/parts/player/PlayerPart.tsx | 25 ++++++++++++------- 5 files changed, 37 insertions(+), 25 deletions(-) diff --git a/src/components/player/atoms/Episodes.tsx b/src/components/player/atoms/Episodes.tsx index c78726bf..3798214f 100644 --- a/src/components/player/atoms/Episodes.tsx +++ b/src/components/player/atoms/Episodes.tsx @@ -476,7 +476,7 @@ export function EpisodesRouter(props: EpisodesProps) { return ; } -export function Episodes() { +export function Episodes(props: { inControl: boolean }) { const { t } = useTranslation(); const router = useOverlayRouter("episodes"); const setHasOpenOverlay = usePlayerStore((s) => s.setHasOpenOverlay); @@ -485,7 +485,7 @@ export function Episodes() { useEffect(() => { setHasOpenOverlay(router.isRouterActive); }, [setHasOpenOverlay, router.isRouterActive]); - if (type !== "show") return null; + if (type !== "show" || !props.inControl) return null; return ( diff --git a/src/components/player/atoms/NextEpisodeButton.tsx b/src/components/player/atoms/NextEpisodeButton.tsx index cefa8cf7..437c0ddf 100644 --- a/src/components/player/atoms/NextEpisodeButton.tsx +++ b/src/components/player/atoms/NextEpisodeButton.tsx @@ -93,6 +93,7 @@ function useNextSeasonEpisode( export function NextEpisodeButton(props: { controlsShowing: boolean; onChange?: (meta: PlayerMeta) => void; + inControl: boolean; }) { const { t } = useTranslation(); const duration = usePlayerStore((s) => s.progress.duration); @@ -208,6 +209,7 @@ export function NextEpisodeButton(props: { time, ]); + if (!props.inControl) return null; if (!meta?.episode || !nextEp) return null; if (metaType !== "show") return null; diff --git a/src/components/player/atoms/SkipIntroButton.tsx b/src/components/player/atoms/SkipIntroButton.tsx index c9e8942c..4f8f08d6 100644 --- a/src/components/player/atoms/SkipIntroButton.tsx +++ b/src/components/player/atoms/SkipIntroButton.tsx @@ -42,18 +42,12 @@ function Button(props: { export function SkipIntroButton(props: { controlsShowing: boolean; skipTime?: number | null; + inControl: boolean; }) { const time = usePlayerStore((s) => s.progress.time); const status = usePlayerStore((s) => s.status); const display = usePlayerStore((s) => s.display); - const showingState = shouldShowSkipButton(time, props.skipTime); - - let show = false; - if (showingState === "always") show = true; - else if (showingState === "hover" && props.controlsShowing) show = true; - if (status !== "playing") show = false; - const animation = showingState === "hover" ? "slide-up" : "fade"; let bottom = "bottom-[calc(6rem+env(safe-area-inset-bottom))]"; if (showingState === "always") { @@ -61,12 +55,17 @@ export function SkipIntroButton(props: { ? bottom : "bottom-[calc(3rem+env(safe-area-inset-bottom))]"; } - const handleSkip = useCallback(() => { if (typeof props.skipTime === "number" && display) { display.setTime(props.skipTime); } }, [props.skipTime, display]); + if (!props.inControl) return null; + + let show = false; + if (showingState === "always") show = true; + else if (showingState === "hover" && props.controlsShowing) show = true; + if (status !== "playing") show = false; return ( s.display); const time = usePlayerStore((s) => s.progress.time); - const commit = useCallback(() => { display?.setTime(time + 10); }, [display, time]); - + if (!props.inControl) return null; return ( s.display); const time = usePlayerStore((s) => s.progress.time); - const commit = useCallback(() => { display?.setTime(time - 10); }, [display, time]); - + if (!props.inControl) return null; return ( s.status); const { isMobile } = useIsMobile(); const isLoading = usePlayerStore((s) => s.mediaPlaying.isLoading); - const router = useOverlayRouter("settings"); + const { isHost, enabled } = useWatchPartyStore(); + + const inControl = !enabled || isHost; const isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent); const isIOSPWA = @@ -95,12 +97,12 @@ export function PlayerPart(props: PlayerPartProps) { className="text-white" show={showTouchTargets && status === playerStatus.PLAYING} > - + - + @@ -149,15 +151,15 @@ export function PlayerPart(props: PlayerPartProps) { {status === playerStatus.PLAYING ? ( <> - - + + ) : null}
- + {status === playerStatus.PLAYING ? ( <> @@ -186,7 +188,7 @@ export function PlayerPart(props: PlayerPartProps) {
{/* Disable PiP for iOS PWA */} {!isIOSPWA && status === playerStatus.PLAYING && } - + {status === playerStatus.PLAYING ? (
@@ -219,9 +221,14 @@ export function PlayerPart(props: PlayerPartProps) { - + ); }