updates: Urteil und Paketliste sichtbar, ehrliche Lade- und Fehlerzustaende, Rueckfragen, Auftraege aller Gruppen
- Update-Details zeigen jetzt das Urteil des Hirns ("Nichts zu tun" / "Du musst
etwas tun" samt Text), die Zusammenfassung ist aufklappbar statt auf drei Zeilen
gekappt, das Betriebssystem zeigt seine Paketliste (und was Ubuntu zurueckhaelt).
- Scheitert eine Pruefung (z. B. git fetch bei Hermes), steht "Konnte nicht pruefen: ..."
statt "- -> neu"; waehrend des Ladens ein Platzhalter statt "..." und kein voreiliges "neu".
- Einzel-Update und Freigeben fragen vorher nach; der Ja-Knopf sperrt gegen Doppelklick.
- Neue Job-Karte (Fortschritt, Abbrechen mit Rueckfrage, letzte Meldung, Protokoll) fuer
alle laufenden Auftraege, egal welche Gruppe. Updates lassen sich bewusst nicht abbrechen.
- Job-Typen an jobengine.py angeglichen ("canceled", group, started_at/finished_at):
abgebrochene Auftraege erschienen bisher als "Laeuft".
- Fehler aus "Jetzt sichern" (Feld error) und "Es laeuft schon ein Update" (status busy)
werden gemeldet; ist ein Auftrag fertig, lesen Versionen, Modelle und Sicherungen neu.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
c8718fcde0
commit
5ddc952ecd
@@ -0,0 +1,42 @@
|
||||
import { useJobAbbrechen, useJobs } from "@/lib/abfragen"
|
||||
import { jobTitel, sichtbareJobs } from "@/lib/anzeige"
|
||||
import { JobKarte } from "./JobKarte"
|
||||
import { Panel } from "./Panel"
|
||||
|
||||
/**
|
||||
* Laufende und zuletzt beendete Aufträge — egal, woher sie kommen (Update, Modell-Download, Suche
|
||||
* nach Neuem). Solange nichts läuft und nichts frisch beendet ist, zeigt sie gar nichts.
|
||||
*/
|
||||
export function Auftraege({ alsPanel = false }: { alsPanel?: boolean }) {
|
||||
const jobs = useJobs()
|
||||
const abbrechen = useJobAbbrechen()
|
||||
const liste = sichtbareJobs(jobs.data?.jobs ?? [])
|
||||
|
||||
let inhalt
|
||||
if (liste.length > 0) {
|
||||
inhalt = (
|
||||
<div className="flex flex-col gap-2.5">
|
||||
{liste.map((j) => (
|
||||
<JobKarte
|
||||
key={j.id}
|
||||
job={j}
|
||||
abbrechenGesperrt={abbrechen.isPending}
|
||||
onAbbrechen={(job) => abbrechen.mutate({ id: job.id, titel: jobTitel(job) })}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
)
|
||||
} else if (jobs.isError && !jobs.data) {
|
||||
inhalt = <p role="alert" className="text-sm text-rot-text">Die Aufträge lassen sich gerade nicht lesen: {jobs.error.message}</p>
|
||||
} else {
|
||||
return null
|
||||
}
|
||||
|
||||
if (alsPanel) return <Panel titel="Aufträge">{inhalt}</Panel>
|
||||
return (
|
||||
<section aria-label="Aufträge" className="flex flex-col gap-2.5">
|
||||
<h3 className="schild m-0 text-sm text-text-3">Aufträge</h3>
|
||||
{inhalt}
|
||||
</section>
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user