• v1.6.39 56ee681aec

    v1.6.39 Stable

    Administrator released this 2026-03-05 02:37:18 +01:00 | 629 commits to main since this release

    Fixes

    • Strip markdown from update changelog dialog: The confirm dialog is plain text and cannot render markdown. Headings (##), bold (**), italic (*), and code backticks are now stripped so the changelog displays cleanly.
    Downloads
  • v1.6.38 6db03f05a9

    v1.6.38 Stable

    Administrator released this 2026-03-05 02:32:59 +01:00 | 630 commits to main since this release

    Fixes

    • Fix DDownload downloads failing with connection errors: DDownload storage servers (dstorage.org) use SSL certificates that fail Node.js TLS verification, causing all downloads to fail with "Verbindungsfehler". Added skipTlsVerify flag so TLS certificate verification is temporarily disabled only for DDownload download connections.
    Downloads
  • v1.6.37 068da94e2a

    v1.6.37 Stable

    Administrator released this 2026-03-05 02:25:34 +01:00 | 631 commits to main since this release

    Fixes

    • DDownload auto-routing: DDownload URLs (ddownload.com / ddl.to) are now automatically routed to the DDownload provider before trying any debrid services. Previously, debrid providers like Mega-Debrid would attempt (and fail) to handle these URLs first.
    • Remove DDownload from provider dropdowns: DDownload is a direct file hoster, not a debrid service. It no longer appears in the primary/secondary/tertiary provider selection since it only handles its own URLs and is used automatically when configured.
    • Fix blank screen on upgrade (from v1.6.36): Guard against undefined ddownloadLogin/ddownloadPassword in renderer when upgrading from versions without DDownload support.
    Downloads
  • v1.6.36 4b824b2d9f

    v1.6.36 Stable

    Administrator released this 2026-03-05 02:17:41 +01:00 | 632 commits to main since this release

    Bug Fix

    • Fix blank screen crash when upgrading from a version without DDownload support
      • Guard against undefined ddownloadLogin/ddownloadPassword in the renderer when persisted settings lack the new fields
      • Applies || "" fallback in configuredProviders useMemo and input value bindings
    Downloads
  • v1.6.35 284c5e7aa6

    v1.6.35 Stable

    Administrator released this 2026-03-05 02:07:52 +01:00 | 633 commits to main since this release

    New Features

    DDownload Provider

    • Added DDownload (ddownload.com / ddl.to) as a new file hoster provider
    • Uses web login with email/password authentication (same approach as JDownloader)
    • Premium download support via XFS (XFileSharing) web flow
    • Automatic session management with cookie-based authentication
    • Supports both ddownload.com and ddl.to URL formats
    • Integrates into the existing provider fallback chain (primary/secondary/tertiary)
    • Available in the Accounts tab alongside existing providers

    Post-Processing Status Labels

    • Package status now shows detailed labels during post-processing phases
    • Displays "Entpacken..." during extraction
    • Displays "Renaming..." during auto-rename operations
    • Displays "Aufr�umen..." during archive cleanup
    • Displays "Verschiebe MKVs..." during MKV library collection
    • Labels appear after the [done/total] counter for clear progress indication
    • Labels are transient and automatically cleared on app restart

    Changelog in Update Dialog

    • Update confirmation dialog now shows release notes when available
    • Changelog is displayed between version info and the install prompt
    • Long changelogs are truncated to 500 characters for readability
    • Release notes are fetched from the Gitea API release body field
    Downloads
  • v1.6.34 479c7a3f3f

    v1.6.34 Stable

    Administrator released this 2026-03-05 01:38:51 +01:00 | 635 commits to main since this release

    v1.6.34

    Bug Fix

    • Fixed hybrid extraction status label: Completed items that are part of incomplete multi-part archives now correctly show "Entpacken - Warten auf Parts" instead of "Entpacken - Ausstehend" when other parts are still downloading. Previously, when hybrid extraction found no ready archive sets, items kept the misleading "Ausstehend" label from download completion.
    Downloads
  • v1.6.33 0404d870ad

    v1.6.33 Stable

    Administrator released this 2026-03-05 01:24:26 +01:00 | 636 commits to main since this release

    v1.6.33

    Test release to verify auto-updater migration from v1.6.32.

    Downloads
  • v1.6.32 93a53763e0

    v1.6.32 Stable

    Administrator released this 2026-03-05 01:21:40 +01:00 | 637 commits to main since this release

    v1.6.32

    Bug Fixes

    • Fixed auto-updater "GetUserByName" error: Users upgrading from older versions had the deprecated Sucukdeluxe/real-debrid-downloader repo stored in settings. The updater now auto-migrates known deprecated repo values to the correct Administrator/real-debrid-downloader default on settings load.

    Security

    • Backup export now masks sensitive credentials: The JSON backup export (exportBackup) now replaces API tokens (token, bestToken, allDebridToken) and the Mega-Debrid password (megaPassword) with ***<last 4 chars> instead of writing them in plain text. On import, masked values are detected and the current saved credentials are preserved.

    Cleanup

    • Removed 22 obsolete per-version release scripts (release_v1597.mjs through release_v1630.mjs)
    • Removed legacy release_codeberg.mjs and set_version_node.mjs helper scripts
    • Removed release:codeberg npm script from package.json
    • Cleaned up ~3,100 lines of dead code from the scripts/ directory
    Downloads
  • v1.6.31 ba938f64c5

    v1.6.31 Stable

    Administrator released this 2026-03-05 00:45:46 +01:00 | 639 commits to main since this release

    v1.6.31 — Massive Stability & Infrastructure Update

    This release consolidates 8 rounds of deep code review (108 bug fixes across the entire codebase) plus a full infrastructure migration to a self-hosted Gitea instance.

    Infrastructure

    • Migrated primary release and auto-update source from Codeberg to git.24-music.de (self-hosted Gitea)
    • Added multi-source update fallback chain: git.24-music.de → Codeberg → GitHub
    • New one-command release script: npm run release:gitea -- <version> "<notes>"
    • App renamed to "Multi Debrid Downloader"

    Download Engine (download-manager.ts)

    • Fixed session byte tracking corruption: resolveStartConflict overwrite path used raw .delete() instead of dropItemContribution(), permanently inflating totalDownloadedBytes and corrupting speed/ETA display
    • Fixed start() race condition: Set session.running = true before first await to prevent concurrent start() calls from bypassing the guard
    • Fixed item-recovery race: Added post-await re-check of item status and active tasks to prevent overwriting an active download with "completed"
    • Fixed done-phase marking failed archives as "Done": Both hybrid and final extraction done handlers now only clear tracking maps instead of blindly marking all remaining archives as completed
    • Fixed extraction triggered on disabled packages at startup: recoverPostProcessingOnStartup now respects pkg.enabled
    • Fixed stream.destroy() leak: Moved stream.destroy() into catch block before re-throwing to prevent file handle leaks on Windows
    • Fixed prepareForShutdown mislabeling: Pending/waiting extraction items no longer get incorrectly labeled as "abgebrochen"
    • Fixed stop() missing retryStateByItem.clear(): Stale retry counters from previous runs no longer accumulate
    • Fixed stop() pkg.enabled label: Items in disabled packages now show "Paket gestoppt" instead of "Wartet"
    • Fixed missing retryStateByItem.clear() in empty start() path: Prevents stale retry counters from causing premature item shelving
    • Fixed resolveStartConflict not resetting item.provider: Provider field no longer shows stale data after overwrite
    • Fixed normalizeSessionStatuses for disabled packages: Items in disabled packages now show "Paket gestoppt" after restart instead of "Wartet"
    • Fixed startPackages/startItems skipping triggerPendingExtractions: "Start Selected" on fully-downloaded-but-unextracted packages now correctly triggers extraction
    • Fixed missing releaseTargetPath in tiny-file detection: Reserved target path slot is now released when a tiny error-response file is detected and deleted
    • Fixed hybrid extraction abort not checking session.running: Abort path now uses session.running in status ternary, consistent with all other paths
    • Fixed timeout branch updatedAt on already-extracted items: updatedAt is now only stamped when fullStatus actually changes
    • Fixed hybrid extraction progress callback churning updatedAt: Added entry.fullStatus !== label guard to prevent unnecessary persistence pressure every 260ms
    • Fixed updatedAt set unconditionally in 3 extraction error/abort handlers: Now only set when fullStatus actually changes
    • Fixed reorderPackages O(n²): Changed valid.includes(id) to seen.has(id) for Set-based lookup
    • Fixed duplicate retryAfterByItem/retryStateByItem.clear() in clearAll(): Removed redundant double-clear
    • Fixed indentation inconsistency in start() method
    • Improved importBackup persistence protection: New blockAllPersistence flag blocks both persistSoon() and shutdown persistence to protect restored backups from being overwritten by in-flight async saves
    • Various extraction status label fixes, progress sorting, and status transition corrections across R1-R5

    Extractor (extractor.ts)

    • Fixed noextractor:skipped unhandled throw: Password-discovery serial pass now catches non-abort errors properly instead of propagating unhandled out of extractPackageArchives
    • Fixed nested archive namespace collision: Added nested: prefix to resume state keys for nested archives to prevent false resume matches with original archives
    • Fixed hasAnyEntries false positive on empty directories: Uses recursive file check (hasAnyFilesRecursive) instead of directory-entry check
    • Fixed SevenZipJBinding "registered codecs" error: JVM extractor now falls back to legacy UnRAR instead of throwing
    • Fixed parallel JVM extraction temp dir conflicts: Each JVM process gets an isolated temp directory to prevent native DLL file lock crashes

    Debrid Service (debrid.ts, realdebrid.ts)

    • Fixed sleepWithSignal race condition: Added signal.aborted check before entering Promise constructor to prevent missed abort signals
    • Fixed dead ternary branch in MegaDebridClient.unrestrictLink: Simplified unreachable web ? arm that always evaluated to false branch
    • Fixed HTML response detection: Properly handles cases where Real-Debrid returns HTML instead of JSON

    Storage (storage.ts)

    • Fixed orphaned temp files on non-EXDEV rename failure: Both writeSettingsPayload and writeSessionPayload now clean up temp files before re-throwing rename errors

    UI (App.tsx)

    • Fixed progress bar overflow: dlProgress, exProgress, and combinedProgress are now clamped to their respective maxima (50/100) to prevent CSS overflow when progress data briefly exceeds 100%
    • Fixed BandwidthChart resize handler: Previous pending requestAnimationFrame is now cancelled before scheduling a new one during resize bursts
    • Fixed extractHoster called twice per render: Item-row hoster column now computes the value once
    • Fixed delete confirm dialog negative totalRemaining: Uses Math.max(0, ...) to prevent display of negative item counts
    • Fixed dead CSS selector in Escape key handler: Removed non-existent .link-popup-overlay class reference
    • Fixed collapsedPackages missing from auto-expand useEffect deps: Auto-expand logic now correctly reacts to collapse state changes
    • Deduplicated Hoster/Account column IIFE calculations: Eliminated redundant computation in package header rendering

    Full list of reviewed files

    Every line of the following files was reviewed across 8 rounds with 10 parallel review agents each:

    • src/main/download-manager.ts (7,070 lines)
    • src/main/extractor.ts (2,332 lines)
    • src/main/debrid.ts (1,127 lines)
    • src/main/realdebrid.ts (202 lines)
    • src/main/storage.ts (728 lines)
    • src/main/app-controller.ts (366 lines)
    • src/main/main.ts (513 lines)
    • src/renderer/App.tsx (3,475 lines)
    Downloads
  • v1.6.30 fad0f1060b