Commit Graph

228 Commits

Author SHA1 Message Date
Sucukdeluxe
a0cdac87e8 Add bandwidth statistics tab with live chart
- Add new Statistics tab between Downloads and Settings
- Implement real-time bandwidth chart using Canvas (60s history)
- Add session overview with 8 stats cards (speed, downloaded, files, packages, etc.)
- Add provider statistics with progress bars
- Add getSessionStats IPC endpoint
- Support dark/light theme in chart rendering
2026-03-01 15:56:57 +01:00
Sucukdeluxe
f5d7ee4d1a Release v1.4.53 with updater verification fallback
Some checks are pending
Build and Release / build (push) Waiting to run
2026-03-01 15:51:16 +01:00
Sucukdeluxe
43950014b2 Retry updater candidates after hash mismatch 2026-03-01 15:51:13 +01:00
Sucukdeluxe
ec45983810 Release v1.4.51 with MKV post-cleanup and updater fixes
Some checks are pending
Build and Release / build (push) Waiting to run
2026-03-01 05:04:31 +01:00
Sucukdeluxe
7795208332 Fix MKV collection cleanup and updater digest verification 2026-03-01 05:01:11 +01:00
Sucukdeluxe
b0dc7b80ab Release v1.4.50 with infinite retry default
Some checks are pending
Build and Release / build (push) Waiting to run
2026-03-01 04:32:27 +01:00
Sucukdeluxe
ab9b3e87b1 Set default auto-retry limit to infinite 2026-03-01 04:31:04 +01:00
Sucukdeluxe
116135289c Release v1.4.49 with retry-limit and extract-folder cleanup updates
Some checks are pending
Build and Release / build (push) Waiting to run
2026-03-01 04:27:42 +01:00
Sucukdeluxe
2bddd5b3b2 Apply configurable retry limit and clean empty extract dirs more aggressively 2026-03-01 04:26:33 +01:00
Sucukdeluxe
5f2eb907b6 Release v1.4.48 with configurable retry limit setting
Some checks are pending
Build and Release / build (push) Waiting to run
2026-03-01 04:19:40 +01:00
Sucukdeluxe
3f17cc8cb4 Add configurable auto-retry limit with optional infinite retries 2026-03-01 04:18:41 +01:00
Sucukdeluxe
33e2e126f1 Release v1.4.47 with stuck-download watchdog improvements
Some checks are pending
Build and Release / build (push) Waiting to run
2026-03-01 04:08:16 +01:00
Sucukdeluxe
467d4bbc58 Add watchdogs for stuck unrestrict and low-throughput downloads 2026-03-01 04:07:23 +01:00
Sucukdeluxe
e1e7f63f50 Release v1.4.46 for updater verification
Some checks are pending
Build and Release / build (push) Waiting to run
2026-03-01 04:01:29 +01:00
Sucukdeluxe
18fdbcba18 Release v1.4.45 with updater integrity hardening
Some checks are pending
Build and Release / build (push) Waiting to run
2026-03-01 03:58:15 +01:00
Sucukdeluxe
4bcb069ec7 Harden updater integrity checks with latest.yml SHA512 fallback 2026-03-01 03:57:23 +01:00
Sucukdeluxe
bfbaee8e5c Release v1.4.44 with extraction smoothness and rename fixes
Some checks are pending
Build and Release / build (push) Waiting to run
2026-03-01 03:49:11 +01:00
Sucukdeluxe
282c1ebf1d Reduce extract lag and improve long-path auto-rename stability 2026-03-01 03:47:18 +01:00
Sucukdeluxe
6e50841387 Release v1.4.43 with update progress and collector metrics
Some checks are pending
Build and Release / build (push) Waiting to run
2026-03-01 03:34:28 +01:00
Sucukdeluxe
508977e70b Add update install progress feedback and collector metrics line 2026-03-01 03:33:18 +01:00
Sucukdeluxe
cb1e4bb0c1 Release v1.4.42 with flat MKV collection support
Some checks are pending
Build and Release / build (push) Waiting to run
2026-03-01 03:24:56 +01:00
Sucukdeluxe
809aec69c2 Add optional flat MKV library collection per package 2026-03-01 03:23:26 +01:00
Sucukdeluxe
71aa9204f4 Add one-command Codeberg release workflow 2026-03-01 02:54:13 +01:00
Sucukdeluxe
65cf4c217f Release v1.4.41 for updater validation on Codeberg
Some checks are pending
Build and Release / build (push) Waiting to run
2026-03-01 02:47:53 +01:00
Sucukdeluxe
2d3a1df21d Release v1.4.40 with Codeberg updater migration
Some checks are pending
Build and Release / build (push) Waiting to run
2026-03-01 02:42:06 +01:00
Sucukdeluxe
43bc95b7fc Switch updater and docs from GitHub to Codeberg 2026-03-01 02:40:11 +01:00
Sucukdeluxe
fe59e064f0 Translate README to English and refine wording 2026-03-01 02:29:37 +01:00
Sucukdeluxe
67fc7a9226 Revise README with modern feature and setup overview 2026-03-01 02:28:15 +01:00
Sucukdeluxe
474ff8cd26 Release v1.4.39 with Multi Debrid Downloader title format
Some checks are pending
Build and Release / build (push) Waiting to run
2026-03-01 02:25:17 +01:00
Sucukdeluxe
310f4dc58a Release v1.4.38 with version display formatting tweak
- Change header to "Multi Debrid Downloader - vX.X.X" (dash separator)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 02:17:33 +01:00
Sucukdeluxe
d491c21b97 Release v1.4.37 with DLC filenames, instant delete, version display
- Parse <filename> tags from DLC XML for proper file names instead of
  deriving from opaque URLs (fixes download.bin display)
