feat: add set gain

This commit is contained in:
2026-07-22 18:17:36 +02:00
parent c2b67d8bb2
commit 9e3f3803a6
41 changed files with 3863 additions and 869 deletions

View File

@ -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;