mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-05-03 06:50:58 +00:00
Compare commits
No commits in common. "6260313e5113a2bb5abb6dca479f11cf6d4b4623" and "4a5f7bd6a3a98f40fe4b4461e7891e20643fdcce" have entirely different histories.
6260313e51
...
4a5f7bd6a3
@ -334,9 +334,6 @@ class WebPushClient(Communicator):
|
|||||||
return
|
return
|
||||||
|
|
||||||
camera: str = payload["after"]["camera"]
|
camera: str = payload["after"]["camera"]
|
||||||
camera_name: str = getattr(
|
|
||||||
self.config.cameras[camera], "nickname", None
|
|
||||||
) or titlecase(camera.replace("_", " "))
|
|
||||||
current_time = datetime.datetime.now().timestamp()
|
current_time = datetime.datetime.now().timestamp()
|
||||||
|
|
||||||
if self._within_cooldown(camera):
|
if self._within_cooldown(camera):
|
||||||
@ -378,7 +375,7 @@ class WebPushClient(Communicator):
|
|||||||
if state == "genai" and payload["after"]["data"]["metadata"]:
|
if state == "genai" and payload["after"]["data"]["metadata"]:
|
||||||
message = payload["after"]["data"]["metadata"]["scene"]
|
message = payload["after"]["data"]["metadata"]["scene"]
|
||||||
else:
|
else:
|
||||||
message = f"Detected on {camera_name}"
|
message = f"Detected on {titlecase(camera.replace('_', ' '))}"
|
||||||
|
|
||||||
if ended:
|
if ended:
|
||||||
logger.debug(
|
logger.debug(
|
||||||
@ -409,9 +406,6 @@ class WebPushClient(Communicator):
|
|||||||
return
|
return
|
||||||
|
|
||||||
camera: str = payload["camera"]
|
camera: str = payload["camera"]
|
||||||
camera_name: str = getattr(
|
|
||||||
self.config.cameras[camera], "nickname", None
|
|
||||||
) or titlecase(camera.replace("_", " "))
|
|
||||||
current_time = datetime.datetime.now().timestamp()
|
current_time = datetime.datetime.now().timestamp()
|
||||||
|
|
||||||
if self._within_cooldown(camera):
|
if self._within_cooldown(camera):
|
||||||
@ -427,16 +421,14 @@ class WebPushClient(Communicator):
|
|||||||
name = payload["name"]
|
name = payload["name"]
|
||||||
score = payload["score"]
|
score = payload["score"]
|
||||||
|
|
||||||
title = f"{name.replace('_', ' ')} triggered on {camera_name}"
|
title = f"{name.replace('_', ' ')} triggered on {titlecase(camera.replace('_', ' '))}"
|
||||||
message = f"{titlecase(trigger_type)} trigger fired for {camera_name} with score {score:.2f}"
|
message = f"{titlecase(trigger_type)} trigger fired for {titlecase(camera.replace('_', ' '))} with score {score:.2f}"
|
||||||
image = f"clips/triggers/{camera}/{event_id}.webp"
|
image = f"clips/triggers/{camera}/{event_id}.webp"
|
||||||
|
|
||||||
direct_url = f"/explore?event_id={event_id}"
|
direct_url = f"/explore?event_id={event_id}"
|
||||||
ttl = 0
|
ttl = 0
|
||||||
|
|
||||||
logger.debug(
|
logger.debug(f"Sending push notification for {camera}, trigger name {name}")
|
||||||
f"Sending push notification for {camera_name}, trigger name {name}"
|
|
||||||
)
|
|
||||||
|
|
||||||
for user in self.web_pushers:
|
for user in self.web_pushers:
|
||||||
self.send_push_notification(
|
self.send_push_notification(
|
||||||
|
|||||||
@ -4,7 +4,6 @@ import { Button } from "../ui/button";
|
|||||||
import { FaVideo } from "react-icons/fa";
|
import { FaVideo } from "react-icons/fa";
|
||||||
import { isMobile } from "react-device-detect";
|
import { isMobile } from "react-device-detect";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import { CameraNameLabel } from "../camera/CameraNameLabel";
|
|
||||||
|
|
||||||
type MobileCameraDrawerProps = {
|
type MobileCameraDrawerProps = {
|
||||||
allCameras: string[];
|
allCameras: string[];
|
||||||
@ -45,7 +44,7 @@ export default function MobileCameraDrawer({
|
|||||||
setCameraDrawer(false);
|
setCameraDrawer(false);
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<CameraNameLabel camera={cam} />
|
{cam.replaceAll("_", " ")}
|
||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -21,7 +21,6 @@ import {
|
|||||||
usePreviewForTimeRange,
|
usePreviewForTimeRange,
|
||||||
} from "@/hooks/use-camera-previews";
|
} from "@/hooks/use-camera-previews";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import { useCameraNickname } from "@/hooks/use-camera-nickname";
|
|
||||||
|
|
||||||
type PreviewPlayerProps = {
|
type PreviewPlayerProps = {
|
||||||
previewRef?: (ref: HTMLDivElement | null) => void;
|
previewRef?: (ref: HTMLDivElement | null) => void;
|
||||||
@ -149,7 +148,6 @@ function PreviewVideoPlayer({
|
|||||||
const { t } = useTranslation(["components/player"]);
|
const { t } = useTranslation(["components/player"]);
|
||||||
const { data: config } = useSWR<FrigateConfig>("config");
|
const { data: config } = useSWR<FrigateConfig>("config");
|
||||||
|
|
||||||
const cameraName = useCameraNickname(camera);
|
|
||||||
// controlling playback
|
// controlling playback
|
||||||
|
|
||||||
const previewRef = useRef<HTMLVideoElement | null>(null);
|
const previewRef = useRef<HTMLVideoElement | null>(null);
|
||||||
@ -344,7 +342,7 @@ function PreviewVideoPlayer({
|
|||||||
)}
|
)}
|
||||||
{cameraPreviews && !currentPreview && (
|
{cameraPreviews && !currentPreview && (
|
||||||
<div className="absolute inset-0 flex items-center justify-center rounded-lg bg-background_alt text-primary dark:bg-black md:rounded-2xl">
|
<div className="absolute inset-0 flex items-center justify-center rounded-lg bg-background_alt text-primary dark:bg-black md:rounded-2xl">
|
||||||
{t("noPreviewFoundFor", { camera: cameraName })}
|
{t("noPreviewFoundFor", { camera: camera.replaceAll("_", " ") })}
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
{firstLoad && <Skeleton className="absolute aspect-video size-full" />}
|
{firstLoad && <Skeleton className="absolute aspect-video size-full" />}
|
||||||
@ -466,7 +464,6 @@ function PreviewFramesPlayer({
|
|||||||
}: PreviewFramesPlayerProps) {
|
}: PreviewFramesPlayerProps) {
|
||||||
const { t } = useTranslation(["components/player"]);
|
const { t } = useTranslation(["components/player"]);
|
||||||
|
|
||||||
const cameraName = useCameraNickname(camera);
|
|
||||||
// frames data
|
// frames data
|
||||||
|
|
||||||
const { data: previewFrames } = useSWR<string[]>(
|
const { data: previewFrames } = useSWR<string[]>(
|
||||||
@ -567,7 +564,7 @@ function PreviewFramesPlayer({
|
|||||||
/>
|
/>
|
||||||
{previewFrames?.length === 0 && (
|
{previewFrames?.length === 0 && (
|
||||||
<div className="-y-translate-1/2 align-center absolute inset-x-0 top-1/2 rounded-lg bg-background_alt text-center text-primary dark:bg-black md:rounded-2xl">
|
<div className="-y-translate-1/2 align-center absolute inset-x-0 top-1/2 rounded-lg bg-background_alt text-center text-primary dark:bg-black md:rounded-2xl">
|
||||||
{t("noPreviewFoundFor", { cameraName: cameraName })}
|
{t("noPreviewFoundFor", { cameraName: camera.replaceAll("_", " ") })}
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
{firstLoad && <Skeleton className="absolute aspect-video size-full" />}
|
{firstLoad && <Skeleton className="absolute aspect-video size-full" />}
|
||||||
|
|||||||
@ -64,7 +64,6 @@ import {
|
|||||||
TooltipContent,
|
TooltipContent,
|
||||||
TooltipTrigger,
|
TooltipTrigger,
|
||||||
} from "@/components/ui/tooltip";
|
} from "@/components/ui/tooltip";
|
||||||
import { CameraNameLabel } from "@/components/camera/CameraNameLabel";
|
|
||||||
|
|
||||||
type RecordingViewProps = {
|
type RecordingViewProps = {
|
||||||
startCamera: string;
|
startCamera: string;
|
||||||
@ -720,7 +719,7 @@ export function RecordingView({
|
|||||||
</div>
|
</div>
|
||||||
</TooltipTrigger>
|
</TooltipTrigger>
|
||||||
<TooltipContent className="smart-capitalize">
|
<TooltipContent className="smart-capitalize">
|
||||||
<CameraNameLabel camera={cam} />
|
{cam.replaceAll("_", " ")}
|
||||||
</TooltipContent>
|
</TooltipContent>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
);
|
);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user