Handle specific cases

This commit is contained in:
Nicolas Mowen 2024-04-22 14:53:25 -06:00
parent 4bcf7bd666
commit 2d9da0bfc7
3 changed files with 39 additions and 18 deletions

View File

@ -153,13 +153,16 @@ class ReviewSegmentMaintainer(threading.Thread):
"""New segment.""" """New segment."""
new_data = segment.get_data(ended=False) new_data = segment.get_data(ended=False)
self.requestor.send_data(UPSERT_REVIEW_SEGMENT, new_data) self.requestor.send_data(UPSERT_REVIEW_SEGMENT, new_data)
start_data = {k.name: v for k, v in new_data.items()}
self.requestor.send_data( self.requestor.send_data(
"reviews", "reviews",
json.dumps(
{ {
"type": "new", "type": "new",
"before": {}, "before": start_data,
"after": json.dumps({k.name: v for k, v in new_data.items()}), "after": start_data,
}, }
),
) )
def update_segment( def update_segment(
@ -176,24 +179,30 @@ class ReviewSegmentMaintainer(threading.Thread):
self.requestor.send_data(UPSERT_REVIEW_SEGMENT, new_data) self.requestor.send_data(UPSERT_REVIEW_SEGMENT, new_data)
self.requestor.send_data( self.requestor.send_data(
"reviews", "reviews",
json.dumps(
{ {
"type": "update", "type": "update",
"before": json.dumps({k.name: v for k, v in prev_data.items()}), "before": {k.name: v for k, v in prev_data.items()},
"after": json.dumps({k.name: v for k, v in new_data.items()}), "after": {k.name: v for k, v in new_data.items()},
}, }
),
) )
def end_segment(self, segment: PendingReviewSegment) -> None: def end_segment(self, segment: PendingReviewSegment) -> None:
"""End segment.""" """End segment."""
logger.error(f"ending review segment {segment.camera}")
final_data = segment.get_data(ended=True) final_data = segment.get_data(ended=True)
self.requestor.send_data(UPSERT_REVIEW_SEGMENT, final_data) self.requestor.send_data(UPSERT_REVIEW_SEGMENT, final_data)
end_data = {k.name: v for k, v in final_data.items()}
self.requestor.send_data( self.requestor.send_data(
"reviews", "reviews",
json.dumps(
{ {
"type": "update", "type": "update",
"before": json.dumps({k.name: v for k, v in final_data.items()}), "before": end_data,
"after": {}, "after": end_data,
}, }
),
) )
self.active_review_segments[segment.camera] = None self.active_review_segments[segment.camera] = None

View File

@ -31,7 +31,8 @@ type FrigateObjectState = {
export interface FrigateReview { export interface FrigateReview {
type: "new" | "update" | "end"; type: "new" | "update" | "end";
review: ReviewSegment; before: ReviewSegment;
after: ReviewSegment;
} }
export interface FrigateEvent { export interface FrigateEvent {

View File

@ -47,8 +47,19 @@ export default function LiveDashboardView({
} }
// if event is ended and was saved, update events list // if event is ended and was saved, update events list
if (eventUpdate.review.severity == "alert") { if (eventUpdate.after.severity == "alert") {
setTimeout(() => updateEvents(), eventUpdate.type == "end" ? 1000 : 6000); if (eventUpdate.type == "end" || eventUpdate.type == "new") {
setTimeout(
() => updateEvents(),
eventUpdate.type == "end" ? 1000 : 6000,
);
} else if (
eventUpdate.before.data.objects.length <
eventUpdate.after.data.objects.length
) {
setTimeout(() => updateEvents(), 5000);
}
return; return;
} }
}, [eventUpdate, updateEvents]); }, [eventUpdate, updateEvents]);