aufträge und „Alle aktualisieren“: beendete lassen sich ausblenden

User 25.09.: Die Karten waren „immer da“ und ließen sich weder bestätigen noch
wegklicken. Beendete Aufträge der KI-Box und das letzte „Alle aktualisieren“
im Homelab haben jetzt einen Knopf „Ausblenden“ (quittiert wird auf dem Server,
gilt also auf allen Geräten; das Protokoll behält alles).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Hitonabi
2026-09-25 12:54:21 +02:00
co-authored by Claude Opus 5.5
parent 0df593c05a
commit 54a3649d5e
39 changed files with 172 additions and 42 deletions
+16 -1
View File
@@ -143,7 +143,8 @@ function useAktion<V, E extends AktionsErgebnis | Record<string, unknown>>(
const ergebnis = e as AktionsErgebnis
if (ergebnis && ergebnis.ok === false) {
melden("fehler", opt.fehler?.(v, ergebnis) ?? fehlerText(ergebnis))
} else {
} else if (opt.erfolg(v, e)) {
// Leerer Text: keine Erfolgsmeldung (etwa beim Ausblenden — da sieht man es ja).
melden("erfolg", opt.erfolg(v, e))
}
for (const k of opt.neuLaden) qc.invalidateQueries({ queryKey: [k] })
@@ -189,6 +190,13 @@ export const useJobAbbrechen = () =>
neuLaden: ["jobs"],
})
/** Einen beendeten Auftrag ausblenden (seit 25.09.2026; vorher blieb er 24 Stunden stehen). */
export const useJobQuittieren = () =>
useAktion((id: string) => post<AktionsErgebnis>(`/api/jobs/${encodeURIComponent(id)}/quittieren`), {
erfolg: () => "",
neuLaden: ["jobs"],
})
/** Ein Modell von Hugging Face holen (Hintergrund-Auftrag, mit optionaler Rolle nach dem Download). */
export const useInstallieren = () =>
useAktion(
@@ -414,6 +422,13 @@ export const useAlleAktualisieren = () =>
neuLaden: ["homelab-sammellauf", "homelab-laeufe", "homelab"],
})
/** Ein beendetes „Alle aktualisieren“ ausblenden (das Protokoll behält es). */
export const useSammellaufQuittieren = () =>
useAktion((id: string) => post<AktionsErgebnis>(`/api/homelab/sammellauf/${encodeURIComponent(id)}/quittieren`), {
erfolg: () => "",
neuLaden: ["homelab-sammellauf"],
})
export const useHomelabProtokoll = (aktiv: boolean, berichte: boolean) =>
useQuery({
queryKey: ["homelab-protokoll", berichte],
+2
View File
@@ -173,6 +173,8 @@ export interface Job {
started_at: number
finished_at: number | null
canceled?: boolean
/** Vom Nutzer ausgeblendet (seit 25.09.2026). */
quittiert?: boolean
/** Nur bei Downloads: Fortschritt 0…100 und die Bytes dazu. */
progress?: number | null
total_bytes?: number
+1 -1
View File
@@ -128,7 +128,7 @@ export function letzteMeldung(j: Pick<Job, "log">): string | null {
export function sichtbareJobs(jobs: Job[], jetzt = Date.now() / 1000): Job[] {
const laufend = jobs.filter(laeuftNoch).sort((a, b) => a.started_at - b.started_at)
const beendet = jobs
.filter((j) => !laeuftNoch(j) && jetzt - (j.finished_at ?? j.started_at) < 86_400)
.filter((j) => !laeuftNoch(j) && !j.quittiert && jetzt - (j.finished_at ?? j.started_at) < 86_400)
.sort((a, b) => (b.finished_at ?? b.started_at) - (a.finished_at ?? a.started_at))
.slice(0, 3)
return [...laufend, ...beendet]