Commit Graph

351 Commits

Author SHA1 Message Date
Sucukdeluxe
a6c65acfcb Release v1.5.36
Some checks are pending
Build and Release / build (push) Waiting to run
2026-03-02 23:50:31 +01:00
Sucukdeluxe
19342647e5 Fix download freeze spikes and unrestrict slot overshoot handling 2026-03-02 23:47:54 +01:00
Sucukdeluxe
7fe7d93e83 Fix dark text on package header progress bars (CSS specificity override)
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 23:35:22 +01:00
Sucukdeluxe
19769ea0bb Fix combined progress display during extraction, fix pause showing Warte auf Daten
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 23:32:30 +01:00
Sucukdeluxe
c9bace1e5a Fix dual-layer text: use clip-path inset instead of wrapper for pixel-perfect alignment
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 23:29:28 +01:00
Sucukdeluxe
2d1b6de51a Fix dual-layer text alignment: use clip wrapper for proper text centering
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 23:25:59 +01:00
Sucukdeluxe
c07c0fbdf7 Dual-layer text on progress bars: dark text on bar, light text on track (JDownloader style)
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 23:21:21 +01:00
Sucukdeluxe
578d050926 Merge Größe/Geladen into single progress bar column (JDownloader 2 style)
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 23:16:45 +01:00
Sucukdeluxe
cb66661d9b Redesign history tab with package-card style, collapsible details, right-align remove button
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 23:05:23 +01:00
Sucukdeluxe
e35fc1f31a v1.5.28: Visuelle Fortschrittsanzeigen (JDownloader 2 Style)
Some checks are pending
Build and Release / build (push) Waiting to run
2026-03-02 22:17:59 +01:00
Sucukdeluxe
0d6053fa76 Increase column widths for Fortschritt/Größe/Geladen spacing
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 21:51:43 +01:00
Sucukdeluxe
546d6af598 Fix Fortschritt/Geladen display: show progress for all items with totalBytes, hide 0 B
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 21:42:11 +01:00
Sucukdeluxe
2b12bd8c42 Add Fortschritt and Geladen columns to download grid
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 21:35:57 +01:00
Sucukdeluxe
05dc0ca1c6 Clear stale status texts on session load
Items with transient status texts like Provider-Cooldown, Warte auf
Daten, Verbindungsfehler are reset to "Wartet" when the app restarts,
so they don't show misleading status from a previous session.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 21:24:58 +01:00
Sucukdeluxe
5023a99f91 Fix circuit breaker triggering from parallel download failures
- Debounce: simultaneous failures within 2s count as 1 failure
  (prevents 8 parallel unrestrict failures from instant-triggering)
- Raise threshold from 8 to 20 consecutive failures before cooldown
- Escalation tiers: 20→30s, 35→60s, 50→120s, 80+→300s

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 21:21:47 +01:00
Sucukdeluxe
b2b62aeb52 Reduce stall timeout to 10s for faster retry
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 21:15:56 +01:00
Sucukdeluxe
ba7fe24a0a Fix pause bugs, faster stall retry
- Pause now aborts active extractions (previously extraction continued
  during pause, showing wrong status like Provider-Cooldown)
- Unpause clears provider circuit breaker for fresh start
- Post-processing status checks account for global pause state
- Reduce stall detection timeout from 30s to 15s for faster retry
- Reduce stall retry base delay from 500ms to 300ms

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 21:15:00 +01:00
Sucukdeluxe
55e5b0079a Fix pause showing Provider-Cooldown, lower extraction I/O priority
- Add pause check at top of processItem retry loop so items show
  "Pausiert" instead of "Provider-Cooldown" when paused
- Lower extraction process priority from BELOW_NORMAL to IDLE
  (IDLE_PRIORITY_CLASS on Windows also lowers I/O priority, reducing
  disk contention between extraction and active downloads)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 21:06:00 +01:00
