Commit Graph

369 Commits

Author SHA1 Message Date
Sucukdeluxe
0d1deadb6f Fix tab action button hover clipping into search bar
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 18:33:09 +01:00
Sucukdeluxe
f11190ee25 Fix Ctrl+Click selection, add Delete key with confirmation dialog
- Fix Ctrl+Click: mousedown no longer immediately adds item, preventing
  onClick from toggling it back off. Drag-select still works via mouseenter.
- Delete key removes selected items/packages with JDownloader-style
  confirmation dialog showing count and remaining items.
- "Nicht mehr anzeigen" checkbox disables future confirmations.
- New setting "Vor dem Löschen bestätigen" under Allgemein.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 18:31:45 +01:00
Sucukdeluxe
eb42fbabfd Fix update retry: reset abort controller on early return errors
Some checks are pending
Build and Release / build (push) Waiting to run
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 18:06:11 +01:00
Sucukdeluxe
84d5c0f13f JDownloader 2-style UI overhaul, multi-select, hoster display, settings sidebar
Some checks are pending
Build and Release / build (push) Waiting to run
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 17:56:54 +01:00
Sucukdeluxe
09bc354c18 Detect dead links as permanent errors, fix last-episode extraction race
Some checks are pending
Build and Release / build (push) Waiting to run
Dead link detection:
- Mega-Web: parse hoster error messages (hosterNotAvailable, etc.) from HTML
  and throw specific error instead of returning null
- MegaDebridClient: stop retrying on permanent hoster errors
- download-manager: isPermanentLinkError() immediately fails items with dead
  links instead of retrying forever

Extraction race condition:
- package_done cleanup policy checked if all items were "completed" (downloaded)
  but not if they were "extracted" — removing the package before the last
  episode could be extracted
- Both applyCompletedCleanupPolicy and applyPackageDoneCleanup now guard
  against premature removal when autoExtract is enabled

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 15:28:23 +01:00
Sucukdeluxe
3ed31b7994 Fix core download bugs: resume corruption, 416 handling, stream leak, drain timeout
Some checks are pending
Build and Release / build (push) Waiting to run
- HTTP 200 on resume: detect server ignoring Range header, write in truncate mode
  instead of appending (prevents doubled/corrupted files)
- HTTP 416 without Content-Range: assume complete if >1MB exists instead of
  deleting potentially multi-GB finished files
- Stream handle leak: explicit destroy() after finally to prevent fd exhaustion
- Drain timeout: don't abort controller on disk backpressure, let inner retry
  loop handle it instead of escalating to full stall pipeline

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 15:12:33 +01:00
Sucukdeluxe
550942aad7 Overhaul download retry pipeline: circuit breaker, escalating backoff, shelve logic
- Provider circuit breaker: track consecutive failures per provider with
  escalating cooldowns (30s/60s/120s/300s), auto-invalidate Mega-Debrid
  session on cooldown
- Escalating backoff: retry delays now scale up to 120s (was 30s max),
  unrestrict backoff exponential instead of linear 15s cap
- Shelve logic: after 15 consecutive failures, item pauses 5 min with
  counter halving for gradual recovery
- Periodic soft-reset: every 10 min, reset stale retry counters (>10 min
  queued) and old provider failures (>15 min), acts like mini-restart
- Mega-Debrid queue timeout: 90s wait limit in runExclusive to prevent
  cascade blocking behind stuck calls
- Provider-cooldown-aware retry delays: items wait for provider cooldown
  instead of retrying against broken service
- Fix: reconnect/package_toggle now persist retry counters (previously
  lost on interruption, defeating shelve logic)
- Mega-Debrid generate: tighter timeouts, progressive reload backoff,
  hoster retry limit (5x max)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 15:00:17 +01:00
