diff --git a/web/src/app/settings/settings-form.tsx b/web/src/app/settings/settings-form.tsx index a8e6a80..b243def 100644 --- a/web/src/app/settings/settings-form.tsx +++ b/web/src/app/settings/settings-form.tsx @@ -24,6 +24,8 @@ export function SettingsForm() { const [saved, setSaved] = useState(false); const [scanResult, setScanResult] = useState(null); const [scanRequested, setScanRequested] = useState(false); + const [discoverCfg, setDiscoverCfg] = useState>({}); + const [discoverSaved, setDiscoverSaved] = useState(false); useEffect(() => { fetch("/api/scan") @@ -62,6 +64,12 @@ export function SettingsForm() { }); }, []); + useEffect(() => { + fetch("/api/discover/config") + .then((r) => r.json()) + .then((c: Record) => setDiscoverCfg(c)); + }, []); + async function submit(e: React.FormEvent) { e.preventDefault(); await fetch("/api/config", { @@ -78,6 +86,21 @@ export function SettingsForm() { setKeySet(keySet || slskdApiKey !== ""); } + function setCfg(key: string, value: string) { + setDiscoverCfg((c) => ({ ...c, [key]: value })); + } + + async function saveDiscovery(e: React.FormEvent) { + e.preventDefault(); + await fetch("/api/discover/config", { + method: "PATCH", + headers: { "content-type": "application/json" }, + body: JSON.stringify(discoverCfg), + }); + setDiscoverSaved(true); + setTimeout(() => setDiscoverSaved(false), 1500); + } + return ( <>
@@ -107,6 +130,38 @@ export function SettingsForm() { {scanResult ?

Last scan: {scanResult}

: null} + +

Discovery

+ + {[ + ["discover.intervalHours", "Interval (hours)"], + ["discover.maxSeeds", "Max seeds per sweep"], + ["discover.similarPerSeed", "Similar per seed"], + ["discover.albumsPerArtist", "Albums per artist"], + ["discover.minScore", "Min score"], + ].map(([key, label]) => ( +

+ +

+ ))} + + {discoverSaved && Saved.} +
); }