From 2d9da0bfc72deec0583adc6312c9a0d99bf9f977 Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Mon, 22 Apr 2024 14:53:25 -0600 Subject: [PATCH] Handle specific cases --- frigate/review/maintainer.py | 39 +++++++++++++++--------- web/src/types/ws.ts | 3 +- web/src/views/live/LiveDashboardView.tsx | 15 +++++++-- 3 files changed, 39 insertions(+), 18 deletions(-) diff --git a/frigate/review/maintainer.py b/frigate/review/maintainer.py index daeb06d9c..a007531ad 100644 --- a/frigate/review/maintainer.py +++ b/frigate/review/maintainer.py @@ -153,13 +153,16 @@ class ReviewSegmentMaintainer(threading.Thread): """New segment.""" new_data = segment.get_data(ended=False) 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( "reviews", - { - "type": "new", - "before": {}, - "after": json.dumps({k.name: v for k, v in new_data.items()}), - }, + json.dumps( + { + "type": "new", + "before": start_data, + "after": start_data, + } + ), ) def update_segment( @@ -176,24 +179,30 @@ class ReviewSegmentMaintainer(threading.Thread): self.requestor.send_data(UPSERT_REVIEW_SEGMENT, new_data) self.requestor.send_data( "reviews", - { - "type": "update", - "before": json.dumps({k.name: v for k, v in prev_data.items()}), - "after": json.dumps({k.name: v for k, v in new_data.items()}), - }, + json.dumps( + { + "type": "update", + "before": {k.name: v for k, v in prev_data.items()}, + "after": {k.name: v for k, v in new_data.items()}, + } + ), ) def end_segment(self, segment: PendingReviewSegment) -> None: """End segment.""" + logger.error(f"ending review segment {segment.camera}") final_data = segment.get_data(ended=True) 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( "reviews", - { - "type": "update", - "before": json.dumps({k.name: v for k, v in final_data.items()}), - "after": {}, - }, + json.dumps( + { + "type": "update", + "before": end_data, + "after": end_data, + } + ), ) self.active_review_segments[segment.camera] = None diff --git a/web/src/types/ws.ts b/web/src/types/ws.ts index 8e86604b3..177d3600a 100644 --- a/web/src/types/ws.ts +++ b/web/src/types/ws.ts @@ -31,7 +31,8 @@ type FrigateObjectState = { export interface FrigateReview { type: "new" | "update" | "end"; - review: ReviewSegment; + before: ReviewSegment; + after: ReviewSegment; } export interface FrigateEvent { diff --git a/web/src/views/live/LiveDashboardView.tsx b/web/src/views/live/LiveDashboardView.tsx index 7cd6bbcd6..3c186656a 100644 --- a/web/src/views/live/LiveDashboardView.tsx +++ b/web/src/views/live/LiveDashboardView.tsx @@ -47,8 +47,19 @@ export default function LiveDashboardView({ } // if event is ended and was saved, update events list - if (eventUpdate.review.severity == "alert") { - setTimeout(() => updateEvents(), eventUpdate.type == "end" ? 1000 : 6000); + if (eventUpdate.after.severity == "alert") { + 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; } }, [eventUpdate, updateEvents]);