Sucukdeluxe
a9c8ee2ff4 Sort active packages by completion percentage, not absolute count
Some checks are pending
Build and Release / build (push) Waiting to run
1/6 (16.7%) now ranks above 5/153 (3.3%) since it's further along.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 14:03:43 +01:00
Sucukdeluxe
10b4f18d33 Split progress bar: blue for download, green for extraction
Some checks are pending
Build and Release / build (push) Waiting to run
Left half (blue) shows download progress, right half (green) shows
extraction progress. When no extraction is active, full bar is blue.
Full bar = 50% blue (all downloaded) + 50% green (all extracted).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 12:57:11 +01:00
Sucukdeluxe
45b0d71dd0 Sort pinned packages by progress: most completed items first
Some checks are pending
Build and Release / build (push) Waiting to run
Active packages are now sorted by completed item count (descending),
then by downloaded bytes, so packages with real download progress
appear above packages still in link resolution phase.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 12:53:54 +01:00
Sucukdeluxe
e0eb3f0453 Pin actively downloading packages to top of list
Some checks are pending
Build and Release / build (push) Waiting to run
Packages with items in downloading/validating/extracting/integrity_check
state are always shown at the top regardless of sort order (A-Z or Z-A).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 12:50:14 +01:00
Sucukdeluxe
daf70211ac Add total download speed to stats bar
Some checks are pending
Build and Release / build (push) Waiting to run
Show current aggregate speed (all active downloads) in the stats bar
next to Pakete/Dateien/Gesamt. Only visible while session is running.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 12:47:11 +01:00
Sucukdeluxe
c28384e78d Detect hoster error-page downloads (<512 B) and trigger retry
Some checks are pending
Build and Release / build (push) Waiting to run
Some hosters return tiny error responses (e.g. 9 bytes) with HTTP 200.
- downloadToFile: detect files <512 B, log content, delete and throw for retry
- Post-download: catch <512 B files even when totalBytes is unknown
- Logs the error-page content for debugging

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 12:44:02 +01:00
Sucukdeluxe
122c797652 Fix 9-byte download regression: revert download.bin change, add size guards
Some checks are pending
Build and Release / build (push) Waiting to run
- Revert v1.4.79 download.bin filename logic that caused broken downloads
- Item-recovery: require file ≥10 KB (or ≥50% of expected size) instead of >0
- Post-download: reject files <1 KB when expected size >10 KB
- Disk-fallback: require parts ≥10 KB before considering archive ready

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 12:31:40 +01:00
Sucukdeluxe
14d5a3abb4 Fix zip volume cleanup regex and atomic progress file writes
Some checks are pending
Build and Release / build (push) Waiting to run
- Fix .z001/.z002 split zip volumes not deleted after extraction
  (regex matched only 2-digit, now matches 2-3 digit volumes)
- Make extract progress file writes atomic (write to .tmp then rename)
  to prevent corruption on crash during extraction

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 10:51:49 +01:00
Sucukdeluxe
ca05fa184d Fix download.bin filename flickering during unrestrict
Some checks are pending
Build and Release / build (push) Waiting to run
Keep existing good filename when debrid API returns "download.bin"
or opaque name. Only overwrite item.fileName if the resolved name
is actually better (not opaque, not download.bin).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 10:43:29 +01:00
Sucukdeluxe
13ff41aa95 Add item-recovery for stuck downloads with completed files on disk
Some checks are pending
Build and Release / build (push) Waiting to run
When post-processing runs, detect items in idle states (queued/paused)
whose target file already exists on disk with non-zero size, and
auto-recover them to "completed" status. This ensures allDone becomes
true, triggering final extraction with archive cleanup (delete mode).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 10:40:28 +01:00
Sucukdeluxe
d8a53dcea6 Fix hybrid extraction skipping archives when item status stuck
Some checks are pending
Build and Release / build (push) Waiting to run
Add disk-fallback to findReadyArchiveSets: when all archive parts
physically exist on disk with non-zero size and none are actively
downloading/validating, consider the archive ready for extraction.
This fixes episodes being skipped when a download item's status
was not updated to "completed" despite the file being fully written.

