feat: add set gain
This commit is contained in:
103
src/App.tsx
103
src/App.tsx
@ -1,103 +0,0 @@
|
||||
import { invoke } from "@tauri-apps/api/core";
|
||||
|
||||
import { useState } from "react";
|
||||
import "./App.css";
|
||||
import { DSP, DSPStatus } from "./types";
|
||||
import TopBar from "./components/TopBar";
|
||||
import DSPPanel from "./components/Dsppanel";
|
||||
import AddDSPForm from "./components/Adddspform";
|
||||
|
||||
function App() {
|
||||
const [dsps, setDsps] = useState<DSP[]>([]);
|
||||
const [selected, setSelected] = useState<string | null>(null);
|
||||
const [showAdd, setShowAdd] = useState(false);
|
||||
|
||||
async function addDSP(dsp: Omit<DSP, "status">) {
|
||||
try {
|
||||
const count = await invoke<number>("create_dsp408", {
|
||||
ip: dsp.ip,
|
||||
port: dsp.port,
|
||||
deviceId: Number(dsp.deviceId),
|
||||
});
|
||||
|
||||
console.log("DSP count:", count);
|
||||
|
||||
const newDsp: DSP = {
|
||||
...dsp,
|
||||
status: "disconnected",
|
||||
};
|
||||
|
||||
setDsps(prev => [...prev, newDsp]);
|
||||
setSelected(newDsp.id);
|
||||
setShowAdd(false);
|
||||
} catch (err) {
|
||||
console.error("Failed to create DSP:", err);
|
||||
// TODO: Show an error dialog/toast
|
||||
}
|
||||
}
|
||||
|
||||
function removeDSP(id: string) {
|
||||
setDsps(prev => {
|
||||
const next = prev.filter(d => d.id !== id);
|
||||
if (selected === id) {
|
||||
setSelected(next.length ? next[0].id : null);
|
||||
}
|
||||
return next;
|
||||
});
|
||||
}
|
||||
|
||||
function setStatus(id: string, status: DSPStatus) {
|
||||
setDsps(prev => prev.map(d => (d.id === id ? { ...d, status } : d)));
|
||||
}
|
||||
|
||||
function connect(dsp: DSP) {
|
||||
setStatus(dsp.id, "connecting");
|
||||
window.setTimeout(() => {
|
||||
setStatus(dsp.id, "connected");
|
||||
}, 900);
|
||||
}
|
||||
|
||||
function disconnect(dsp: DSP) {
|
||||
setStatus(dsp.id, "disconnected");
|
||||
}
|
||||
|
||||
const activeDsp = dsps.find(d => d.id === selected) ?? null;
|
||||
|
||||
return (
|
||||
<div className="app">
|
||||
<TopBar
|
||||
dsps={dsps}
|
||||
selected={selected}
|
||||
showAdd={showAdd}
|
||||
onSelect={id => {
|
||||
setSelected(id);
|
||||
setShowAdd(false);
|
||||
}}
|
||||
onRemove={removeDSP}
|
||||
onAddClick={() => setShowAdd(true)}
|
||||
/>
|
||||
|
||||
<main className="stage">
|
||||
{showAdd ? (
|
||||
<AddDSPForm onCancel={() => setShowAdd(false)} onAdd={addDSP} />
|
||||
) : activeDsp ? (
|
||||
<DSPPanel
|
||||
dsp={activeDsp}
|
||||
onConnect={() => connect(activeDsp)}
|
||||
onDisconnect={() => disconnect(activeDsp)}
|
||||
/>
|
||||
) : (
|
||||
<div className="empty">
|
||||
<div className="empty-mark">◇</div>
|
||||
<p>No output selected.</p>
|
||||
<button className="btn btn-primary" onClick={() => setShowAdd(true)}>
|
||||
Add a DSP
|
||||
</button>
|
||||
</div>
|
||||
)}
|
||||
</main>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default App;
|
||||
Reference in New Issue
Block a user