diff --git a/frigate/review/maintainer.py b/frigate/review/maintainer.py index f459b2f35..8d8134a93 100644 --- a/frigate/review/maintainer.py +++ b/frigate/review/maintainer.py @@ -1,5 +1,6 @@ """Maintain review segments in db.""" +import json import logging import os import random @@ -138,7 +139,12 @@ class ReviewSegmentMaintainer(threading.Thread): def end_segment(self, segment: PendingReviewSegment) -> None: """End segment.""" - self.requestor.send_data(UPSERT_REVIEW_SEGMENT, segment.end()) + seg_data = segment.end() + self.requestor.send_data(UPSERT_REVIEW_SEGMENT, seg_data) + self.requestor.send_data( + "reviews", + json.dumps({"type": "end", "review": {k.name: v for k, v in seg_data.items()}}), + ) self.active_review_segments[segment.camera] = None def update_existing_segment( diff --git a/web/src/api/ws.tsx b/web/src/api/ws.tsx index a21ba4857..88091a915 100644 --- a/web/src/api/ws.tsx +++ b/web/src/api/ws.tsx @@ -10,7 +10,7 @@ import { import { produce, Draft } from "immer"; import useWebSocket, { ReadyState } from "react-use-websocket"; import { FrigateConfig } from "@/types/frigateConfig"; -import { FrigateEvent, ToggleableSetting } from "@/types/ws"; +import { FrigateEvent, FrigateReview, ToggleableSetting } from "@/types/ws"; import { FrigateStats } from "@/types/stats"; type ReducerState = { @@ -218,7 +218,14 @@ export function useRestart(): { export function useFrigateEvents(): { payload: FrigateEvent } { const { value: { payload }, - } = useWs(`events`, ""); + } = useWs("events", ""); + return { payload }; +} + +export function useFrigateReviews(): { payload: FrigateReview } { + const { + value: { payload }, + } = useWs("reviews", ""); return { payload }; } diff --git a/web/src/types/ws.ts b/web/src/types/ws.ts index fb041b0c2..a8e454c93 100644 --- a/web/src/types/ws.ts +++ b/web/src/types/ws.ts @@ -1,3 +1,5 @@ +import { ReviewSegment } from "./review"; + type FrigateObjectState = { id: string; camera: string; @@ -27,6 +29,11 @@ type FrigateObjectState = { }; }; +export interface FrigateReview { + type: "new" | "update" | "end"; + review: ReviewSegment; +} + export interface FrigateEvent { type: "new" | "update" | "end"; before: FrigateObjectState;