This commit is contained in:
Josh Hawkins 2024-10-25 11:31:31 -05:00
commit c3eae3ea2b
7 changed files with 52 additions and 31 deletions

View File

@ -38,7 +38,7 @@ cd ../../
if [ ! -d /lib/firmware/hailo ]; then
sudo mkdir /lib/firmware/hailo
fi
sudo mv hailo8_fw.4.17.0.bin /lib/firmware/hailo/hailo8_fw.bin
sudo mv hailo8_fw.4.18.0.bin /lib/firmware/hailo/hailo8_fw.bin
# Install udev rules
sudo cp ./linux/pcie/51-hailo-udev.rules /etc/udev/rules.d/

View File

@ -51,7 +51,7 @@ class PendingReviewSegment:
frame_time: float,
severity: SeverityEnum,
detections: dict[str, str],
sub_labels: set[str],
sub_labels: dict[str, str],
zones: list[str],
audio: set[str],
):
@ -135,7 +135,7 @@ class PendingReviewSegment:
ReviewSegment.data.name: {
"detections": list(set(self.detections.keys())),
"objects": list(set(self.detections.values())),
"sub_labels": list(self.sub_labels),
"sub_labels": list(self.sub_labels.values()),
"zones": self.zones,
"audio": list(self.audio),
},
@ -261,7 +261,7 @@ class ReviewSegmentMaintainer(threading.Thread):
segment.detections[object["id"]] = object["sub_label"][0]
else:
segment.detections[object["id"]] = f'{object["label"]}-verified'
segment.sub_labels.add(object["sub_label"][0])
segment.sub_labels[object["id"]] = object["sub_label"][0]
# if object is alert label
# and has entered required zones or required zones is not set
@ -347,7 +347,7 @@ class ReviewSegmentMaintainer(threading.Thread):
if len(active_objects) > 0:
detections: dict[str, str] = {}
sub_labels = set()
sub_labels = dict[str, str] = {}
zones: list[str] = []
severity = None
@ -358,7 +358,7 @@ class ReviewSegmentMaintainer(threading.Thread):
detections[object["id"]] = object["sub_label"][0]
else:
detections[object["id"]] = f'{object["label"]}-verified'
sub_labels.add(object["sub_label"][0])
sub_labels[object["id"]] = object["sub_label"][0]
# if object is alert label
# and has entered required zones or required zones is not set
@ -566,7 +566,7 @@ class ReviewSegmentMaintainer(threading.Thread):
frame_time,
severity,
{},
set(),
{},
[],
detections,
)
@ -576,7 +576,7 @@ class ReviewSegmentMaintainer(threading.Thread):
frame_time,
SeverityEnum.alert,
{manual_info["event_id"]: manual_info["label"]},
set(),
{},
[],
set(),
)

View File

@ -216,7 +216,7 @@ export function CombinedStorageGraph({
</Popover>
)}
</TableCell>
<TableCell>{getUnitSize(item.usage)}</TableCell>
<TableCell>{getUnitSize(item.usage ?? 0)}</TableCell>
<TableCell>{item.data[0].toFixed(2)}%</TableCell>
<TableCell>
{item.name === "Unused"

View File

@ -25,7 +25,13 @@ export function MobilePage({
const [uncontrolledOpen, setUncontrolledOpen] = useState(false);
const open = controlledOpen ?? uncontrolledOpen;
const setOpen = onOpenChange ?? setUncontrolledOpen;
const setOpen = (value: boolean) => {
if (onOpenChange) {
onOpenChange(value);
} else {
setUncontrolledOpen(value);
}
};
return (
<MobilePageContext.Provider value={{ open, onOpenChange: setOpen }}>

View File

@ -13,7 +13,7 @@ import { getIconForLabel } from "@/utils/iconUtil";
import { useApiHost } from "@/api";
import { ReviewDetailPaneType, ReviewSegment } from "@/types/review";
import { Event } from "@/types/event";
import { useEffect, useMemo, useRef, useState } from "react";
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
import { cn } from "@/lib/utils";
import { FrigatePlusDialog } from "../dialog/FrigatePlusDialog";
import ObjectLifecycle from "./ObjectLifecycle";
@ -91,6 +91,22 @@ export default function ReviewDetailDialog({
review != undefined,
);
const handleOpenChange = useCallback(
(open: boolean) => {
setIsOpen(open);
if (!open) {
// short timeout to allow the mobile page animation
// to complete before updating the state
setTimeout(() => {
setReview(undefined);
setSelectedEvent(undefined);
setPane("overview");
}, 300);
}
},
[setReview, setIsOpen],
);
useEffect(() => {
setIsOpen(review != undefined);
// we know that these deps are correct
@ -109,16 +125,7 @@ export default function ReviewDetailDialog({
return (
<>
<Overlay
open={isOpen ?? false}
onOpenChange={(open) => {
if (!open) {
setReview(undefined);
setSelectedEvent(undefined);
setPane("overview");
}
}}
>
<Overlay open={isOpen ?? false} onOpenChange={handleOpenChange}>
<FrigatePlusDialog
upload={upload}
onClose={() => setUpload(undefined)}
@ -140,7 +147,7 @@ export default function ReviewDetailDialog({
>
<span tabIndex={0} className="sr-only" />
{pane == "overview" && (
<Header className="justify-center" onClose={() => setIsOpen(false)}>
<Header className="justify-center">
<Title>Review Item Details</Title>
<Description className="sr-only">Review item details</Description>
<div

View File

@ -109,6 +109,20 @@ export default function SearchDetailDialog({
const [isOpen, setIsOpen] = useState(search != undefined);
const handleOpenChange = useCallback(
(open: boolean) => {
setIsOpen(open);
if (!open) {
// short timeout to allow the mobile page animation
// to complete before updating the state
setTimeout(() => {
setSearch(undefined);
}, 300);
}
},
[setSearch],
);
useEffect(() => {
if (search) {
setIsOpen(search != undefined);
@ -158,14 +172,7 @@ export default function SearchDetailDialog({
const Description = isDesktop ? DialogDescription : MobilePageDescription;
return (
<Overlay
open={isOpen}
onOpenChange={() => {
if (search) {
setSearch(undefined);
}
}}
>
<Overlay open={isOpen} onOpenChange={handleOpenChange}>
<Content
className={cn(
"scrollbar-container overflow-y-auto",
@ -174,7 +181,7 @@ export default function SearchDetailDialog({
isMobile && "px-4",
)}
>
<Header onClose={() => setIsOpen(false)}>
<Header>
<Title>Tracked Object Details</Title>
<Description className="sr-only">Tracked object details</Description>
</Header>

View File

@ -190,6 +190,7 @@ export default function HlsVideoPlayer({
minScale={1.0}
wheel={{ smoothStep: 0.005 }}
onZoom={(zoom) => setZoomScale(zoom.state.scale)}
disabled={!frigateControls}
>
{frigateControls && (
<VideoControls