Also improve debug server: raise log limit to 10000 lines,
add grep filter, add /session endpoint for raw session data.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 10:36:08 +01:00
Sucukdeluxe
9f589439a1 Add debug HTTP server for remote monitoring
Some checks are pending
Build and Release / build (push) Waiting to run
Starts an HTTP server on port 9868 (configurable via debug_port.txt)
when debug_token.txt exists in the app runtime directory. Provides
/health, /log, /status, and /items endpoints for live monitoring.
Token-based auth required.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 22:58:54 +01:00
Sucukdeluxe
5bb984d410 Fix validating-stuck watchdog aborting before unrestrict timeout
Some checks are pending
Build and Release / build (push) Waiting to run
The validating-stuck timeout (45s) was shorter than the unrestrict
timeout (60s), causing items to be endlessly aborted and retried
before the debrid API call could complete. Now uses unrestrict
timeout + 15s buffer.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 22:51:17 +01:00
Sucukdeluxe
1825e8ba04 ️ perf: improve extraction status, stuck detection, and retry logic
Some checks are pending
Build and Release / build (push) Waiting to run
- Extraction status: "Entpackt - Done" / "Entpacken - Ausstehend"
- Per-item extraction progress (no cross-contamination)
- Validating-stuck watchdog: abort items stuck >45s in "Link wird umgewandelt"
- Global stall timeout reduced 90s → 60s, unrestrict timeout 120s → 60s
- Unrestrict retry: longer backoff (5/10/15s), reset partial downloads
- Stall retry: reset partial downloads for fresh link
- Mega-Web generate: max 30 polls (was 60), 45s overall timeout
- Mega-Web session refresh: 10min (was 20min)
- Comprehensive logging on all retry/failure paths

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 22:38:46 +01:00
Sucukdeluxe
0e55c28142 feat: replace default Electron icon with custom app icon
Some checks are pending
Build and Release / build (push) Waiting to run
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 22:18:34 +01:00
Sucukdeluxe
e485cf734b Async FS optimizations, exponential backoff, cleanup dedup and release v1.4.72
Some checks are pending
Build and Release / build (push) Waiting to run
- Convert all sync FS ops (existsSync, readdirSync, statSync, writeFileSync,
  rmSync, renameSync) to async equivalents across download-manager, extractor,
  cleanup, storage, and logger to prevent UI freezes
- Replace linear retry delays with exponential backoff + jitter to prevent
  retry storms with many parallel downloads
- Deduplicate resolveArchiveItems into single shared function
- Replace Array.shift() O(N) in bandwidth chart with slice-based trimming
- Make logger rotation async in the async flush path

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 21:53:07 +01:00
Sucukdeluxe
520ef91d2d Fix duplicate extraction and release v1.4.71
Some checks are pending
Build and Release / build (push) Waiting to run
- Don't clear extraction resume state during hybrid mode (skipPostCleanup)
- Mark ALL completed items as "Entpackt" after successful hybrid extraction
  to prevent full extraction from re-extracting already-extracted archives

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 21:09:53 +01:00
Sucukdeluxe
674cf101da Fix extraction status cross-contamination with filename pattern matching, release v1.4.70
Previous fix used pathKey-based maps which failed due to path resolution
mismatches on Windows. New approach matches items to archives using
filename regex patterns directly (e.g. prefix.part\d+.rar), which is
robust regardless of path casing/resolution.

Also marks items as "Entpackt" immediately when their archive finishes
instead of waiting for all archives to complete, so completed episodes
show correct status while later episodes are still extracting.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 20:57:56 +01:00
Sucukdeluxe
4371e53b86 Fix retry recovery, extraction status cross-contamination and UI freezes, release v1.4.69
- togglePause: clear retry delays and abort stuck tasks on unpause so
  Pause/Start actually recovers stuck downloads
