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_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",
json.dumps(
{
"type": "new",
"before": {},
"after": json.dumps({k.name: v for k, v in new_data.items()}),
},
"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",
json.dumps(
{
"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()}),
},
"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",
json.dumps(
{
"type": "update",
"before": json.dumps({k.name: v for k, v in final_data.items()}),
"after": {},
},
"before": end_data,
"after": end_data,
}
),
)
self.active_review_segments[segment.camera] = None

View File

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

View File

@ -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]);