Skip to content

Commit

Permalink
UI Tweaks (#11459)
Browse files Browse the repository at this point in the history
* refresh dashboard activity on visibility change

* Make video controls more consistent

* Use const
  • Loading branch information
NickM-27 authored May 20, 2024
1 parent dda65ba commit 2a86969
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 6 deletions.
19 changes: 16 additions & 3 deletions web/src/api/ws.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,7 @@ export function useFrigateStats(): { payload: FrigateStats } {

export function useInitialCameraState(
camera: string,
refreshOnStart: boolean,
revalidateOnFocus: boolean,
): {
payload: FrigateCameraState;
} {
Expand All @@ -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 };
}
Expand Down
13 changes: 12 additions & 1 deletion web/src/components/player/HlsVideoPlayer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -70,6 +72,11 @@ export default function HlsVideoPlayer({
height: videoRef.current.videoHeight,
});
}

setTallCamera(
videoRef.current.videoWidth / videoRef.current.videoHeight <
ASPECT_VERTICAL_LAYOUT,
);
}
}, [videoRef, setFullResolution]);

Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -153,7 +161,10 @@ export default function HlsVideoPlayer({
return (
<TransformWrapper minScale={1.0}>
<VideoControls
className="absolute bottom-5 left-1/2 z-50 -translate-x-1/2"
className={cn(
"absolute left-1/2 z-50 -translate-x-1/2",
tallCamera ? "bottom-12" : "bottom-5",
)}
video={videoRef.current}
isPlaying={isPlaying}
show={visible && (controls || controlsOpen)}
Expand Down
4 changes: 2 additions & 2 deletions web/src/hooks/use-camera-activity.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,15 @@ type useCameraActivityReturn = {

export function useCameraActivity(
camera: CameraConfig,
refreshOnStart: boolean = true,
revalidateOnFocus: boolean = true,
): useCameraActivityReturn {
const [objects, setObjects] = useState<ObjectType[]>([]);

// init camera activity

const { payload: initialCameraState } = useInitialCameraState(
camera.name,
refreshOnStart,
revalidateOnFocus,
);

const updatedCameraState = useDeepMemo(initialCameraState);
Expand Down

0 comments on commit 2a86969

Please sign in to comment.