diff --git a/.gitignore b/.gitignore index 0f0f20b..7207ec2 100644 --- a/.gitignore +++ b/.gitignore @@ -20,6 +20,7 @@ apply_update.cmd .claude/ .github/ docs/plans/ +CHANGELOG.md node_modules/ .vite/ diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 0c7c3e3..0000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,223 +0,0 @@ -# Changelog - -Alle nennenswerten Aenderungen werden in dieser Datei dokumentiert. - -## 1.5.28 - 2026-03-02 - -UI-Verbesserung: Visuelle Fortschrittsanzeigen in der Download-Liste (JDownloader 2 Style). - -### Features - -- **Visuelle Fortschrittsbalken:** - - Paket-Fortschritt wird jetzt als grafische Progress-Bar in der Spalte "Fortschritt" angezeigt. - - Einzelne Items haben ebenfalls eine kleinere Progress-Bar. - - Grüner Gradient (#22c55e → #4ade80) für bessere Text-Lesbarkeit. - - Prozentanzeige als Overlay-Text auf der Bar. - -## 1.4.68 - 2026-03-01 - -Stabilitaets-Hotfix fuer Session-Verlust nach Update/Neustart: Session-Dateien haben jetzt ein robustes Backup-/Restore-Fallback. - -### Fixes - -- Session-Backup fuer Queue-Zustand eingefuehrt: - - Vor jedem Session-Save wird die vorherige Session als `.bak` gesichert (sync + async Pfad). - - Schuetzt gegen defekte/trunkierte Session-Datei beim Start. -- Session-Autorestore beim Laden: - - Wenn `rd_session_state.json` defekt ist, wird automatisch `rd_session_state.json.bak` geladen. - - Das Backup wird danach best-effort wieder als primäre Session-Datei hergestellt. -- Klarere Fehlersignale im Log: - - Eindeutige Meldung, ob primäre Session defekt war und Backup verwendet wurde. - -### Tests - -- Neue Tests in `tests/storage.test.ts`: - - Laden aus Session-Backup bei defekter primärer Session. - - Backup-Erstellung vor sync- und async-Session-Overwrite. - -## 1.4.67 - 2026-03-01 - -Hotfix fuer einen kritischen Start-Konflikt-Datenverlust und zusaetzliche Renamer-Haertung fuer reale Scene-Muster. - -### Fixes - -- Start-Konflikt `Überspringen` loescht keine Pakete/Items mehr: - - Bereits entpackte Dateien bleiben erhalten. - - Offene Downloads bleiben in der Queue und koennen normal fortgesetzt werden. - - Laufende Tasks werden dabei als Paket-Stop statt als Cancel behandelt. -- Start-Konflikt-Dialogtext in der UI praezisiert: - - `Entpacktes überspringen` statt missverstaendlichem `Überspringen`. - - Klare Info, dass nur erneutes Entpacken uebersprungen wird. -- Auto-Renamer verbessert: - - Erkennt jetzt auch Episode-only Tokens wie `e01`/`e02` mit Staffel-Hinweis aus dem Ordner. - - Akzeptiert lowercase Group-Suffixe wie `-tmsf`. - - Robuster bei Source-Formaten wie `4sf-bs-720p-s01e05`. - -### Tests - -- Neue/angepasste Tests in: - - `tests/download-manager.test.ts` (Start-Konflikt-Skip behaelt Paket + Partial-Queue) - - `tests/auto-rename.test.ts` (e01/e02, lowercase suffix, odd source order) - -## 1.4.66 - 2026-03-01 - -Hotfix fuer haengende "Link wird umgewandelt"-Faelle (insbesondere Mega-Web-Pfad), bei denen nur ein App-Neustart geholfen hat. - -### Fixes - -- Mega-Web-Unrestrict ist jetzt komplett abort-/timeout-faehig: - - Abort-Signale werden bis in den Mega-Web-Fallback durchgereicht. - - Laufende Polling-/Fetch-Schritte respektieren Stop/Timeout sofort. - - Wartende Jobs in der exklusiven Mega-Web-Queue koennen bei Abort sauber abbrechen. -- Download-Manager kann haengende Unrestrict-Phasen dadurch wieder automatisch per Timeout + Retry aufloesen, statt dauerhaft in "Link wird umgewandelt" zu bleiben. - -### Tests - -- Neue Tests sichern den Fix ab: - - Abort-Weitergabe bei Mega-Web-Unrestrict in `tests/debrid.test.ts`. - - Abort waehrend Mega-Web-Polling in `tests/mega-web-fallback.test.ts`. - -## 1.4.33 - 2026-03-02 - -Hotfix-Release fuer zwei reale Produktionsprobleme: falsche Gesamt-Statistik bei leerer Queue und stilles DLC-Import-Failure bei Drag-and-Drop. - -### Fixes - -- **Stats-Anzeige korrigiert ("Gesamt" bei leerer Queue):** - - Wenn keine Pakete/Items mehr vorhanden sind, werden persistierte Run-Bytes und Run-Timestamps jetzt sauber auf 0 zurueckgesetzt. - - Dadurch verschwindet die Ghost-Anzeige wie z. B. `Gesamt: 19.99 GB` bei `Pakete: 0 / Dateien: 0`. - - Reset greift in den relevanten Pfaden (`getStats`, `clearAll`, Paket-Entfernung, Startup-Normalisierung). - -- **DLC Drag-and-Drop Import gehaertet:** - - Lokale DLC-Fehler wie `Ungültiges DLC-Padding` blockieren den Fallback zu dcrypt nicht mehr. - - Oversize/invalid-size DLCs werden weiterhin defensiv behandelt, aber valide Dateien im gleichen Batch werden nicht mehr still geschluckt. - - Wenn alle DLC-Imports fehlschlagen, wird jetzt ein klarer Fehler mit Ursache geworfen statt still `0 Paket(e), 0 Link(s)` zu melden. - -- **UI-Rueckmeldung verbessert:** - - Bei DLC-Import mit `0` Treffern zeigt die UI jetzt eine klare Meldung (`Keine gültigen Links in den DLC-Dateien gefunden`) statt eines irrefuehrenden Erfolgs-Toast. - -### Tests - -- Neue/erweiterte Tests fuer: - - Reset von `totalDownloadedBytes`/Stats bei leerer Queue. - - DLC-Fallback-Pfad bei lokalen Decrypt-Exceptions. - - Fehlerausgabe bei vollstaendig fehlgeschlagenem DLC-Import. -- Validierung: - - `npx tsc --noEmit` erfolgreich - - `npm test` erfolgreich (`283/283`) - - `npm run self-check` erfolgreich - -## 1.4.32 - 2026-03-01 - -Diese Version erweitert den Auto-Renamer stark fuer reale Scene-/TV-Release-Strukturen (nested und flat) und fuehrt eine intensive Renamer-Regression mit zusaetzlichen Edge-Case- und Stress-Checks ein. - -### Renamer (Download-Manager) - -- Erweiterte Mustererkennung fuer nested und flat Staffel-Ordner mit Group-Suffix (z. B. `-TMSF`, `-TVS`, `-TvR`, `-ZZGtv`, `-SunDry`). -- Episode-Token kann jetzt auch aus kompakten Codes im Source-Namen abgeleitet werden (z. B. `301` -> `S03E01`, `211` -> `S02E11`, `101` -> `S01E01`), sofern Staffel-Hinweise vorhanden sind. -- `Teil1/Teil2` bzw. `Part1/Part2` wird auf `SxxExx` gemappt, inklusive Staffel-Ableitung aus der Ordnerstruktur. -- Repack-Handling ueber Dateiname und Ordnerstruktur vereinheitlicht (`rp`/`repack` -> `REPACK`-Token konsistent im Zielnamen). -- Flat-Season-Ordner (Dateien direkt im Staffelordner) bekommen jetzt sauberes Episode-Inlining statt unspezifischer Season-Dateinamen. -- Pfadlaengen-Schutz auf Windows gehaertet: erst normaler Zielname, dann deterministischer Paket-Fallback (z. B. `Show.S08E20`), danach sicherer Skip mit Warnlog statt fehlerhaftem Rename. - -### Abgedeckte reale Muster (Beispiele) - -- Arrow / Gotham / Britannia / Legion / Lethal.Weapon / Agent.X / Last.Impact -- Nested Unterordner mit Episodentiteln und flache Staffelordner mit vielen Episoden-Dateien -- Uneinheitliche Source-Namen wie `tvs-...-301`, `...-211`, `...teil1...`, `...rp...` - -### Intensive Bugtests - -- Unit-Tests fuer Renamer deutlich ausgebaut (`tests/auto-rename.test.ts`) mit zusaetzlichen realen Pattern- und Compact-Code-Faellen. -- Zusätzliche intensive Szenario- und Stress-Checks mit temporaeren Testdateien ausgefuehrt (nested/flat, Repack, Teil/Part, Compact-Code, Pfadlaenge, Kollisionsschutz). -- TypeScript Typecheck erfolgreich. -- Voller Vitest Lauf erfolgreich (`279/279`). -- End-to-End Self-Check erfolgreich. - -## 1.4.31 - 2026-03-01 - -Diese Version schliesst die komplette Bug-Audit-Runde (156 Punkte) ab und fokussiert auf Stabilitaet, Datenintegritaet, sauberes Abbruchverhalten und reproduzierbares Release-Verhalten. - -### Audit-Abschluss - -- Vollstaendige Abarbeitung der Audit-Liste `Bug-Audit-Komplett-156-Bugs.txt` ueber Main-Process, Renderer, Storage, Update, Integrity und Logger. -- Vereinheitlichte Fehlerbehandlung fuer Netzwerk-, Abort-, Retry- und Timeout-Pfade. -- Harte Regression-Absicherung ueber Typecheck, Unit-Tests und Release-Build. - -### Download-Manager (Queue, Retry, Stop/Start, Post-Processing) - -- Retry-Status ist jetzt item-gebunden statt call-lokal (kein Retry-Reset bei Requeue, keine Endlos-Retry-Schleifen mehr). -- Stop-zu-Start-Resume in derselben Session repariert (gestoppte Items werden wieder sauber gequeued). -- HTTP-416-Pfade gehaertet (Body-Konsum, korrektes Fehlerbild im letzten Attempt, Contribution-Reset bei Datei-Neustart). -- Target-Path-Reservierung gegen Race-Fenster verbessert (kein verfruehtes Release waehrend Retry-Delay). -- Scheduler-Verhalten bei Reconnect/Abort bereinigt, inklusive Status- und Speed-Resets in Abbruchpfaden. -- Post-Processing/Extraction-Abbruch und Paket-Lifecycle synchronisiert (inkl. Cleanup und Run-Finish-Konsistenz). -- `prepareForShutdown()` raeumt Persist- und State-Emitter-Timer jetzt vollstaendig auf. -- Read-only Queue-Checks entkoppelt von mutierenden Seiteneffekten. - -### Extractor - -- Cleanup-Modus `trash` ueberarbeitet (keine permanente Loeschung mehr im Trash-Pfad). -- Konfliktmodus-Weitergabe in ZIP- und External-Fallback-Pfaden konsistent gemacht. -- Fortschritts-Puls robust gegen callback-exceptions (kein unhandled crash durch `onProgress`). -- ZIP/Volume-Erkennung und Cleanup-Targets fuer Multi-Part-Archive erweitert. -- Schutz gegen gefaehrliche ZIP-Eintraege und Problemarchive weiter gehaertet. - -### Debrid / RealDebrid - -- Abort-signale werden in Filename-Resolution und Provider-Fallback konsequent respektiert. -- Provider-Fallback bricht bei Abort sofort ab statt weitere Provider zu probieren. -- Rapidgator-Filename-Resolution auf Content-Type, Retry-Klassen und Body-Handling gehaertet. -- AllDebrid/BestDebrid URL-Validierung verbessert (nur gueltige HTTP(S)-direct URLs). -- User-Agent-Versionsdrift beseitigt (nun zentral ueber `APP_VERSION`). -- RealDebrid-Retry-Backoff ist abort-freundlich (kein unnoetiges Warten nach Stop/Abort). - -### Storage / Session / Settings - -- Temp-Dateipfade fuer Session-Save gegen Race/Kollision gehaertet. -- Session-Normalisierung und PackageOrder-Deduplizierung stabilisiert. -- Settings-Normalisierung tightened (kein unkontrolliertes Property-Leaking). -- Import- und Update-Pfade robust gegen invalides Input-Shape. - -### Main / App-Controller / IPC - -- IPC-Validierung erweitert (Payload-Typen, String-Laengen, Import-Size-Limits). -- Auto-Resume Start-Reihenfolge korrigiert, damit der Renderer initiale States sicher erhaelt. -- Fenster-Lifecycle-Handler fuer neu erstellte Fenster vereinheitlicht (macOS activate-recreate eingeschlossen). -- Clipboard-Normalisierung unicode-sicher (kein Surrogate-Split bei Truncation). -- Container-Path-Filter so korrigiert, dass legitime Dateinamen mit `..` nicht falsch verworfen werden. - -### Update-System - -- Dateinamenhygiene fuer Setup-Assets gehaertet (`basename` + sanitize gegen Traversal/RCE-Pfade). -- Zielpfad-Kollisionen beseitigt (Timestamp + PID + UUID). -- `spawn`-Error-Handling hinzugefuegt (kein unhandled EventEmitter crash beim Installer-Start). -- Download-Pipeline auf Shutdown-abort vorbereitet; aktive Update-Downloads koennen sauber abgebrochen werden. -- Stream/Timeout/Retry-Handling bei Download und Release-Fetch konsolidiert. - -### Integrity - -- CRC32-Berechnung optimiert (Lookup-Table + Event-Loop-Yield), deutlich weniger UI-/Loop-Blockade bei grossen Dateien. -- Hash-Manifest-Lesen gecacht (reduzierte Disk-I/O bei Multi-File-Validierung). -- Manifest-Key-Matching fuer relative Pfade und Basenamen vereinheitlicht. - -### Logger - -- Rotation im async- und fallback-Pfad vervollstaendigt. -- Rotate-Checks pro Datei getrennt statt global geteilt. -- Async-Flush robust gegen Log-Loss bei Write-Fehlern (pending Lines werden erst nach erfolgreichem Write entfernt). - -### Renderer (App.tsx) - -- Theme-Toggle, Sortier-Optimismus und Picker-Busy-Lifecycle gegen Race Conditions gehaertet. -- Mounted-Guards fuer fruehe Unmount-Pfade ergaenzt. -- Drag-and-Drop nutzt aktive Tab-Referenz robust ueber async Grenzen. -- Confirm-Dialog-Text rendert Zeilenumbrueche korrekt. -- PackageCard-Memovergleich erweitert (inkl. Dateiname) fuer korrekte Re-Renders. -- Human-size Anzeige gegen negative/NaN Inputs gehaertet. - -### QA / Build / Release - -- TypeScript Typecheck erfolgreich. -- Voller Vitest Lauf erfolgreich (`262/262`). -- Windows Release-Build erfolgreich (NSIS + Portable). diff --git a/README.md b/README.md index 9eadd40..0b12d3a 100644 --- a/README.md +++ b/README.md @@ -154,7 +154,7 @@ The app stores runtime files in Electron's `userData` directory, including: ## Changelog -Release history is available in `CHANGELOG.md` and on Codeberg Releases. +Release history is available on [Codeberg Releases](https://codeberg.org/Sucukdeluxe/real-debrid-downloader/releases). ## License