import { useEffect, useState } from 'react' import { api, type Settings } from '../api' export default function SettingsPage() { const [settings, setSettings] = useState(null) const [form, setForm] = useState({ poll_interval_seconds: '', default_quality: '', default_sub_group: '' }) const [saving, setSaving] = useState(false) const [saved, setSaved] = useState(false) const [error, setError] = useState('') useEffect(() => { api.settings.get().then((s) => { setSettings(s) setForm({ poll_interval_seconds: s.poll_interval_seconds, default_quality: s.default_quality, default_sub_group: s.default_sub_group, }) }) }, []) const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() setSaving(true) setError('') setSaved(false) try { const updated = await api.settings.update(form) setSettings(updated) setSaved(true) setTimeout(() => setSaved(false), 3000) } catch (err) { setError(err instanceof Error ? err.message : 'Save failed') } finally { setSaving(false) } } if (!settings) return
return ( <>

Settings

Polling
setForm((f) => ({ ...f, poll_interval_seconds: e.target.value }))} />

Minimum 60 seconds. Default is 900 (15 minutes).

Defaults (applied to new shows)
setForm((f) => ({ ...f, default_quality: e.target.value }))} placeholder="1080p" />
setForm((f) => ({ ...f, default_sub_group: e.target.value }))} placeholder="SubsPlease" />
Torrent Output Directory
{settings.torrent_output_dir}

Configured via the TORRENT_OUTPUT_DIR environment variable.

{error &&

{error}

} {saved &&

Settings saved.

}
) }