- Optimistic UI removal for package/item delete (instant feedback)
- Show app version in header ("Multi Debrid Downloader vX.X.X")

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 02:12:06 +01:00
Sucukdeluxe
a0c58aad2c Release v1.4.36 with tolerant DLC padding
- Local DLC decryption no longer throws on invalid PKCS7 padding
- Instead tries to parse the decrypted data as-is (Node.js base64
  decoder is lenient with trailing garbage bytes)
- This fixes large DLCs that previously failed locally and then
  hit dcrypt.it's 413 size limit on both endpoints
- Empty decryption result returns [] instead of throwing

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 02:03:37 +01:00
Sucukdeluxe
48c89713ba Release v1.4.35 with 413 handling for both dcrypt endpoints
- Handle 413 from paste endpoint (not just upload)
- Show clear German error "DLC-Datei zu groß für dcrypt.it" when both
  endpoints reject the file due to size
- Add tests for dual-413 and upload-413+paste-500 scenarios

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 02:00:52 +01:00
Sucukdeluxe
778124312c Release v1.4.34 with DLC import package-name and 413 fixes
- Use DLC filename as package name in dcrypt fallback instead of
  inferring from individual URLs (fixes mangled package names)
- Add paste endpoint fallback when dcrypt upload returns 413
- Split decryptDlcViaDcrypt into tryDcryptUpload/tryDcryptPaste
- Add DCRYPT_PASTE_URL constant
- Expand container tests for 413 fallback and dual-failure scenarios

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 01:51:40 +01:00
Sucukdeluxe
edbfba6663 Release v1.4.33 with DLC import and stats hotfixes
Some checks are pending
Build and Release / build (push) Waiting to run
2026-03-01 01:39:51 +01:00
Sucukdeluxe
ff1036563a Release v1.4.32 with intensive renamer hardening
Some checks are pending
Build and Release / build (push) Waiting to run
2026-03-01 01:21:13 +01:00
Sucukdeluxe
6ac56c0a77 Release v1.4.31 with full bug-audit hardening
Some checks are pending
Build and Release / build (push) Waiting to run
2026-03-01 00:33:26 +01:00
Sucukdeluxe
6ae687f3ab Release v1.4.30 with startup and UI race-condition fixes
Some checks are pending
Build and Release / build (push) Waiting to run
2026-02-28 22:33:19 +01:00
Sucukdeluxe
eda9754d30 Release v1.4.29 with downloader and API safety hardening
Some checks are pending
Build and Release / build (push) Waiting to run
2026-02-28 21:31:42 +01:00
Sucukdeluxe
84d8f37ba6 Release v1.4.28 with expanded bug audit fixes
Some checks are pending
Build and Release / build (push) Waiting to run
2026-02-28 19:47:46 +01:00
Sucukdeluxe
05a0c4fd55 Fix PackageCard memo comparator to include callback props
Prevents stale closures when callback identities change but data props remain the same.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 18:09:51 +01:00
Sucukdeluxe
8700db4a37 Release v1.4.27 with bug audit hardening fixes 2026-02-28 14:12:16 +01:00
Sucukdeluxe
cbc423e4b7 Release v1.4.26 with remaining bug audit fixes
- AllDebrid: add HTML response detection to unrestrictLink
- Cleanup: skip symlinks/junctions in all directory traversals
- Blob URL: increase revoke delay from 0ms to 60s
- Extractor: per-package progress file to prevent collision
- ADD_CONTAINERS: reject path traversal and relative paths

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 13:09:59 +01:00
Sucukdeluxe
06a272ccbd Release v1.4.25 with hybrid extraction status fix
- Items extracted during hybrid extraction now show "Entpackt" instead of "Fertig"
- Only items belonging to the extracted archive set get status updates during hybrid extraction
- Final extraction preserves "Entpackt" status from prior hybrid passes

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 13:01:49 +01:00
Sucukdeluxe
c1e614650a Release v1.4.24 with UI improvements
- Fix drag overlay appearing during internal package reorder
- Rename "Paket abbrechen" to "Paket löschen"
- Make package deletion instant (remove performQuickAction delay)
- Add A-Z / Z-A sorting buttons for packages

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 12:41:39 +01:00
Sucukdeluxe
9598fca34e Release v1.4.23 with critical bug audit fixes
Some checks are pending
Build and Release / build (push) Waiting to run
2026-02-28 12:16:08 +01:00
Sucukdeluxe
f70237f13d Release v1.4.22 with incremental hybrid extraction (JDownloader-style)
Implements hybrid extraction: when a package has multiple episodes with
multi-part archives, completed archive sets are extracted immediately
while the rest of the package continues downloading. Uses the existing
hybridExtract setting (already in UI/types/storage).

