From 929a1b4b23cb38c2d2d0d2478ddcb439f49305d9 Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Thu, 7 Mar 2024 14:26:20 -0700 Subject: [PATCH] Simplify switching between cameras --- .../components/player/DynamicVideoPlayer.tsx | 84 +++++++------ web/src/views/events/EventView.tsx | 1 + web/src/views/events/RecordingView.tsx | 114 ++++++++++++------ 3 files changed, 127 insertions(+), 72 deletions(-) diff --git a/web/src/components/player/DynamicVideoPlayer.tsx b/web/src/components/player/DynamicVideoPlayer.tsx index 0c5b98e69..7cddb59b2 100644 --- a/web/src/components/player/DynamicVideoPlayer.tsx +++ b/web/src/components/player/DynamicVideoPlayer.tsx @@ -28,6 +28,7 @@ type DynamicVideoPlayerProps = { timeRange: { start: number; end: number }; cameraPreviews: Preview[]; previewOnly?: boolean; + preloadRecordings: boolean; onControllerReady: (controller: DynamicVideoController) => void; onClick?: () => void; }; @@ -37,6 +38,7 @@ export default function DynamicVideoPlayer({ timeRange, cameraPreviews, previewOnly = false, + preloadRecordings = true, onControllerReady, onClick, }: DynamicVideoPlayerProps) { @@ -100,18 +102,26 @@ export default function DynamicVideoPlayer({ // eslint-disable-next-line react-hooks/exhaustive-deps }, [controller]); + const [initPreviewOnly, setInitPreviewOnly] = useState(previewOnly); + useEffect(() => { if (!controller || !playerRef) { return; } + if (previewOnly == initPreviewOnly) { + return; + } + if (previewOnly) { playerRef.autoplay(false); controller.removePlayerListeners(); } else { controller.setPlayerListeners(); - playerRef.play(); + controller.seekToTimestamp(playerRef.currentTime() || 0, true); } + + setInitPreviewOnly(previewOnly); // we only want to fire once when players are ready // eslint-disable-next-line react-hooks/exhaustive-deps }, [controller, previewOnly]); @@ -266,42 +276,44 @@ export default function DynamicVideoPlayer({ className={`relative ${className ?? ""} ${onClick ? (hasRecordingAtTime ? "cursor-pointer" : "") : ""}`} onClick={onClick} > -
- { - setPlayerRef(player); - }} - onDispose={() => { - setPlayerRef(undefined); - }} + {preloadRecordings && ( +
- {config && focusedItem && ( - - )} - -
+ { + setPlayerRef(player); + }} + onDispose={() => { + setPlayerRef(undefined); + }} + > + {config && focusedItem && ( + + )} + +
+ )}