Fix delayed preview not showing (#13295)

This commit is contained in:
Nicolas Mowen 2024-08-23 08:51:59 -06:00 committed by GitHub
parent 65ca3c8fa3
commit 2dc5a7f767
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 22 additions and 15 deletions

View File

@ -16,7 +16,10 @@ import { isAndroid, isChrome, isMobile } from "react-device-detect";
import { TimeRange } from "@/types/timeline";
import { Skeleton } from "../ui/skeleton";
import { cn } from "@/lib/utils";
import { usePreviewForTimeRange } from "@/hooks/use-camera-previews";
import {
getPreviewForTimeRange,
usePreviewForTimeRange,
} from "@/hooks/use-camera-previews";
type PreviewPlayerProps = {
className?: string;
@ -243,12 +246,7 @@ function PreviewVideoPlayer({
return;
}
const preview = cameraPreviews.find(
(preview) =>
preview.camera == camera &&
Math.round(preview.start) >= timeRange.after &&
Math.floor(preview.end) <= timeRange.before,
);
const preview = getPreviewForTimeRange(cameraPreviews, camera, timeRange);
if (preview != currentPreview) {
controller.newPreviewLoaded = false;

View File

@ -38,17 +38,26 @@ export function useCameraPreviews(
// it is not falsely thrown out.
const PREVIEW_END_BUFFER = 5; // seconds
export function getPreviewForTimeRange(
allPreviews: Preview[],
camera: string,
timeRange: TimeRange,
) {
return allPreviews.find(
(preview) =>
preview.camera == camera &&
Math.ceil(preview.start) >= timeRange.after &&
Math.floor(preview.end) <= timeRange.before + PREVIEW_END_BUFFER,
);
}
export function usePreviewForTimeRange(
allPreviews: Preview[],
camera: string,
timeRange: TimeRange,
) {
return useMemo(() => {
return allPreviews.find(
(preview) =>
preview.camera == camera &&
Math.ceil(preview.start) >= timeRange.after &&
Math.floor(preview.end) <= timeRange.before + PREVIEW_END_BUFFER,
);
}, [allPreviews, camera, timeRange]);
return useMemo(
() => getPreviewForTimeRange(allPreviews, camera, timeRange),
[allPreviews, camera, timeRange],
);
}