- Fix retry display showing Number.MAX_SAFE_INTEGER instead of "inf"
  for unrestrict and generic error retries
- Fix extraction status applied to ALL items in package instead of only
  the items belonging to the currently extracting archive
- Make persistNow always async and item-completion stat async to reduce
  UI freezes

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 20:42:03 +01:00
Sucukdeluxe
bf2b685e83 Add session backup restore and release v1.4.68
Some checks are pending
Build and Release / build (push) Waiting to run
2026-03-01 20:13:16 +01:00
Sucukdeluxe
e7f0b1d1fd Fix start-conflict skip behavior and release v1.4.67
Some checks are pending
Build and Release / build (push) Waiting to run
2026-03-01 20:03:58 +01:00
Sucukdeluxe
647679f581 Fix Mega-Web unrestrict hangs and release v1.4.66
Some checks are pending
Build and Release / build (push) Waiting to run
2026-03-01 19:06:34 +01:00
Sucukdeluxe
237bf6731d Move Statistiken tab to the right of Einstellungen
Some checks are pending
Build and Release / build (push) Waiting to run
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 18:11:41 +01:00
Sucukdeluxe
25af89d7a0 Release v1.4.64 to test new buffer download method
Some checks are pending
Build and Release / build (push) Waiting to run
2026-03-01 17:23:52 +01:00
Sucukdeluxe
e384199c6e Replace streaming download with chunked buffer download to fix corruption
Some checks are pending
Build and Release / build (push) Waiting to run
- Replace Readable.fromWeb() + pipeline with ReadableStream.getReader() loop
- Collect chunks in memory, verify size, then write to disk in one shot
- Add Accept-Encoding: identity to prevent content encoding issues
- Eliminates stream conversion bugs that caused file corruption on some servers

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 17:20:02 +01:00
Sucukdeluxe
98425764d3 Release v1.4.62 to test updater fix
Some checks are pending
Build and Release / build (push) Waiting to run
2026-03-01 17:15:08 +01:00
Sucukdeluxe
8f186ad894 Fix updater SHA512 mismatch by patching latest.yml filenames and adding integrity retry
Some checks are pending
Build and Release / build (push) Waiting to run
- Patch latest.yml during release to use actual filenames (spaces) instead of electron-builder's dashed names
- Add download size validation before SHA512 check to catch incomplete downloads
- Retry download on integrity mismatch (up to 3 passes) with API refresh
- Re-resolve digest from latest.yml on each retry pass

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 17:04:12 +01:00
Sucukdeluxe
8b153bdabe Release v1.4.60 for update-path testing
Some checks are pending
Build and Release / build (push) Waiting to run
2026-03-01 16:51:16 +01:00
Sucukdeluxe
401ad3b9f9 Release v1.4.58 to replace stale updater assets
Some checks are pending
Build and Release / build (push) Waiting to run
2026-03-01 16:44:26 +01:00
Sucukdeluxe
5e1e62d5b6 Release v1.4.57 for updater validation
Some checks are pending
Build and Release / build (push) Waiting to run
2026-03-01 16:31:09 +01:00
Sucukdeluxe
afc70e6a10 Release v1.4.56 with updater 404 fallback fixes
Some checks are pending
Build and Release / build (push) Waiting to run
2026-03-01 16:19:39 +01:00
Sucukdeluxe
20c32d39c8 Harden updater candidate fallback on Codeberg 404s 2026-03-01 16:19:35 +01:00
Sucukdeluxe
73cd2ea6b9 Release v1.4.55 for updater path testing
Some checks are pending
Build and Release / build (push) Waiting to run
2026-03-01 16:06:53 +01:00
Sucukdeluxe
c5c862b516 Release v1.4.54 with bandwidth statistics tab
Some checks are pending
Build and Release / build (push) Waiting to run
2026-03-01 15:57:28 +01:00
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