From 9b72f2dedd3359c0c4b8ddf87166cec4a9456153 Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Thu, 28 Mar 2024 16:39:52 -0600 Subject: [PATCH] Fix current hour --- web/src/components/player/PreviewPlayer.tsx | 59 ++++++------------- .../player/dynamic/DynamicVideoPlayer.tsx | 5 +- web/src/utils/timelineUtil.tsx | 11 +++- web/src/views/events/RecordingView.tsx | 52 ++++++++-------- 4 files changed, 56 insertions(+), 71 deletions(-) diff --git a/web/src/components/player/PreviewPlayer.tsx b/web/src/components/player/PreviewPlayer.tsx index 7164bf108..4e503ad0d 100644 --- a/web/src/components/player/PreviewPlayer.tsx +++ b/web/src/components/player/PreviewPlayer.tsx @@ -12,8 +12,7 @@ import { Preview } from "@/types/preview"; import { PreviewPlayback } from "@/types/playback"; import { isCurrentHour } from "@/utils/dateUtil"; import { baseUrl } from "@/api/baseUrl"; -import { isAndroid, isChrome, isMobile, isSafari } from "react-device-detect"; -import { Skeleton } from "../ui/skeleton"; +import { isAndroid, isChrome, isMobile } from "react-device-detect"; import { TimeRange } from "@/types/timeline"; type PreviewPlayerProps = { @@ -34,7 +33,6 @@ export default function PreviewPlayer({ cameraPreviews, startTime, isScrubbing, - forceAspect, onControllerReady, onClick, }: PreviewPlayerProps) { @@ -62,7 +60,6 @@ export default function PreviewPlayer({ cameraPreviews={cameraPreviews} startTime={startTime} isScrubbing={isScrubbing} - forceAspect={forceAspect} currentHourFrame={currentHourFrame} onControllerReady={onControllerReady} onClick={onClick} @@ -92,7 +89,6 @@ type PreviewVideoPlayerProps = { cameraPreviews: Preview[]; startTime?: number; isScrubbing: boolean; - forceAspect?: number; currentHourFrame?: string; onControllerReady: (controller: PreviewVideoController) => void; onClick?: () => void; @@ -105,7 +101,6 @@ function PreviewVideoPlayer({ cameraPreviews, startTime, isScrubbing, - forceAspect, currentHourFrame, onControllerReady, onClick, @@ -148,8 +143,6 @@ function PreviewVideoPlayer({ // initial state - const [loaded, setLoaded] = useState(false); - const [hasCanvas, setHasCanvas] = useState(false); const initialPreview = useMemo(() => { return cameraPreviews.find( (preview) => @@ -191,7 +184,6 @@ function PreviewVideoPlayer({ if (preview != currentPreview) { setCurrentPreview(preview); - setLoaded(false); } controller.newPlayback({ @@ -215,21 +207,20 @@ function PreviewVideoPlayer({ return; } - if (canvasRef.current) { - const context = canvasRef.current.getContext("2d"); - - if (context) { - context.drawImage(previewRef.current, 0, 0, videoSize[0], videoSize[1]); - } - - setHasCanvas(true); + if (!canvasRef.current && videoSize[0] > 0) { + const canvas = document.createElement("canvas"); + canvas.width = videoSize[0]; + canvas.height = videoSize[1]; + canvasRef.current = canvas; } - if (isSafari) { - setTimeout(() => previewRef.current?.load(), 100); - } else { - previewRef.current.load(); + const context = canvasRef.current?.getContext("2d"); + + if (context) { + context.drawImage(previewRef.current, 0, 0, videoSize[0], videoSize[1]); + setCurrentHourFrame(canvasRef.current?.toDataURL("image/webp")); } + // we only want this to change when current preview changes // eslint-disable-next-line react-hooks/exhaustive-deps }, [currentPreview, previewRef]); @@ -237,26 +228,16 @@ function PreviewVideoPlayer({ return (
- {currentHourFrame && ( - - )} - previewRef.current?.load()} /> - {!loaded && !hasCanvas && !currentHourFrame && ( - - )} {cameraPreviews && !currentPreview && (
No Preview Found @@ -479,7 +456,7 @@ function PreviewFramesPlayer({ return (
endOfThisHour) { break; @@ -150,6 +150,11 @@ export function getChunkedTimeDay(timeRange: TimeRange): TimeRange[] { start = startDay.getTime() / 1000; } + data.push({ + after: start, + before: Math.floor(timeRange.before), + }); + return data; } diff --git a/web/src/views/events/RecordingView.tsx b/web/src/views/events/RecordingView.tsx index abfc76991..d3935cfca 100644 --- a/web/src/views/events/RecordingView.tsx +++ b/web/src/views/events/RecordingView.tsx @@ -226,14 +226,14 @@ export function RecordingView({ }, [getCameraAspect, mainCamera]); const grow = useMemo(() => { - if (isMobile) { - return ""; - } - if (mainCameraAspect == "wide") { return "w-full aspect-wide"; - } else if (isDesktop && mainCameraAspect == "tall") { - return "h-full aspect-tall flex flex-col justify-center"; + } else if (mainCameraAspect == "tall") { + if (isDesktop) { + return "h-full aspect-tall flex flex-col justify-center"; + } else { + return "size-full"; + } } else { return "w-full aspect-video"; } @@ -352,10 +352,11 @@ export function RecordingView({ : `w-full ${mainCameraAspect == "wide" ? "aspect-wide" : "aspect-video"}` } style={{ - aspectRatio: - mainCameraAspect == "tall" + aspectRatio: isDesktop + ? mainCameraAspect == "tall" ? getCameraAspect(mainCamera) - : undefined, + : undefined + : Math.max(1, getCameraAspect(mainCamera) ?? 0), }} > {isDesktop && (
{allCameras.map((cam) => { - if (cam !== mainCamera) { - const preview = ( + if (cam == mainCamera) { + return; + } + + return ( +
{ previewRefs.current[cam] = controller; controller.scrubToTimestamp(startTime); }} onClick={() => onSelectCamera(cam)} /> - ); - - if (mainCameraAspect == "tall") { - return
{preview}
; - } - - return preview; - } - return null; +
+ ); })}
)}