Skip to content

Commit

Permalink
Show current time on timeline
Browse files Browse the repository at this point in the history
  • Loading branch information
NickM-27 committed Feb 29, 2024
1 parent dde1fe5 commit 8e8a48f
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 5 deletions.
39 changes: 34 additions & 5 deletions web/src/components/player/PreviewThumbnailPlayer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ type PreviewPlayerProps = {
autoPlayback?: boolean;
setReviewed?: (reviewId: string) => void;
onClick?: (reviewId: string) => void;
onTimeUpdate?: (time: number | undefined) => void;
};

type Preview = {
Expand All @@ -44,6 +45,7 @@ export default function PreviewThumbnailPlayer({
relevantPreview,
setReviewed,
onClick,
onTimeUpdate,
}: PreviewPlayerProps) {
const apiHost = useApiHost();
const { data: config } = useSWR<FrigateConfig>("config");
Expand All @@ -62,7 +64,7 @@ export default function PreviewThumbnailPlayer({
}, [ignoreClick, review, onClick]);

const swipeHandlers = useSwipeable({
onSwipedLeft: () => setPlayback(false),
onSwipedLeft: () => (setReviewed ? setReviewed(review.id) : null),
onSwipedRight: () => setPlayback(true),
preventScrollOnSwipe: true,
});
Expand Down Expand Up @@ -92,6 +94,10 @@ export default function PreviewThumbnailPlayer({
}

setPlayback(false);

if (onTimeUpdate) {
onTimeUpdate(undefined);
}
}
},

Expand Down Expand Up @@ -125,6 +131,7 @@ export default function PreviewThumbnailPlayer({
setReviewed={handleSetReviewed}
setIgnoreClick={setIgnoreClick}
isPlayingBack={setPlayback}
onTimeUpdate={onTimeUpdate}
/>
</div>
)}
Expand Down Expand Up @@ -190,13 +197,15 @@ type PreviewContentProps = {
setReviewed?: () => void;
setIgnoreClick: (ignore: boolean) => void;
isPlayingBack: (ended: boolean) => void;
onTimeUpdate?: (time: number | undefined) => void;
};
function PreviewContent({
review,
relevantPreview,
setReviewed,
setIgnoreClick,
isPlayingBack,
onTimeUpdate,
}: PreviewContentProps) {
// preview

Expand All @@ -208,6 +217,7 @@ function PreviewContent({
setReviewed={setReviewed}
setIgnoreClick={setIgnoreClick}
isPlayingBack={isPlayingBack}
onTimeUpdate={onTimeUpdate}
/>
);
} else if (isCurrentHour(review.start_time)) {
Expand All @@ -217,6 +227,7 @@ function PreviewContent({
setReviewed={setReviewed}
setIgnoreClick={setIgnoreClick}
isPlayingBack={isPlayingBack}
onTimeUpdate={onTimeUpdate}
/>
);
}
Expand All @@ -229,13 +240,15 @@ type VideoPreviewProps = {
setReviewed?: () => void;
setIgnoreClick: (ignore: boolean) => void;
isPlayingBack: (ended: boolean) => void;
onTimeUpdate?: (time: number | undefined) => void;
};
function VideoPreview({
review,
relevantPreview,
setReviewed,
setIgnoreClick,
isPlayingBack,
onTimeUpdate,
}: VideoPreviewProps) {
const playerRef = useRef<HTMLVideoElement | null>(null);

Expand Down Expand Up @@ -286,8 +299,10 @@ function VideoPreview({
// time progress update

const onProgress = useCallback(() => {
if (!setProgress) {
return;
if (onTimeUpdate) {
onTimeUpdate(
relevantPreview.start + (playerRef.current?.currentTime || 0),
);
}

const playerProgress =
Expand All @@ -310,6 +325,10 @@ function VideoPreview({
if (playerPercent > 100) {
if (isMobile) {
isPlayingBack(false);

if (onTimeUpdate) {
onTimeUpdate(undefined);
}
} else {
playerRef.current?.pause();
}
Expand Down Expand Up @@ -424,17 +443,19 @@ type InProgressPreviewProps = {
setReviewed?: (reviewId: string) => void;
setIgnoreClick: (ignore: boolean) => void;
isPlayingBack: (ended: boolean) => void;
onTimeUpdate?: (time: number | undefined) => void;
};
function InProgressPreview({
review,
setReviewed,
setIgnoreClick,
isPlayingBack,
onTimeUpdate,
}: InProgressPreviewProps) {
const apiHost = useApiHost();
const { data: previewFrames } = useSWR<string[]>(
`preview/${review.camera}/start/${Math.floor(review.start_time) - 4}/end/${
Math.ceil(review.end_time) + 4
`preview/${review.camera}/start/${Math.floor(review.start_time) - PREVIEW_PADDING}/end/${
Math.ceil(review.end_time) + PREVIEW_PADDING
}/frames`,
);
const [manualFrame, setManualFrame] = useState(false);
Expand All @@ -445,13 +466,21 @@ function InProgressPreview({
return;
}

if (onTimeUpdate) {
onTimeUpdate(review.start_time - PREVIEW_PADDING + key);
}

if (manualFrame) {
return;
}

if (key == previewFrames.length - 1) {
if (isMobile) {
isPlayingBack(false);

if (onTimeUpdate) {
onTimeUpdate(undefined);
}
}

return;
Expand Down
7 changes: 7 additions & 0 deletions web/src/views/events/EventView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,10 @@ export default function EventView({
return data;
}, [minimap]);

// preview playback

const [previewTime, setPreviewTime] = useState<number>();

if (!config) {
return <ActivityIndicator />;
}
Expand Down Expand Up @@ -287,6 +291,7 @@ export default function EventView({
review={value}
relevantPreview={relevantPreview}
setReviewed={markItemAsReviewed}
onTimeUpdate={setPreviewTime}
onClick={onSelectReview}
/>
</div>
Expand All @@ -308,6 +313,8 @@ export default function EventView({
showMinimap={showMinimap}
minimapStartTime={minimapBounds.start}
minimapEndTime={minimapBounds.end}
showHandlebar={previewTime != undefined}
handlebarTime={previewTime}
events={reviewItems.all}
severityType={severity}
contentRef={contentRef}
Expand Down

0 comments on commit 8e8a48f

Please sign in to comment.