mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-02-07 03:35:26 +03:00
Save timeline entries for api events
This commit is contained in:
parent
734a488db3
commit
f226fcb04c
@ -52,7 +52,7 @@ class ExternalEventProcessor:
|
||||
(
|
||||
EventTypeEnum.api,
|
||||
"new",
|
||||
camera_config,
|
||||
camera,
|
||||
{
|
||||
"id": event_id,
|
||||
"label": label,
|
||||
|
||||
@ -109,6 +109,16 @@ class EventProcessor(threading.Thread):
|
||||
|
||||
self.handle_object_detection(event_type, camera, event_data)
|
||||
elif source_type == EventTypeEnum.api:
|
||||
self.timeline_queue.put(
|
||||
(
|
||||
camera,
|
||||
source_type,
|
||||
event_type,
|
||||
{},
|
||||
event_data,
|
||||
)
|
||||
)
|
||||
|
||||
self.handle_external_detection(event_type, event_data)
|
||||
|
||||
# set an end_time on events without an end_time before exiting
|
||||
|
||||
@ -48,6 +48,8 @@ class TimelineProcessor(threading.Thread):
|
||||
self.handle_object_detection(
|
||||
camera, event_type, prev_event_data, event_data
|
||||
)
|
||||
elif input_type == EventTypeEnum.api:
|
||||
self.handle_api_entry(camera, event_type, event_data)
|
||||
|
||||
def insert_or_save(
|
||||
self,
|
||||
@ -140,3 +142,40 @@ class TimelineProcessor(threading.Thread):
|
||||
|
||||
if save:
|
||||
self.insert_or_save(timeline_entry, prev_event_data, event_data)
|
||||
|
||||
def handle_api_entry(
|
||||
self,
|
||||
camera: str,
|
||||
event_type: str,
|
||||
event_data: dict[any, any],
|
||||
) -> bool:
|
||||
if event_type != "new":
|
||||
return False
|
||||
|
||||
if event_data.get("type", "api") == "audio":
|
||||
timeline_entry = {
|
||||
Timeline.class_type: "heard",
|
||||
Timeline.timestamp: event_data["start_time"],
|
||||
Timeline.camera: camera,
|
||||
Timeline.source: "audio",
|
||||
Timeline.source_id: event_data["id"],
|
||||
Timeline.data: {
|
||||
"label": event_data["label"],
|
||||
"sub_label": event_data.get("sub_label"),
|
||||
},
|
||||
}
|
||||
else:
|
||||
timeline_entry = {
|
||||
Timeline.class_type: "external",
|
||||
Timeline.timestamp: event_data["start_time"],
|
||||
Timeline.camera: camera,
|
||||
Timeline.source: "api",
|
||||
Timeline.source_id: event_data["id"],
|
||||
Timeline.data: {
|
||||
"label": event_data["label"],
|
||||
"sub_label": event_data.get("sub_label"),
|
||||
},
|
||||
}
|
||||
|
||||
Timeline.insert(timeline_entry).execute()
|
||||
return True
|
||||
|
||||
@ -271,7 +271,7 @@ function History() {
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
{lastRow && <ActivityIndicator />}
|
||||
{lastRow && !isDone && <ActivityIndicator />}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
@ -27,7 +27,16 @@ type Timeline = {
|
||||
data: {
|
||||
[key: string]: any;
|
||||
};
|
||||
class_type: string;
|
||||
class_type:
|
||||
| "visible"
|
||||
| "gone"
|
||||
| "sub_label"
|
||||
| "entered_zone"
|
||||
| "attribute"
|
||||
| "active"
|
||||
| "stationary"
|
||||
| "heard"
|
||||
| "external";
|
||||
source_id: string;
|
||||
source: string;
|
||||
};
|
||||
|
||||
@ -1,4 +1,11 @@
|
||||
import { LuCircle, LuPlay, LuPlayCircle, LuTruck } from "react-icons/lu";
|
||||
import {
|
||||
LuCircle,
|
||||
LuCircleDot,
|
||||
LuEar,
|
||||
LuPlay,
|
||||
LuPlayCircle,
|
||||
LuTruck,
|
||||
} from "react-icons/lu";
|
||||
import { IoMdExit } from "react-icons/io";
|
||||
import {
|
||||
MdFaceUnlock,
|
||||
@ -33,7 +40,13 @@ export function getTimelineIcon(timelineItem: Timeline) {
|
||||
return <MdFaceUnlock className="w-4 mr-1" />;
|
||||
case "car":
|
||||
return <MdOutlinePictureInPictureAlt className="w-4 mr-1" />;
|
||||
default:
|
||||
return <LuCircleDot className="w-4 mr-1" />;
|
||||
}
|
||||
case "heard":
|
||||
return <LuEar className="w-4 mr-1" />;
|
||||
case "external":
|
||||
return <LuCircleDot className="w-4 mr-1" />;
|
||||
}
|
||||
}
|
||||
|
||||
@ -76,5 +89,9 @@ export function getTimelineItemDescription(timelineItem: Timeline) {
|
||||
return `${timelineItem.data.label} recognized as ${timelineItem.data.sub_label}`;
|
||||
case "gone":
|
||||
return `${label} left`;
|
||||
case "heard":
|
||||
return `${label} heard`;
|
||||
case "external":
|
||||
return `${label} detected`;
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user