Update-Check im System-Tab, Worker-Adressfeld mit Heimnetz-Warnung, Save-Knopf raus aus dem Worker-Tab
Ampel / ampel (push) Successful in 28s
Ampel / ampel (push) Successful in 28s
1. Update-Erkennung (Commander-Frage 'wie kriegen wir Updates mit?'): GET /system/updates vergleicht installierte Versionen (Worker-Info) mit makemkv.com (Versionsnummer der Download-Seite) und der HandBrake- GitHub-Release-API (releases/latest), 12 h gecacht. Einstellungen -> System: 'Auf Updates prüfen' + fertiger Update-Befehl bei MakeMKV. Selbst-Update gibt es bewusst NICHT (waere Docker-Socket-Zugriff); dafuer ist MAKEMKV_VERSION jetzt per .env uebersteuerbar — Update ohne Code-Aenderung. HandBrake-Abweichung wird als Info dargestellt (Debian-Paket hinkt der offiziellen Version bewusst hinterher). 2. Worker-Anbindung: editierbares Adressfeld statt stillschweigend window.location.hostname — Befund: ueber die externe Domain kopierte Befehle liefen in den Reverse-Proxy (401) und Worker koennen Redis/ Postgres eh nur im Heimnetz erreichen. Amber-Warnung bei oeffentlich aussehender Adresse, Anleitung ergaenzt. 3. 'Einstellungen speichern' ist im Worker-Tab ausgeblendet — dort gibt es nichts zu speichern, der Knopf verwirrte nur. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -88,6 +88,25 @@ export default function SettingsPage() {
|
||||
const [testBusy, setTestBusy] = useState(false)
|
||||
const [quellenStatus, setQuellenStatus] = useState<Record<string, string> | null>(null)
|
||||
const [quellenBusy, setQuellenBusy] = useState(false)
|
||||
const [updates, setUpdates] = useState<Record<string, { installiert?: string, verfuegbar?: string, update?: boolean }> | null>(null)
|
||||
const [updatesBusy, setUpdatesBusy] = useState(false)
|
||||
|
||||
const updatesPruefen = async () => {
|
||||
setUpdatesBusy(true)
|
||||
try {
|
||||
const r = await api.get('/system/updates')
|
||||
setUpdates(r.data)
|
||||
if (r.data?.makemkv?.update) {
|
||||
toast('info', `MakeMKV ${r.data.makemkv.verfuegbar} ist verfügbar (installiert: ${r.data.makemkv.installiert})`)
|
||||
} else {
|
||||
toast('success', 'Update-Check abgeschlossen')
|
||||
}
|
||||
} catch {
|
||||
toast('error', 'Update-Check fehlgeschlagen (makemkv.com/GitHub nicht erreichbar?)')
|
||||
} finally {
|
||||
setUpdatesBusy(false)
|
||||
}
|
||||
}
|
||||
const { theme } = useDarkMode()
|
||||
const { toast } = useToast()
|
||||
|
||||
@@ -732,9 +751,54 @@ export default function SettingsPage() {
|
||||
Rebuild: <code>docker compose build worker && docker compose up -d worker</code> (siehe README).
|
||||
</p>
|
||||
</div>
|
||||
|
||||
{/* Update-Check: Rippy MELDET Updates ehrlich — selbst updaten
|
||||
kann es nicht (die Versionen stecken im Worker-Image) */}
|
||||
<div className={`rounded-lg p-4 mt-6 ${theme === 'dark' ? 'bg-slate-700/50' : 'bg-slate-50'}`}>
|
||||
<div className="flex items-center justify-between mb-2">
|
||||
<p className={`text-sm font-medium ${theme === 'dark' ? 'text-slate-200' : 'text-slate-700'}`}>Update-Check</p>
|
||||
<button
|
||||
onClick={updatesPruefen}
|
||||
disabled={updatesBusy}
|
||||
className="px-3 py-1.5 rounded-lg bg-indigo-600 text-white text-xs font-medium hover:bg-indigo-700 transition-colors disabled:opacity-40"
|
||||
>
|
||||
{updatesBusy ? 'Prüfe…' : 'Auf Updates prüfen'}
|
||||
</button>
|
||||
</div>
|
||||
{updates ? (
|
||||
<div className="space-y-2 text-sm">
|
||||
<div className={updates.makemkv?.update ? 'text-amber-500' : (theme === 'dark' ? 'text-slate-300' : 'text-slate-600')}>
|
||||
<strong>MakeMKV:</strong> installiert {updates.makemkv?.installiert || '—'},
|
||||
aktuell {updates.makemkv?.verfuegbar || 'unbekannt'}
|
||||
{updates.makemkv?.update && (
|
||||
<span className="block text-xs mt-1">
|
||||
Update: in der .env <code>MAKEMKV_VERSION={updates.makemkv.verfuegbar}</code> setzen,
|
||||
dann auf der Rippy-Maschine <code>docker compose build worker && docker compose up -d worker</code>.
|
||||
Neue Version bringt auch die neueste Disc-Schlüssel-Datenbank mit.
|
||||
</span>
|
||||
)}
|
||||
</div>
|
||||
<div className={theme === 'dark' ? 'text-slate-300' : 'text-slate-600'}>
|
||||
<strong>HandBrake:</strong> Docker-Worker {updates.handbrake?.installiert || '—'} (Debian-Paket),
|
||||
neueste offizielle Version {updates.handbrake?.verfuegbar || 'unbekannt'}
|
||||
<span className={`block text-xs mt-1 ${theme === 'dark' ? 'text-slate-500' : 'text-slate-400'}`}>
|
||||
Im Docker-Worker kommt HandBrake aus Debian und hinkt der offiziellen Version
|
||||
bewusst hinterher (stabil, keine Eigenbauten). Der native Windows-Worker nutzt
|
||||
die aktuelle Version direkt.
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
) : (
|
||||
<p className={`text-xs ${theme === 'dark' ? 'text-slate-500' : 'text-slate-400'}`}>
|
||||
Prüft gegen makemkv.com und die HandBrake-GitHub-Releases (Ergebnis wird 12 h gemerkt).
|
||||
</p>
|
||||
)}
|
||||
</div>
|
||||
</section>}
|
||||
|
||||
{/* Save Button */}
|
||||
{/* Save Button — nicht im Worker-Tab: dort gibt es nichts zu
|
||||
speichern (Liste + Anbinde-Befehle), der Knopf verwirrte nur */}
|
||||
{activeTab !== 'worker' && (
|
||||
<div className={`flex items-center justify-end gap-4 pt-6 transition-colors duration-300 ${theme === 'dark' ? 'border-slate-700' : 'border-slate-200'} border-t`}>
|
||||
<button
|
||||
onClick={handleSave}
|
||||
@@ -754,6 +818,7 @@ export default function SettingsPage() {
|
||||
)}
|
||||
</button>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user