Commit Graph

42 Commits

Author SHA1 Message Date
Sucukdeluxe
b9372f0ef0 Add ddownload to VALID_PRIMARY_PROVIDERS and VALID_FALLBACK_PROVIDERS
DDownload was missing from provider validation sets, preventing users
from configuring it as primary or fallback provider in settings.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 04:04:31 +01:00
Sucukdeluxe
a1c8f42435 Comprehensive bugfix release v1.6.45
Fix ~70 issues across the entire codebase including security fixes,
error handling improvements, test stabilization, and code quality.

- Fix TLS race condition with reference-counted acquire/release
- Bind debug server to 127.0.0.1 instead of 0.0.0.0
- Add overall timeout to MegaWebFallback
- Stream update installer to disk instead of RAM buffering
- Add path traversal protection in JVM extractor
- Cache DdownloadClient with credential-based invalidation
- Add .catch() to all fire-and-forget IPC calls
- Wrap app startup, clipboard, session-log in try/catch
- Add timeouts to container.ts fetch calls
- Fix variable shadowing, tsconfig path, line endings
- Stabilize tests with proper cleanup and timing tolerance
- Fix installer privileges, scripts, and afterPack null checks
- Delete obsolete _upload_release.mjs

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 03:53:28 +01:00
Sucukdeluxe
068da94e2a Auto-route DDownload URLs to DDownload provider before debrid chain
DDownload is a direct file hoster, not a debrid service. DDownload URLs
are now automatically handled by the DDownload provider when configured,
before trying any debrid providers. Remove DDownload from the
primary/secondary/tertiary provider dropdowns since it only handles its
own URLs and doesn't belong in the debrid fallback chain.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 02:25:34 +01:00
Sucukdeluxe
036cd3e066 Add DDownload provider, post-processing status labels, and update changelog
- DDownload (ddownload.com/ddl.to) as new hoster with web login
- Post-processing labels: Entpacken/Renaming/Aufräumen/MKVs
- Release notes shown in update confirmation dialog

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 02:05:16 +01:00
Sucukdeluxe
c20d743286 Fix updater GetUserByName error, mask backup credentials, clean up old scripts
- Migrate deprecated updateRepo value (Sucukdeluxe/) to new default (Administrator/)
- Mask sensitive fields (tokens, passwords) in backup export with ***
- Preserve current credentials when importing backup with masked values
- Remove 22 obsolete release_v*.mjs scripts, release_codeberg.mjs, set_version_node.mjs
- Remove release:codeberg script from package.json

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 01:20:57 +01:00
Sucukdeluxe
74920e2e2f Round 8 bug fixes (20 fixes)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 22:14:03 +01:00
Sucukdeluxe
1d0ee31001 Release v1.6.29
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 21:11:32 +01:00
Sucukdeluxe
940346e2f4 Release v1.6.25
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 20:01:01 +01:00
Sucukdeluxe
26b2ef0abb Release v1.6.23
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 19:26:01 +01:00
Sucukdeluxe
1ed13f7f88 Release v1.6.21
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 18:57:18 +01:00
Sucukdeluxe
b8bbc9c32f Release v1.6.19
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 17:45:30 +01:00
Sucukdeluxe
10bae4f98b Release v1.6.17
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 17:04:32 +01:00
Sucukdeluxe
17844d4c28 Release v1.6.1
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 05:27:10 +01:00
Sucukdeluxe
4fcbd5c4f7 Release v1.5.94
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 03:51:10 +01:00
Sucukdeluxe
bb8fd0646a Release v1.5.93
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 03:35:11 +01:00
Sucukdeluxe
7af9d67770 Release v1.5.87
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 02:38:05 +01:00
Sucukdeluxe
56a507b45d Add configurable parallel extraction count (1-8, default 2)
- New setting maxParallelExtract in AppSettings
- UI input in Entpacken tab: "Parallele Entpackungen"
- Replaces hardcoded maxConcurrent=2 in acquirePostProcessSlot

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 20:31:24 +01:00
Sucukdeluxe
19342647e5 Fix download freeze spikes and unrestrict slot overshoot handling 2026-03-02 23:47:54 +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
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
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
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
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
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
3f17cc8cb4 Add configurable auto-retry limit with optional infinite retries 2026-03-01 04:18:41 +01:00
Sucukdeluxe
809aec69c2 Add optional flat MKV library collection per package 2026-03-01 03:23: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
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
8700db4a37 Release v1.4.27 with bug audit hardening fixes 2026-02-28 14:12:16 +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
63fd402083 Release v1.4.20 with comprehensive audit fixes (140 issues) and expanded test coverage
- Speed calculation: raised minimum elapsed floor to 0.5s preventing unrealistic spikes
- Reconnect: exponential backoff with consecutive counter, clock regression protection
- Download engine: retry byte tracking (itemContributedBytes), mkdir before createWriteStream, content-length validation
- Fire-and-forget promises: all void promises now have .catch() error handlers
- Session recovery: normalize stale active statuses to queued on crash recovery, clear speedBps
- Storage: config backup (.bak) before overwrite, EXDEV cross-device rename fallback with type guard
- IPC security: input validation on all string/array IPC handlers, CSP headers in production
- Main process: clipboard memory limit (50KB), installer timing increased to 800ms
- Debrid: attribute-order-independent meta tag regex for Rapidgator filename extraction
- Constants: named constants for magic numbers (MAX_MANIFEST_FILE_BYTES, MAX_LINK_ARTIFACT_BYTES, etc.)
- Extractor/integrity: use shared constants, document password visibility and TOCTOU limitations
- Tests: 103 tests total (55 new), covering utils, storage, integrity, cleanup, extractor, debrid, update

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 06:23:24 +01:00
Sucukdeluxe
556f0672dc Release v1.4.19 with 4SF/4SJ auto-rename support
Some checks are pending
Build and Release / build (push) Waiting to run
2026-02-28 05:50:14 +01:00
Sucukdeluxe
b971a79047 Release v1.4.18 with performance optimization and deep bug fixes
- Optimize session cloning: replace JSON.parse/stringify with shallow spread (~10x faster for large queues)
- Convert blocking fs.existsSync/statSync to async on download hot path
- Fix EXDEV cross-device rename in sync saveSettings/saveSession (network drive support)
- Fix double-delete bug in applyCompletedCleanupPolicy (package_done + immediate)
- Fix dangling runPackageIds/runCompletedPackages in removePackageFromSession
- Fix AdmZip partial extraction: use overwrite mode for external fallback
- Add null byte stripping to sanitizeFilename (path traversal prevention)
- Add 5MB size limit for hash manifest files (OOM prevention)
- Add 256KB size limit for link artifact file content check
- Deduplicate cleanup code via centralized removePackageFromSession

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 05:30:28 +01:00
Sucukdeluxe
d4dd266f6b Release v1.4.17 with security fixes, stability hardening and retry improvements
- Fix ZIP path traversal vulnerability (reject entries escaping target dir)
- Add single instance lock (prevent data corruption from multiple instances)
- Add unhandled exception/rejection handlers (prevent silent crashes)
- Fix mainWindow reference cleanup on close
- Add second-instance handler to focus existing window
- Fix claimTargetPath infinite loop (add 10k iteration bound)
- Add duplicate startItem guard (prevent concurrent downloads of same item)
- Clone session in getSnapshot to prevent live-reference mutation bugs
- Clear stateEmitTimer on clearAll to prevent dangling timer emissions
- Add extraction timeout safety (4h deadline with logging)
- Add dedicated unrestrict retry system with longer backoff for Mega-Debrid errors
- Add log rotation (10MB max, keeps one .old backup)
- Fix writeExtractResumeState missing mkdir (prevents crash on deleted dirs)
- Fix saveSessionAsync EXDEV cross-device rename with copy fallback

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 05:04:21 +01:00
Sucukdeluxe
147269849d Release v1.4.15 with deep performance optimizations and crash prevention
- Convert session persistence to async during downloads (prevents 50-200ms UI freezes)
- Avoid unnecessary Buffer.from() copy on Uint8Array chunks (zero-copy when possible)
- Cache effective speed limit for 2s (eliminates Date object creation per chunk)
- Replace O(n) speed event shift() with pointer-based pruning
- Throttle speed event pruning to every 1.5s instead of per chunk
- Optimize refreshPackageStatus to single-loop counting (was 4 separate filter passes)
- Fix global stall watchdog race condition (re-check abort state before aborting)
- Add coalescing for async session saves (prevents write storms)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 21:35:05 +01:00
Sucukdeluxe
3b9c4a4e88 Release v1.4.7 with ENOENT extraction recovery and lag optimizations
Some checks are pending
Build and Release / build (push) Waiting to run
2026-02-27 19:12:40 +01:00
Sucukdeluxe
4fc0ce26f3 Ship UI productivity upgrades and extraction progress flow in v1.4.0 2026-02-27 16:23:19 +01:00
Sucukdeluxe
447dd7feff Implement full UX upgrade and Rapidgator filename hardening in v1.3.2 2026-02-27 14:20:54 +01:00
Sucukdeluxe
3525ecb569 Recover stalled extraction and add optional fallback providers
Some checks are pending
Build and Release / build (push) Waiting to run
2026-02-27 12:16:30 +01:00
Sucukdeluxe
6d777e2a56 Harden resume flows and ship v1.1.23 stability fixes
Some checks are pending
Build and Release / build (push) Waiting to run
2026-02-27 11:04:52 +01:00
Sucukdeluxe
cbc1ffa18b Add multi-provider fallback with AllDebrid and fix packaged UI path
Some checks are pending
Build and Release / build (push) Waiting to run
2026-02-27 04:02:31 +01:00
Sucukdeluxe
b96ed1eb7a Migrate app to Node Electron with modern React UI
Some checks are pending
Build and Release / build (push) Waiting to run
2026-02-27 03:25:56 +01:00