Sucukdeluxe
e90e731eaa Fix app freezes and false provider cooldowns
- Make saveSettings async to stop blocking the event loop during downloads
- Add 120ms minimum gap for forced state emissions to prevent rapid-fire IPC
- Fix circuit breaker feedback loop: reset failure count after cooldown expires
- Add 120s time-decay for failure counter (transient bursts don't snowball)
- Raise circuit breaker threshold from 5 to 8 consecutive failures
- Stop counting network stalls as provider failures
- Items without a provider only check primary provider cooldown, not all

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 21:02:09 +01:00
Sucukdeluxe
0b73ea1386 Add "Jetzt entpacken" context menu, fix start freeze on large queues
Some checks are pending
Build and Release / build (push) Waiting to run
- New "Jetzt entpacken" right-click option: triggers extraction for
  completed packages regardless of paused/stopped state
- Fix 5-10s freeze when pressing Start after Pause: recoverRetryableItems
  was calling fs.stat on every item (474+); now only checks failed/completed
- Full IPC pipeline: extractNow in manager, controller, preload, renderer

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 20:40:49 +01:00
Sucukdeluxe
e013c63c59 Fix long path extraction using subst drive mapping instead of \?\ prefix
Some checks are pending
Build and Release / build (push) Waiting to run
WinRAR doesn't support \?\ prefix (interprets it as UNC network path).
Replace with subst drive mapping: maps targetDir to a short drive letter
(Z:, Y:, etc.) before extraction, then removes mapping after. This keeps
total paths under 260 chars even when archives contain deep internal
directory structures.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 20:32:23 +01:00
Sucukdeluxe
2ae22f942e Fix extraction failure on long paths (>260 chars) with \?\ prefix
Some checks are pending
Build and Release / build (push) Waiting to run
Add longPathForWindows() helper that prefixes extract target directories
with \?\ on Windows, bypassing the 260-char MAX_PATH limit. Applied to
both WinRAR/UnRAR and 7z arguments. Fixes "Die Syntax für den
Dateinamen, Verzeichnisnamen" errors when archive internal directories
create deeply nested output paths.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 20:24:55 +01:00
Sucukdeluxe
a22a90adf3 Add retry extraction context menu, increase error text limit
- Right-click packages with extraction errors shows "Extraktion
  wiederholen" option to manually retry
- Increase WinRAR error text from 240 to 500 chars for better
  diagnostics in logs

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 20:15:00 +01:00
Sucukdeluxe
ecf56cb977 Retry failed extractions on unpause, fix delete callback deps
- triggerPendingExtractions() now runs when unpausing, so packages
  with extraction errors are automatically retried
- executeDeleteSelection no longer depends on snapshot objects
  (prevents unnecessary re-renders with large queues)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 19:58:01 +01:00
Sucukdeluxe
430ec7352b Fix session download counter resetting when packages are removed
Session counter now uses sessionDownloadedBytes (in-memory counter)
instead of summing completed items. Removing packages after extraction
no longer resets the session total.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 19:33:58 +01:00
Sucukdeluxe
bc70ff94cc Persist totalDownloadedAllTime across restarts
- Save settings every 30s during active downloads (not just session)
- Force settings save on shutdown and run finish
- Preserve live totalDownloadedAllTime when user saves settings
  (app-controller's stale copy no longer overwrites the counter)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 19:29:32 +01:00
Sucukdeluxe
549328893e Separate pause/resume buttons, fix hybrid extraction during pause
- Pause button is now one-way (orange glow when paused, disabled when
  already paused). Start button resumes from pause.
- Fix hybrid extraction attempting incomplete multi-part archives when
  paused: disk-fallback now blocks any non-terminal item status, not
  just downloading/validating/integrity_check.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 19:22:58 +01:00
Sucukdeluxe
e6c17393fb Fix chart label clipping, persist speed history across tabs, fix pause button
- Dynamic left padding based on measured label width (no more cut-off numbers)
- Speed history ref lifted to App so chart data survives tab switches
- Pause button uses optimistic UI update for instant visual feedback

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 19:11:36 +01:00
Sucukdeluxe
ba673b9e53 Fix bandwidth chart growing infinitely
Use container.clientWidth/clientHeight instead of getBoundingClientRect
and stop overriding canvas style dimensions. CSS 100% handles display
sizing, canvas.width/height handles DPR-scaled render resolution.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 19:04:06 +01:00
Sucukdeluxe
3c510fc265 Add persistent all-time download counter, session vs total stats
- Track totalDownloadedAllTime in settings (persists across restarts)
- Track sessionDownloadedBytes for current app session
- Status bar shows both: Session + Gesamt
- Statistics section shows Heruntergeladen (Session) + (Gesamt)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 19:00:17 +01:00
Sucukdeluxe
4ea3a75dc0 Fix bandwidth chart not updating, fix pause button blocked by actionBusy
- Bandwidth chart drawChart effect now runs on every re-render instead
  of only when running/paused changes (chart was stuck showing empty)
- Pause button no longer wrapped in performQuickAction/actionBusy guard,
  so it works immediately even during ongoing operations

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 18:55:27 +01:00
Sucukdeluxe
670c2f1ff5 Unified package/total speed calculation, confirm dialog for context menu delete, show progress bar when collapsed
- Track packageId in speed events so package speed uses same 3-second
  window as global speed (fixes mismatch between package and status bar)
- Add packageSpeedBps to UiSnapshot, computed from speed events
- Context menu delete actions now respect confirmDeleteSelection setting
- Progress bar visible even when package is collapsed

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 18:45:40 +01:00
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