Feature: Push-Benachrichtigungen (ntfy/Webhook) bei Paket fertig/fehlgeschlagen + Run-Ende
Headless-Server: Paket-Ausgaenge waren bisher nur per RDP+Log sichtbar. Neues Modul notify.ts schickt einen fire-and-forget POST (ntfy-kompatibel: Title/ Priority/Tags als Header, Nachricht als Body) an eine konfigurierbare URL — mit der kostenlosen ntfy-App aufs Handy, ohne Account/Port/Firewall (outbound). - Settings: notifyUrl + 3 Ereignis-Toggles (Default aus) in Allgemein. - Hook 1: Post-Processing-Ende (Paket completed/failed nach Entpacken). - Hook 2: refreshPackageStatus fuer den Alle-Items-fehlgeschlagen-Fall (Link tot -> Paket erreicht das Post-Processing nie; ohne diesen Hook schwiege ausgerechnet der haeufigste Fehlerfall). - Hook 3: finishRun mit Run-Summary (X/Y erfolgreich, Dauer, Schnitt). - Dedup-Set pro Paket+Run, Lifecycle gespiegelt an historyRecordedPackages (Run-Start-Clear, Retry-Deletes, removePackageFromSession). Guard session.running || runPackageIds.has(id): nachlaufendes Entpacken nach Run-Ende benachrichtigt noch, Startup-Recovery nach App-Neustart nicht (sonst Doppel-Push fuer laengst fertige Pakete). - 5s-Timeout, Fehler nur als logger.warn — blockiert nie den Download-Pfad. - 9 Unit-Tests fuer notify.ts.
This commit is contained in:
@@ -459,6 +459,10 @@ export function normalizeSettings(settings: AppSettings): AppSettings {
|
||||
hideExtractedItems: settings.hideExtractedItems !== undefined ? Boolean(settings.hideExtractedItems) : defaults.hideExtractedItems,
|
||||
confirmDeleteSelection: settings.confirmDeleteSelection !== undefined ? Boolean(settings.confirmDeleteSelection) : defaults.confirmDeleteSelection,
|
||||
backupIncludeDownloads: settings.backupIncludeDownloads !== undefined ? Boolean(settings.backupIncludeDownloads) : defaults.backupIncludeDownloads,
|
||||
notifyUrl: asText(settings.notifyUrl) || defaults.notifyUrl,
|
||||
notifyOnPackageCompleted: settings.notifyOnPackageCompleted !== undefined ? Boolean(settings.notifyOnPackageCompleted) : defaults.notifyOnPackageCompleted,
|
||||
notifyOnPackageFailed: settings.notifyOnPackageFailed !== undefined ? Boolean(settings.notifyOnPackageFailed) : defaults.notifyOnPackageFailed,
|
||||
notifyOnRunFinished: settings.notifyOnRunFinished !== undefined ? Boolean(settings.notifyOnRunFinished) : defaults.notifyOnRunFinished,
|
||||
totalDownloadedAllTime: typeof settings.totalDownloadedAllTime === "number" && settings.totalDownloadedAllTime >= 0 ? settings.totalDownloadedAllTime : defaults.totalDownloadedAllTime,
|
||||
totalCompletedFilesAllTime: typeof settings.totalCompletedFilesAllTime === "number" && settings.totalCompletedFilesAllTime >= 0 ? settings.totalCompletedFilesAllTime : defaults.totalCompletedFilesAllTime,
|
||||
totalRuntimeAllTimeMs: typeof settings.totalRuntimeAllTimeMs === "number" && settings.totalRuntimeAllTimeMs >= 0 ? settings.totalRuntimeAllTimeMs : defaults.totalRuntimeAllTimeMs,
|
||||
|
||||
Reference in New Issue
Block a user