import { useCallback, useEffect, useState } from "react"; import { LuVolume2 } from "react-icons/lu"; import { JsonRpcResponse, useJsonRpc } from "@/hooks/useJsonRpc"; import { GridCard } from "@components/Card"; import { SettingsItem } from "@components/SettingsItem"; import { Button } from "@components/Button"; import notifications from "@/notifications"; import { m } from "@localizations/messages.js"; export default function AudioPopover() { const { send } = useJsonRpc(); const [audioOutputEnabled, setAudioOutputEnabled] = useState(true); const [audioInputEnabled, setAudioInputEnabled] = useState(true); const [usbAudioEnabled, setUsbAudioEnabled] = useState(false); const [loading, setLoading] = useState(false); useEffect(() => { send("getAudioOutputEnabled", {}, (resp: JsonRpcResponse) => { if ("error" in resp) { console.error("Failed to load audio output enabled:", resp.error); } else { setAudioOutputEnabled(resp.result as boolean); } }); send("getAudioInputEnabled", {}, (resp: JsonRpcResponse) => { if ("error" in resp) { console.error("Failed to load audio input enabled:", resp.error); } else { setAudioInputEnabled(resp.result as boolean); } }); send("getUsbDevices", {}, (resp: JsonRpcResponse) => { if ("error" in resp) { console.error("Failed to load USB devices:", resp.error); } else { const usbDevices = resp.result as { audio: boolean }; setUsbAudioEnabled(usbDevices.audio || false); } }); }, [send]); const handleAudioOutputEnabledToggle = useCallback(() => { const enabled = !audioOutputEnabled; setLoading(true); send("setAudioOutputEnabled", { enabled }, (resp: JsonRpcResponse) => { setLoading(false); if ("error" in resp) { const errorMsg = enabled ? m.audio_output_failed_enable({ error: String(resp.error.data || m.unknown_error()) }) : m.audio_output_failed_disable({ error: String(resp.error.data || m.unknown_error()) }); notifications.error(errorMsg); } else { setAudioOutputEnabled(enabled); const successMsg = enabled ? m.audio_output_enabled() : m.audio_output_disabled(); notifications.success(successMsg); } }); }, [send, audioOutputEnabled]); const handleAudioInputEnabledToggle = useCallback(() => { const enabled = !audioInputEnabled; setLoading(true); send("setAudioInputEnabled", { enabled }, (resp: JsonRpcResponse) => { setLoading(false); if ("error" in resp) { const errorMsg = enabled ? m.audio_input_failed_enable({ error: String(resp.error.data || m.unknown_error()) }) : m.audio_input_failed_disable({ error: String(resp.error.data || m.unknown_error()) }); notifications.error(errorMsg); } else { setAudioInputEnabled(enabled); const successMsg = enabled ? m.audio_input_enabled() : m.audio_input_disabled(); notifications.success(successMsg); } }); }, [send, audioInputEnabled]); return (

{m.audio_popover_title()}

); }