diff --git a/web/src/api/ws.tsx b/web/src/api/ws.tsx index 831b3dff3..5d7d400f0 100644 --- a/web/src/api/ws.tsx +++ b/web/src/api/ws.tsx @@ -221,7 +221,7 @@ export function useFrigateStats(): { payload: FrigateStats } { export function useInitialCameraState( camera: string, - refreshOnStart: boolean, + revalidateOnFocus: boolean, ): { payload: FrigateCameraState; } { @@ -232,12 +232,25 @@ export function useInitialCameraState( const data = JSON.parse(payload as string); useEffect(() => { - if (refreshOnStart) { + let listener = undefined; + if (revalidateOnFocus) { sendCommand("onConnect"); + listener = () => { + if (document.visibilityState == "visible") { + sendCommand("onConnect"); + } + }; + addEventListener("visibilitychange", listener); } + + return () => { + if (listener) { + removeEventListener("visibilitychange", listener); + } + }; // only refresh when onRefresh value changes // eslint-disable-next-line react-hooks/exhaustive-deps - }, [refreshOnStart]); + }, [revalidateOnFocus]); return { payload: data ? data[camera] : undefined }; } diff --git a/web/src/components/player/HlsVideoPlayer.tsx b/web/src/components/player/HlsVideoPlayer.tsx index 612489137..92834cd00 100644 --- a/web/src/components/player/HlsVideoPlayer.tsx +++ b/web/src/components/player/HlsVideoPlayer.tsx @@ -16,6 +16,8 @@ import { AxiosResponse } from "axios"; import { toast } from "sonner"; import { useOverlayState } from "@/hooks/use-overlay-state"; import { usePersistence } from "@/hooks/use-persistence"; +import { cn } from "@/lib/utils"; +import { ASPECT_VERTICAL_LAYOUT } from "@/types/record"; // Android native hls does not seek correctly const USE_NATIVE_HLS = !isAndroid; @@ -70,6 +72,11 @@ export default function HlsVideoPlayer({ height: videoRef.current.videoHeight, }); } + + setTallCamera( + videoRef.current.videoWidth / videoRef.current.videoHeight < + ASPECT_VERTICAL_LAYOUT, + ); } }, [videoRef, setFullResolution]); @@ -109,6 +116,7 @@ export default function HlsVideoPlayer({ // controls + const [tallCamera, setTallCamera] = useState(false); const [isPlaying, setIsPlaying] = useState(true); const [muted, setMuted] = useOverlayState("playerMuted", true); const [volume, setVolume] = useOverlayState("playerVolume", 1.0); @@ -153,7 +161,10 @@ export default function HlsVideoPlayer({ return ( ([]); @@ -27,7 +27,7 @@ export function useCameraActivity( const { payload: initialCameraState } = useInitialCameraState( camera.name, - refreshOnStart, + revalidateOnFocus, ); const updatedCameraState = useDeepMemo(initialCameraState);