Key changes:
- Export findArchiveCandidates/pathSetKey from extractor.ts
- Add onlyArchives/skipPostCleanup options to ExtractOptions
- Add findReadyArchiveSets to identify complete archive sets
- Add runHybridExtraction for incremental extraction passes
- Requeue logic in runPackagePostProcessing for new completions
- Resume state preserved across hybrid passes (no premature clear)
- Guard against extracting incomplete multi-part archives
- Correct abort/toggle handling during hybrid extraction
- Package toggle now also aborts active post-processing

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 07:25:18 +01:00
Sucukdeluxe
d7162592e0 Release v1.4.21 with download engine performance optimizations
- Cache itemCount as class property instead of O(n) Object.keys().length on every emit/persist/UI update
- Eliminate redundant iteration: hasQueuedItems now delegates to findNextQueuedItem
- Remove expensive cloneSession from getSnapshot (IPC serialization handles the copy)
- Increase speed events compaction threshold (50 → 200) to reduce array reallocations
- Time-based UI emit throttling instead of per-percent progress checks
- Avoid Array.from allocation in global stall watchdog
- Optimize markQueuedAsReconnectWait to iterate only run items instead of all items
- Cache pathKey computation in claimTargetPath loop (avoid path.resolve per iteration)
- Use packageOrder.length instead of Object.keys(packages).length in getStats

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 06:49:55 +01:00
Sucukdeluxe
1ba635a793 Fix auto-rename double-episode bug and add 62 rename tests
Bug fixed: When a folder already contained the same episode token as
the source file (e.g. Show.S01E05.720p-4sf + s01e05.mkv), the episode
was inserted a second time producing Show.S01E05.720p.S01E05-4sf.

Root cause: The replace produced an identical string, the equality check
fell through to the suffix-insert branch which added the token again.
Fix: Use regex.test() first, then always apply the replacement when
an episode pattern exists in the folder name.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 06:34:46 +01:00
Sucukdeluxe
b906d8a2bd Fix electron-builder: remove type:module, use vite.config.mts instead
The "type": "module" in package.json caused tsup to emit .cjs files instead
of .js, breaking the electron-builder entry point check. Using .mts extension
for vite config achieves ESM for Vite without affecting the rest of the package.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 06:28:45 +01:00