Fix recording layout previews

This commit is contained in:
Nicolas Mowen 2024-05-17 07:10:18 -06:00
parent 47601df645
commit 9480199fe3
2 changed files with 35 additions and 27 deletions

View File

@ -40,6 +40,33 @@ export default function PreviewPlayer({
}: PreviewPlayerProps) { }: PreviewPlayerProps) {
const [currentHourFrame, setCurrentHourFrame] = useState<string>(); const [currentHourFrame, setCurrentHourFrame] = useState<string>();
const currentPreview = useMemo(() => {
return cameraPreviews.find(
(preview) =>
preview.camera == camera &&
Math.round(preview.start) >= timeRange.after &&
Math.floor(preview.end) <= timeRange.before,
);
}, [cameraPreviews, camera, timeRange]);
if (currentPreview) {
return (
<PreviewVideoPlayer
className={className}
camera={camera}
timeRange={timeRange}
cameraPreviews={cameraPreviews}
initialPreview={currentPreview}
startTime={startTime}
isScrubbing={isScrubbing}
currentHourFrame={currentHourFrame}
onControllerReady={onControllerReady}
onClick={onClick}
setCurrentHourFrame={setCurrentHourFrame}
/>
);
}
if (isCurrentHour(timeRange.before)) { if (isCurrentHour(timeRange.before)) {
return ( return (
<PreviewFramesPlayer <PreviewFramesPlayer
@ -55,19 +82,10 @@ export default function PreviewPlayer({
} }
return ( return (
<PreviewVideoPlayer <div className="size-full flex items-center justify-center rounded-lg text-white md:rounded-2xl">
className={className} No Preview Found
camera={camera} </div>
timeRange={timeRange} )
cameraPreviews={cameraPreviews}
startTime={startTime}
isScrubbing={isScrubbing}
currentHourFrame={currentHourFrame}
onControllerReady={onControllerReady}
onClick={onClick}
setCurrentHourFrame={setCurrentHourFrame}
/>
);
} }
export abstract class PreviewController { export abstract class PreviewController {
@ -89,6 +107,7 @@ type PreviewVideoPlayerProps = {
camera: string; camera: string;
timeRange: TimeRange; timeRange: TimeRange;
cameraPreviews: Preview[]; cameraPreviews: Preview[];
initialPreview?: Preview;
startTime?: number; startTime?: number;
isScrubbing: boolean; isScrubbing: boolean;
currentHourFrame?: string; currentHourFrame?: string;
@ -101,6 +120,7 @@ function PreviewVideoPlayer({
camera, camera,
timeRange, timeRange,
cameraPreviews, cameraPreviews,
initialPreview,
startTime, startTime,
isScrubbing, isScrubbing,
currentHourFrame, currentHourFrame,
@ -147,18 +167,6 @@ function PreviewVideoPlayer({
const [firstLoad, setFirstLoad] = useState(true); const [firstLoad, setFirstLoad] = useState(true);
const initialPreview = useMemo(() => {
return cameraPreviews.find(
(preview) =>
preview.camera == camera &&
Math.round(preview.start) >= timeRange.after &&
Math.floor(preview.end) <= timeRange.before,
);
// we only want to calculate this once
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
const [currentPreview, setCurrentPreview] = useState(initialPreview); const [currentPreview, setCurrentPreview] = useState(initialPreview);
const onPreviewSeeked = useCallback(() => { const onPreviewSeeked = useCallback(() => {

View File

@ -544,7 +544,7 @@ export function RecordingView({
className={cn( className={cn(
"flex gap-2 overflow-auto", "flex gap-2 overflow-auto",
mainCameraAspect == "tall" mainCameraAspect == "tall"
? "h-full w-48 flex-col" ? "h-full w-72 flex-col"
: `h-28 w-full`, : `h-28 w-full`,
previewRowOverflows ? "" : "items-center justify-center", previewRowOverflows ? "" : "items-center justify-center",
)} )}
@ -559,7 +559,7 @@ export function RecordingView({
<div <div
key={cam} key={cam}
className={ className={
mainCameraAspect == "tall" ? undefined : "h-full" mainCameraAspect == "tall" ? "w-full" : "h-full"
} }
style={{ style={{
aspectRatio: getCameraAspect(cam), aspectRatio: getCameraAspect(cam),