mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-02-02 17:25:22 +03:00
Separate insert and update to make sure updated values are retained when event ends
This commit is contained in:
parent
6658b2c624
commit
701da572d0
@ -14,6 +14,11 @@ from frigate.models import Event
|
|||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
def should_insert_db(prev_event, current_event):
|
||||||
|
return (
|
||||||
|
(not prev_event["has_clip"] and not prev_event["has_snapshot"])
|
||||||
|
and (current_event["has_clip"] or current_event["has_snapshot"])
|
||||||
|
)
|
||||||
|
|
||||||
def should_update_db(prev_event, current_event):
|
def should_update_db(prev_event, current_event):
|
||||||
return (
|
return (
|
||||||
@ -58,7 +63,7 @@ class EventProcessor(threading.Thread):
|
|||||||
if event_type == "start":
|
if event_type == "start":
|
||||||
self.events_in_process[event_data["id"]] = event_data
|
self.events_in_process[event_data["id"]] = event_data
|
||||||
|
|
||||||
elif event_type == "update" and should_update_db(
|
elif event_type == "update" and should_insert_db(
|
||||||
self.events_in_process[event_data["id"]], event_data
|
self.events_in_process[event_data["id"]], event_data
|
||||||
):
|
):
|
||||||
self.events_in_process[event_data["id"]] = event_data
|
self.events_in_process[event_data["id"]] = event_data
|
||||||
@ -81,10 +86,31 @@ class EventProcessor(threading.Thread):
|
|||||||
has_snapshot=event_data["has_snapshot"],
|
has_snapshot=event_data["has_snapshot"],
|
||||||
).execute()
|
).execute()
|
||||||
|
|
||||||
|
elif event_type == "update" and should_update_db(
|
||||||
|
self.events_in_process[event_data["id"]], event_data
|
||||||
|
):
|
||||||
|
self.events_in_process[event_data["id"]] = event_data
|
||||||
|
# TODO: this will generate a lot of db activity possibly
|
||||||
|
if event_data["has_clip"] or event_data["has_snapshot"]:
|
||||||
|
Event.update(
|
||||||
|
label=event_data["label"],
|
||||||
|
camera=camera,
|
||||||
|
start_time=event_data["start_time"] - event_config.pre_capture,
|
||||||
|
end_time=None,
|
||||||
|
top_score=event_data["top_score"],
|
||||||
|
false_positive=event_data["false_positive"],
|
||||||
|
zones=list(event_data["entered_zones"]),
|
||||||
|
thumbnail=event_data["thumbnail"],
|
||||||
|
region=event_data["region"],
|
||||||
|
box=event_data["box"],
|
||||||
|
area=event_data["area"],
|
||||||
|
has_clip=event_data["has_clip"],
|
||||||
|
has_snapshot=event_data["has_snapshot"],
|
||||||
|
).where(Event.id == event_data["id"]).execute()
|
||||||
|
|
||||||
elif event_type == "end":
|
elif event_type == "end":
|
||||||
if event_data["has_clip"] or event_data["has_snapshot"]:
|
if event_data["has_clip"] or event_data["has_snapshot"]:
|
||||||
Event.replace(
|
Event.update(
|
||||||
id=event_data["id"],
|
|
||||||
label=event_data["label"],
|
label=event_data["label"],
|
||||||
camera=camera,
|
camera=camera,
|
||||||
start_time=event_data["start_time"] - event_config.pre_capture,
|
start_time=event_data["start_time"] - event_config.pre_capture,
|
||||||
@ -98,7 +124,7 @@ class EventProcessor(threading.Thread):
|
|||||||
area=event_data["area"],
|
area=event_data["area"],
|
||||||
has_clip=event_data["has_clip"],
|
has_clip=event_data["has_clip"],
|
||||||
has_snapshot=event_data["has_snapshot"],
|
has_snapshot=event_data["has_snapshot"],
|
||||||
).execute()
|
).where(Event.id == event_data["id"]).execute()
|
||||||
|
|
||||||
del self.events_in_process[event_data["id"]]
|
del self.events_in_process[event_data["id"]]
|
||||||
self.event_processed_queue.put((event_data["id"], camera))
|
self.event_processed_queue.put((event_data["id"], camera))
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user