mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-02-10 21:25:24 +03:00
Use timerange everywhere and ensure recordings has last 24 hours
This commit is contained in:
parent
0223d6df60
commit
939dfef6e4
@ -338,6 +338,7 @@ export default function Events() {
|
|||||||
reviewItems={reviews}
|
reviewItems={reviews}
|
||||||
reviewSummary={reviewSummary}
|
reviewSummary={reviewSummary}
|
||||||
allPreviews={allPreviews}
|
allPreviews={allPreviews}
|
||||||
|
timeRange={selectedTimeRange}
|
||||||
filter={reviewFilter}
|
filter={reviewFilter}
|
||||||
updateFilter={onUpdateFilter}
|
updateFilter={onUpdateFilter}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@ -121,13 +121,17 @@ export function getTimelineItemDescription(timelineItem: Timeline) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getChunkedTimeDay(timestamp: number) {
|
/**
|
||||||
|
*
|
||||||
|
* @param timeRange
|
||||||
|
* @returns timeRange chunked into individual hours
|
||||||
|
*/
|
||||||
|
export function getChunkedTimeDay(timeRange: TimeRange): TimeRange[] {
|
||||||
const endOfThisHour = new Date();
|
const endOfThisHour = new Date();
|
||||||
endOfThisHour.setHours(endOfThisHour.getHours() + 1, 0, 0, 0);
|
endOfThisHour.setHours(endOfThisHour.getHours() + 1, 0, 0, 0);
|
||||||
const data: TimeRange[] = [];
|
const data: TimeRange[] = [];
|
||||||
const startDay = new Date(timestamp * 1000);
|
const startDay = new Date(timeRange.after * 1000);
|
||||||
startDay.setHours(0, 0, 0, 0);
|
startDay.setMinutes(0, 0, 0);
|
||||||
const startTimestamp = startDay.getTime() / 1000;
|
|
||||||
let start = startDay.getTime() / 1000;
|
let start = startDay.getTime() / 1000;
|
||||||
let end = 0;
|
let end = 0;
|
||||||
|
|
||||||
@ -146,7 +150,7 @@ export function getChunkedTimeDay(timestamp: number) {
|
|||||||
start = startDay.getTime() / 1000;
|
start = startDay.getTime() / 1000;
|
||||||
}
|
}
|
||||||
|
|
||||||
return { start: startTimestamp, end, ranges: data };
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getChunkedTimeRange(
|
export function getChunkedTimeRange(
|
||||||
|
|||||||
@ -46,7 +46,7 @@ type EventViewProps = {
|
|||||||
reviews?: ReviewSegment[];
|
reviews?: ReviewSegment[];
|
||||||
reviewSummary?: ReviewSummary;
|
reviewSummary?: ReviewSummary;
|
||||||
relevantPreviews?: Preview[];
|
relevantPreviews?: Preview[];
|
||||||
timeRange: { before: number; after: number };
|
timeRange: TimeRange;
|
||||||
filter?: ReviewFilter;
|
filter?: ReviewFilter;
|
||||||
severity: ReviewSeverity;
|
severity: ReviewSeverity;
|
||||||
startTime?: number;
|
startTime?: number;
|
||||||
|
|||||||
@ -46,6 +46,7 @@ type RecordingViewProps = {
|
|||||||
startTime: number;
|
startTime: number;
|
||||||
reviewItems?: ReviewSegment[];
|
reviewItems?: ReviewSegment[];
|
||||||
reviewSummary?: ReviewSummary;
|
reviewSummary?: ReviewSummary;
|
||||||
|
timeRange: TimeRange;
|
||||||
allCameras: string[];
|
allCameras: string[];
|
||||||
allPreviews?: Preview[];
|
allPreviews?: Preview[];
|
||||||
filter?: ReviewFilter;
|
filter?: ReviewFilter;
|
||||||
@ -56,6 +57,7 @@ export function RecordingView({
|
|||||||
startTime,
|
startTime,
|
||||||
reviewItems,
|
reviewItems,
|
||||||
reviewSummary,
|
reviewSummary,
|
||||||
|
timeRange,
|
||||||
allCameras,
|
allCameras,
|
||||||
allPreviews,
|
allPreviews,
|
||||||
filter,
|
filter,
|
||||||
@ -85,15 +87,18 @@ export function RecordingView({
|
|||||||
"timeline",
|
"timeline",
|
||||||
);
|
);
|
||||||
|
|
||||||
const timeRange = useMemo(() => getChunkedTimeDay(startTime), [startTime]);
|
const chunkedTimeRange = useMemo(
|
||||||
|
() => getChunkedTimeDay(timeRange),
|
||||||
|
[timeRange],
|
||||||
|
);
|
||||||
const [selectedRangeIdx, setSelectedRangeIdx] = useState(
|
const [selectedRangeIdx, setSelectedRangeIdx] = useState(
|
||||||
timeRange.ranges.findIndex((chunk) => {
|
chunkedTimeRange.findIndex((chunk) => {
|
||||||
return chunk.after <= startTime && chunk.before >= startTime;
|
return chunk.after <= startTime && chunk.before >= startTime;
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
const currentTimeRange = useMemo(
|
const currentTimeRange = useMemo(
|
||||||
() => timeRange.ranges[selectedRangeIdx],
|
() => chunkedTimeRange[selectedRangeIdx],
|
||||||
[selectedRangeIdx, timeRange],
|
[selectedRangeIdx, chunkedTimeRange],
|
||||||
);
|
);
|
||||||
|
|
||||||
// export
|
// export
|
||||||
@ -108,10 +113,10 @@ export function RecordingView({
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (selectedRangeIdx < timeRange.ranges.length - 1) {
|
if (selectedRangeIdx < chunkedTimeRange.length - 1) {
|
||||||
setSelectedRangeIdx(selectedRangeIdx + 1);
|
setSelectedRangeIdx(selectedRangeIdx + 1);
|
||||||
}
|
}
|
||||||
}, [selectedRangeIdx, timeRange]);
|
}, [selectedRangeIdx, chunkedTimeRange]);
|
||||||
|
|
||||||
// scrubbing and timeline state
|
// scrubbing and timeline state
|
||||||
|
|
||||||
@ -121,7 +126,7 @@ export function RecordingView({
|
|||||||
|
|
||||||
const updateSelectedSegment = useCallback(
|
const updateSelectedSegment = useCallback(
|
||||||
(currentTime: number, updateStartTime: boolean) => {
|
(currentTime: number, updateStartTime: boolean) => {
|
||||||
const index = timeRange.ranges.findIndex(
|
const index = chunkedTimeRange.findIndex(
|
||||||
(seg) => seg.after <= currentTime && seg.before >= currentTime,
|
(seg) => seg.after <= currentTime && seg.before >= currentTime,
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -133,7 +138,7 @@ export function RecordingView({
|
|||||||
setSelectedRangeIdx(index);
|
setSelectedRangeIdx(index);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
[timeRange],
|
[chunkedTimeRange],
|
||||||
);
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@ -251,7 +256,7 @@ export function RecordingView({
|
|||||||
<ExportDialog
|
<ExportDialog
|
||||||
camera={mainCamera}
|
camera={mainCamera}
|
||||||
currentTime={currentTime}
|
currentTime={currentTime}
|
||||||
latestTime={timeRange.end}
|
latestTime={timeRange.before}
|
||||||
mode={exportMode}
|
mode={exportMode}
|
||||||
range={exportRange}
|
range={exportRange}
|
||||||
setRange={setExportRange}
|
setRange={setExportRange}
|
||||||
@ -303,7 +308,7 @@ export function RecordingView({
|
|||||||
camera={mainCamera}
|
camera={mainCamera}
|
||||||
filter={filter}
|
filter={filter}
|
||||||
currentTime={currentTime}
|
currentTime={currentTime}
|
||||||
latestTime={timeRange.end}
|
latestTime={timeRange.before}
|
||||||
mode={exportMode}
|
mode={exportMode}
|
||||||
range={exportRange}
|
range={exportRange}
|
||||||
onUpdateFilter={updateFilter}
|
onUpdateFilter={updateFilter}
|
||||||
@ -406,7 +411,7 @@ type TimelineProps = {
|
|||||||
contentRef: MutableRefObject<HTMLDivElement | null>;
|
contentRef: MutableRefObject<HTMLDivElement | null>;
|
||||||
mainCamera: string;
|
mainCamera: string;
|
||||||
timelineType: TimelineType;
|
timelineType: TimelineType;
|
||||||
timeRange: { start: number; end: number };
|
timeRange: TimeRange;
|
||||||
mainCameraReviewItems: ReviewSegment[];
|
mainCameraReviewItems: ReviewSegment[];
|
||||||
currentTime: number;
|
currentTime: number;
|
||||||
exportRange?: TimeRange;
|
exportRange?: TimeRange;
|
||||||
@ -429,8 +434,8 @@ function Timeline({
|
|||||||
const { data: motionData } = useSWR<MotionData[]>([
|
const { data: motionData } = useSWR<MotionData[]>([
|
||||||
"review/activity/motion",
|
"review/activity/motion",
|
||||||
{
|
{
|
||||||
before: timeRange.end,
|
before: timeRange.before,
|
||||||
after: timeRange.start,
|
after: timeRange.after,
|
||||||
scale: SEGMENT_DURATION / 2,
|
scale: SEGMENT_DURATION / 2,
|
||||||
cameras: mainCamera,
|
cameras: mainCamera,
|
||||||
},
|
},
|
||||||
@ -465,8 +470,8 @@ function Timeline({
|
|||||||
<MotionReviewTimeline
|
<MotionReviewTimeline
|
||||||
segmentDuration={30}
|
segmentDuration={30}
|
||||||
timestampSpread={15}
|
timestampSpread={15}
|
||||||
timelineStart={timeRange.end}
|
timelineStart={timeRange.before}
|
||||||
timelineEnd={timeRange.start}
|
timelineEnd={timeRange.after}
|
||||||
showHandlebar={exportRange == undefined}
|
showHandlebar={exportRange == undefined}
|
||||||
showExportHandles={exportRange != undefined}
|
showExportHandles={exportRange != undefined}
|
||||||
exportStartTime={exportRange?.after}
|
exportStartTime={exportRange?.after}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user