perf(v5): Kompressions-Fortschritt als kleine Nachricht, Roh-Größen 30 s gemerkt

WAS: Ein Prozent-Tick von HandBrake (etwa einmal je Sekunde) geht jetzt
als `kompression-stand` (nur die Warteschlange) an Haupt und Fenster; der
volle Vorgangs-Stand — mit rekursivem Ordnerlauf durch jeden Roh-Ordner,
fremden Ordnern und zwei statfs — kommt nur noch bei einem Phasenwechsel
oder auf Zuruf. Roh-Größen werden 30 s gemerkt; Löschen, Aufräumen und der
Knopf „Aktualisieren" messen frisch.
WARUM: Durchsicht 12.09.2026, Fund F7 — auf einer NAS als Arbeitsordner
war das ein Netz-Ordnerlauf pro Sekunde, und das Fenster zeichnete jede
Sekunde komplett neu.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Hitonabi
2026-09-12 21:33:22 +02:00
co-authored by Claude Opus 5
parent 904e4b2ef6
commit 551f1d7b2c
6 changed files with 62 additions and 7 deletions
@@ -414,6 +414,9 @@ export type KernNachricht =
/** Alle Vorgänge, die Roh-Belegung und die Kompressions-Warteschlange
* (5.4.0) — geht auch ans Haupt (Taskleiste, Updates warten). */
| { art: 'vorgaenge'; stand: VorgaengeStand }
/** 5.7.0 (F7): NUR die Warteschlange — jeder Prozent-Tick der Kompression
* kommt so, ohne den teuren vollen Vorgangs-Stand (Ordnerläufe, statfs). */
| { art: 'kompression-stand'; kompression: VorgaengeStand['kompression'] }
/** Eine Kompression ist zu Ende — fürs Toast und die Ereignis-Zeile. */
| { art: 'kompression-ergebnis'; vorgangId: string; titel: string; ok: boolean; text: string }
| { art: 'laufwerk-gesundheit'; id: string; bericht: LaufwerkBericht }
@@ -594,6 +597,8 @@ export function istKernNachricht(wert: unknown): wert is KernNachricht {
istObjekt((wert.stand as Record<string, unknown>).kompression) &&
istObjekt((wert.stand as Record<string, unknown>).statistik)
)
case 'kompression-stand':
return istObjekt(wert.kompression) && Array.isArray((wert.kompression as Record<string, unknown>).wartend)
case 'kompression-ergebnis':
return (
istKennung(wert.vorgangId) &&