feat: Settings 'Scan library' button + last-result status
This commit is contained in:
@@ -22,6 +22,22 @@ export function SettingsForm() {
|
||||
const [tokenSet, setTokenSet] = useState(false);
|
||||
const [keySet, setKeySet] = useState(false);
|
||||
const [saved, setSaved] = useState(false);
|
||||
const [scanResult, setScanResult] = useState<string | null>(null);
|
||||
const [scanRequested, setScanRequested] = useState(false);
|
||||
|
||||
useEffect(() => {
|
||||
fetch("/api/scan")
|
||||
.then((r) => r.json())
|
||||
.then((s: { result: string | null; requested: boolean }) => {
|
||||
setScanResult(s.result);
|
||||
setScanRequested(s.requested);
|
||||
});
|
||||
}, []);
|
||||
|
||||
async function requestScan() {
|
||||
await fetch("/api/scan", { method: "POST" });
|
||||
setScanRequested(true);
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
fetch("/api/config")
|
||||
@@ -53,24 +69,34 @@ export function SettingsForm() {
|
||||
}
|
||||
|
||||
return (
|
||||
<form onSubmit={submit}>
|
||||
<fieldset>
|
||||
<legend>Qobuz — email/password</legend>
|
||||
<label>Qobuz email <input aria-label="qobuz email" value={qobuzEmail} onChange={(e) => setQobuzEmail(e.target.value)} /></label>
|
||||
<label>Qobuz password <input aria-label="qobuz password" type="password" placeholder={pwSet ? "•••• (set)" : ""} value={qobuzPassword} onChange={(e) => setQobuzPassword(e.target.value)} /></label>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<legend>Qobuz — auth token (more reliable; overrides email/password)</legend>
|
||||
<label>Qobuz user ID <input aria-label="qobuz user id" value={qobuzUserId} onChange={(e) => setQobuzUserId(e.target.value)} /></label>
|
||||
<label>Qobuz auth token <input aria-label="qobuz auth token" type="password" placeholder={tokenSet ? "•••• (set)" : ""} value={qobuzToken} onChange={(e) => setQobuzToken(e.target.value)} /></label>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<legend>Soulseek (slskd)</legend>
|
||||
<label>slskd URL <input aria-label="slskd url" value={slskdUrl} onChange={(e) => setSlskdUrl(e.target.value)} /></label>
|
||||
<label>slskd API key <input aria-label="slskd api key" type="password" placeholder={keySet ? "•••• (set)" : ""} value={slskdApiKey} onChange={(e) => setSlskdApiKey(e.target.value)} /></label>
|
||||
</fieldset>
|
||||
<button type="submit">Save</button>
|
||||
{saved ? <span> Saved.</span> : null}
|
||||
</form>
|
||||
<>
|
||||
<form onSubmit={submit}>
|
||||
<fieldset>
|
||||
<legend>Qobuz — email/password</legend>
|
||||
<label>Qobuz email <input aria-label="qobuz email" value={qobuzEmail} onChange={(e) => setQobuzEmail(e.target.value)} /></label>
|
||||
<label>Qobuz password <input aria-label="qobuz password" type="password" placeholder={pwSet ? "•••• (set)" : ""} value={qobuzPassword} onChange={(e) => setQobuzPassword(e.target.value)} /></label>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<legend>Qobuz — auth token (more reliable; overrides email/password)</legend>
|
||||
<label>Qobuz user ID <input aria-label="qobuz user id" value={qobuzUserId} onChange={(e) => setQobuzUserId(e.target.value)} /></label>
|
||||
<label>Qobuz auth token <input aria-label="qobuz auth token" type="password" placeholder={tokenSet ? "•••• (set)" : ""} value={qobuzToken} onChange={(e) => setQobuzToken(e.target.value)} /></label>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<legend>Soulseek (slskd)</legend>
|
||||
<label>slskd URL <input aria-label="slskd url" value={slskdUrl} onChange={(e) => setSlskdUrl(e.target.value)} /></label>
|
||||
<label>slskd API key <input aria-label="slskd api key" type="password" placeholder={keySet ? "•••• (set)" : ""} value={slskdApiKey} onChange={(e) => setSlskdApiKey(e.target.value)} /></label>
|
||||
</fieldset>
|
||||
<button type="submit">Save</button>
|
||||
{saved ? <span> Saved.</span> : null}
|
||||
</form>
|
||||
<section>
|
||||
<h2>Library</h2>
|
||||
<p>Scan <code>/music</code> and record what's already on disk as owned + monitored.</p>
|
||||
<button type="button" onClick={requestScan} disabled={scanRequested}>
|
||||
{scanRequested ? "Scan requested…" : "Scan library"}
|
||||
</button>
|
||||
{scanResult ? <p aria-label="scan result">Last scan: {scanResult}</p> : null}
|
||||
</section>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user