mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-02-18 17:14:26 +03:00
don't use hook
This commit is contained in:
parent
8eff16b197
commit
07702b2b62
@ -1,4 +1,4 @@
|
|||||||
import { useState, useCallback, useEffect } from "react";
|
import { useState, useCallback, useEffect, useMemo } from "react";
|
||||||
import { IoIosWarning } from "react-icons/io";
|
import { IoIosWarning } from "react-icons/io";
|
||||||
import { Button } from "@/components/ui/button";
|
import { Button } from "@/components/ui/button";
|
||||||
import {
|
import {
|
||||||
@ -28,9 +28,9 @@ import {
|
|||||||
} from "@/types/frigateConfig";
|
} from "@/types/frigateConfig";
|
||||||
import ActivityIndicator from "../indicators/activity-indicator";
|
import ActivityIndicator from "../indicators/activity-indicator";
|
||||||
import useSWR from "swr";
|
import useSWR from "swr";
|
||||||
import useCameraLiveMode from "@/hooks/use-camera-live-mode";
|
|
||||||
import { LuCheck, LuExternalLink, LuInfo, LuX } from "react-icons/lu";
|
import { LuCheck, LuExternalLink, LuInfo, LuX } from "react-icons/lu";
|
||||||
import { Link } from "react-router-dom";
|
import { Link } from "react-router-dom";
|
||||||
|
import { LiveStreamMetadata } from "@/types/live";
|
||||||
|
|
||||||
type CameraStreamingDialogProps = {
|
type CameraStreamingDialogProps = {
|
||||||
camera: string;
|
camera: string;
|
||||||
@ -51,11 +51,6 @@ export function CameraStreamingDialog({
|
|||||||
}: CameraStreamingDialogProps) {
|
}: CameraStreamingDialogProps) {
|
||||||
const { data: config } = useSWR<FrigateConfig>("config");
|
const { data: config } = useSWR<FrigateConfig>("config");
|
||||||
|
|
||||||
const { supportsAudioOutputStates } = useCameraLiveMode(
|
|
||||||
config?.cameras[camera] ? [config.cameras[camera]] : [],
|
|
||||||
false,
|
|
||||||
);
|
|
||||||
|
|
||||||
const [isLoading, setIsLoading] = useState(false);
|
const [isLoading, setIsLoading] = useState(false);
|
||||||
|
|
||||||
const [streamName, setStreamName] = useState(
|
const [streamName, setStreamName] = useState(
|
||||||
@ -64,6 +59,39 @@ export function CameraStreamingDialog({
|
|||||||
const [streamType, setStreamType] = useState<StreamType>("smart");
|
const [streamType, setStreamType] = useState<StreamType>("smart");
|
||||||
const [compatibilityMode, setCompatibilityMode] = useState(false);
|
const [compatibilityMode, setCompatibilityMode] = useState(false);
|
||||||
|
|
||||||
|
// metadata
|
||||||
|
|
||||||
|
const isRestreamed = useMemo(
|
||||||
|
() =>
|
||||||
|
config &&
|
||||||
|
Object.keys(config.go2rtc.streams || {}).includes(streamName ?? ""),
|
||||||
|
[config, streamName],
|
||||||
|
);
|
||||||
|
|
||||||
|
const { data: cameraMetadata } = useSWR<LiveStreamMetadata>(
|
||||||
|
isRestreamed ? `go2rtc/streams/${streamName}` : null,
|
||||||
|
{
|
||||||
|
revalidateOnFocus: false,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
const supportsAudioOutput = useMemo(() => {
|
||||||
|
if (!cameraMetadata) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
cameraMetadata.producers.find(
|
||||||
|
(prod) =>
|
||||||
|
prod.medias &&
|
||||||
|
prod.medias.find((media) => media.includes("audio, recvonly")) !=
|
||||||
|
undefined,
|
||||||
|
) != undefined
|
||||||
|
);
|
||||||
|
}, [cameraMetadata]);
|
||||||
|
|
||||||
|
// handlers
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!config) {
|
if (!config) {
|
||||||
return;
|
return;
|
||||||
@ -167,8 +195,7 @@ export function CameraStreamingDialog({
|
|||||||
)}
|
)}
|
||||||
</SelectContent>
|
</SelectContent>
|
||||||
<div className="flex flex-row items-center gap-1 text-sm text-muted-foreground">
|
<div className="flex flex-row items-center gap-1 text-sm text-muted-foreground">
|
||||||
{supportsAudioOutputStates[streamName] &&
|
{supportsAudioOutput ? (
|
||||||
supportsAudioOutputStates[streamName].supportsAudio ? (
|
|
||||||
<>
|
<>
|
||||||
<LuCheck className="size-4 text-success" />
|
<LuCheck className="size-4 text-success" />
|
||||||
<div>Audio is available for this stream</div>
|
<div>Audio is available for this stream</div>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user