Commit Graph

484 Commits

Author SHA1 Message Date
Sucukdeluxe
6df0834b67 Add Mega-Debrid multi-account support with automatic fallback
Multiple Mega-Debrid accounts can now be configured as login:password
pairs (one per line). When an account hits Fair-Use limits or errors,
the next account is tried automatically.

- New parser module mega-debrid-accounts.ts (parse, ID generation,
  masking, serialization)
- Per-account daily limits, usage tracking, enable/disable
- Account rotation with per-mode cooldowns (API failures don't
  block Web attempts)
- Backward compatible: existing single megaLogin/megaPassword
  is auto-migrated to the new format
- UI: textarea for credentials, account list with masked logins

Follows the existing Debrid-Link multi-key pattern.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 20:12:51 +01:00
Sucukdeluxe
d91621bd6d Handle SxxSxx scene typo in episode token extraction
Scene releases occasionally use SxxSxx (e.g. s05s01) instead of
SxxExx — the second S is a typo for E. Add a fallback regex to
detect this pattern and correctly interpret it as S05E01.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 18:03:45 +01:00
Sucukdeluxe
79c178eb0d Skip sample files during auto-rename to prevent (2) MKV duplicates
Sample files like wayne-sample.mkv were renamed by auto-rename which
stripped the -sample suffix. After rename they were indistinguishable
from the main MKV, causing MKV collection to create (2) copies
(e.g. Messiah.Superstar.S01E01...WAYNE (2).mkv at 17 MB alongside
the real 470 MB episode).

Auto-rename now skips files with a "sample" token in their name,
matching the same detection used by MKV collection's sample filter.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 12:06:41 +01:00
Sucukdeluxe
87c097c822 Fix auto-rename race in hybrid extraction missing MKV files
During hybrid extraction, files can finish extracting between the
auto-rename scan and MKV-move, causing them to be moved to the MKV
library dir with their original scene names (e.g. awa-diethundermans03e21hd.mkv).

Add a post-MKV-move auto-rename pass on the MKV library directory to
catch these stragglers and rename them to the proper folder-based name.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 11:53:51 +01:00
Sucukdeluxe
7b764be769 Fix auto-rename episode range folders producing duplicate MKV names
Folder names with episode ranges like S01E01-E08 (common in season
packs from debrid servers) were returned unchanged as target name,
causing all episodes to get the same filename and producing (2)(3)(4)
suffixes during MKV collection.

- Detect episode ranges (S01E01-E08, S01E01-08) in folder names and
  replace them with the source file's specific episode token
- Extend applyEpisodeTokenToFolderName regex to match and replace
  full episode ranges instead of only single episode tokens

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 11:25:10 +01:00
Sucukdeluxe
78fef627bb Fix auto-rename episode pollution and deferred nested extraction abort
- Fix episode-token pollution: packageExtraCandidates included ALL item
  filenames, causing resolveEpisodeTokenForAutoRename to pick up episode
  tokens from unrelated files (e.g. S01E07 from 4sf-...-s01e07 applied
  to all hrs-...-101/102/103 files). This also caused (2)(3) MKV
  suffixes when multiple files were renamed to the same wrong episode.
  Now only the package name (outputDir) is used as extra candidate.
- Fix deferred nested extraction missing abort signal: the nested
  extractPackageArchives call in runDeferredPostExtraction did not
  receive deferredController.signal, making it unabortable on
  stop/cancel/restart.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 16:20:47 +01:00
Sucukdeluxe
30a5832498 Fix auto-rename mixed scene group suffixes 2026-03-11 20:05:12 +01:00
Sucukdeluxe
99455eca94 Fix auto-rename raw episode folder selection 2026-03-11 14:17:51 +01:00
Sucukdeluxe
d9170f4167 Refactor: Extractor in 18 Sektionen reorganisiert 2026-03-10 23:47:02 +01:00
Sucukdeluxe
1a0f49b29c Rebuild download completion verification 2026-03-10 20:22:19 +01:00
Sucukdeluxe
83640b8f1f Honor configured parallel extraction slots 2026-03-10 20:08:43 +01:00
Sucukdeluxe
fbae8a1496 Fix cleanup after partial extraction failures 2026-03-10 19:57:26 +01:00
Sucukdeluxe
113b34fadf Fix parallel extraction false positives 2026-03-10 19:34:42 +01:00
Sucukdeluxe
a054eface5 Improve extraction failure diagnostics 2026-03-10 19:14:21 +01:00
Sucukdeluxe
722fe071cc Harden Debrid-Link completion recovery 2026-03-10 18:27:26 +01:00
Sucukdeluxe
c1a4d8037f Fix Debrid-Link retry recovery 2026-03-10 18:20:19 +01:00
Sucukdeluxe
0a724aed71 Fix BSOD MEMORY_MANAGEMENT on low-RAM servers
- Dynamically compute JVM -Xmx based on system RAM instead of hardcoded 32g
- Reduce peak memory during session loading (inline JSON string, skip redundant clone)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 14:19:49 +01:00
Sucukdeluxe
6c7b1bb088 Keep failed packages out of package cleanup 2026-03-10 12:30:43 +01:00
Sucukdeluxe
17e947fc6b Harden type safety and recovery guards 2026-03-10 05:54:19 +01:00
Sucukdeluxe
17604910b5 Harden startup recovery and stats edge cases 2026-03-10 01:50:16 +01:00
Sucukdeluxe
6d7b3686dc Add AVI video-library support and startup recovery fixes 2026-03-10 00:43:51 +01:00
Sucukdeluxe
b41bb0aeb5 Fix deferred cleanup after MKV move 2026-03-09 23:48:28 +01:00
Sucukdeluxe
ecb5df0a31 Fix startup duplicate archive recovery 2026-03-09 20:38:23 +01:00
Sucukdeluxe
e6b8ea0abe Fix stale extract pending states 2026-03-09 20:14:35 +01:00
Sucukdeluxe
446c41a9b3 Fix extract error status bleed 2026-03-09 19:43:35 +01:00
Sucukdeluxe
51d4e2100f Rename backup menu actions 2026-03-09 18:16:30 +01:00
Sucukdeluxe
a70eacf9cd Harden deferred cleanup races 2026-03-09 17:23:28 +01:00
Sucukdeluxe
4374119f9e Fix session runtime reset 2026-03-09 06:06:39 +01:00
Sucukdeluxe
05df79d518 Refine statistics overview layout 2026-03-09 05:53:05 +01:00
Sucukdeluxe
40f097249c Fix manual extract relabeling 2026-03-09 05:38:56 +01:00
Sucukdeluxe
3de4ba3e90 Fix final post-process requeue stall 2026-03-09 05:33:09 +01:00
Sucukdeluxe
1afce943ae Fix history timing and retention controls 2026-03-09 05:16:41 +01:00
Sucukdeluxe
1f9a26e4b0 Add app runtime statistics 2026-03-09 04:59:00 +01:00
Sucukdeluxe
55e0ebd0f8 Add dedicated rename support logging 2026-03-09 04:48:58 +01:00
Sucukdeluxe
2066d0ad26 Keep manually collapsed packages closed 2026-03-09 04:30:08 +01:00
Sucukdeluxe
a3e3d6faf7 Throttle Mega-Debrid Web validation starts 2026-03-09 04:21:56 +01:00
Sucukdeluxe
85a9a2fa9f Add package and item link export 2026-03-09 04:11:18 +01:00
Sucukdeluxe
7027e11cbd Add support self-check diagnostics 2026-03-09 03:00:36 +01:00
Sucukdeluxe
fc4fafa0d6 Harden support logging and debug setup 2026-03-09 02:47:49 +01:00
Sucukdeluxe
f5f7f14104 Add support bundle and trace tooling 2026-03-09 02:15:32 +01:00
Sucukdeluxe
78fc80f04b Add support audit logging and AI debug manifest 2026-03-09 01:59:08 +01:00
Sucukdeluxe
47742ad7a4 Skip startup cleanup for extract errors 2026-03-09 01:43:43 +01:00
Sucukdeluxe
c898c6de65 Mirror extractor logs to item logs 2026-03-09 01:36:08 +01:00
Sucukdeluxe
56ce7c2aea Add remote host and item diagnostics 2026-03-09 01:21:11 +01:00
Sucukdeluxe
3320f38e47 Adjust unrestrict retry status wording 2026-03-09 00:53:23 +01:00
Sucukdeluxe
87212ddf76 Fix Real-Debrid resume size mismatch handling 2026-03-09 00:32:41 +01:00
Sucukdeluxe
e86c9576e7 Fix Real-Debrid web login session reuse 2026-03-09 00:03:05 +01:00
Sucukdeluxe
5ef9575b95 Improve rename and extractor diagnostics 2026-03-08 22:37:07 +01:00
Sucukdeluxe
bd3c14ad3c Use fixed AllDebrid slot countdowns 2026-03-08 22:15:52 +01:00
Sucukdeluxe
83c0c18dca Hide generic waiting states in queue 2026-03-08 22:02:27 +01:00
Sucukdeluxe
8b941a2777 Limit visible AllDebrid start countdowns 2026-03-08 21:47:11 +01:00
Sucukdeluxe
239154a2c8 Fix AllDebrid paced start scheduling 2026-03-08 21:39:00 +01:00
Sucukdeluxe
63f404285f Tighten idle queue and disk busy status display 2026-03-08 21:18:18 +01:00
Sucukdeluxe
066ef14806 Fix AllDebrid start reservation pacing 2026-03-08 21:08:13 +01:00
Sucukdeluxe
320518dc58 Fix AllDebrid Rapidgator parallel start limit 2026-03-08 21:00:55 +01:00
Sucukdeluxe
df8cbcf1c9 Fix Debrid-Link notDebrid handling 2026-03-08 20:39:00 +01:00
Sucukdeluxe
6a0079f9d0 Harden Debrid-Link cooldown and quota handling 2026-03-08 20:30:33 +01:00
Sucukdeluxe
78b06f2975 Rewrite Debrid-Link v2 unrestrict flow 2026-03-08 20:07:28 +01:00
Sucukdeluxe
8224910091 Harden Debrid-Link HTTP 416 recovery and rename coverage 2026-03-08 19:36:54 +01:00
Sucukdeluxe
c62e3ced0c Fix resume preflight recovery and rename regression coverage 2026-03-08 17:08:09 +01:00
Sucukdeluxe
2123a48bea Fix resume completion and rar fallback handling 2026-03-08 04:49:13 +01:00
Sucukdeluxe
2bd7a187f8 Fix resume retry fallback for truncated direct links 2026-03-08 03:57:37 +01:00
Sucukdeluxe
38c9058beb Fix session stats, extraction UX, and queue UI issues 2026-03-08 03:42:06 +01:00
Sucukdeluxe
ef7905eeb4 Fix legacy extractor path handling 2026-03-08 02:54:37 +01:00
Sucukdeluxe
935f05e214 Fix RAR native extractor fallback 2026-03-08 02:48:49 +01:00
Sucukdeluxe
53c411f635 Release v1.7.45 2026-03-08 02:36:11 +01:00
Sucukdeluxe
28113f57f3 Release v1.7.44 2026-03-08 02:28:51 +01:00
Sucukdeluxe
2a51c443b8 Release v1.7.43 2026-03-08 02:18:53 +01:00
Sucukdeluxe
e4b0f9001e Fix extraction retry loop on CRC/password failures 2026-03-08 02:02:39 +01:00
Sucukdeluxe
9eb28cee2e Add per-package detailed logs 2026-03-08 01:41:23 +01:00
Sucukdeluxe
6b22c93554 Fix auto-recovery re-download for encrypted RAR5 archives
- Always force re-download once when both JVM and legacy extractors fail
  (suggestRedownload=true), regardless of valid archive signature
- Add autoRecoveredForRedownload Set for loop protection (one attempt per archive)
- Clear loop protection on package reset (clearHybridArchiveState)
- Previous sibling-items check failed when other episodes were already
  cleaned up after hybrid extraction
- Lower mini-download retry threshold from 100KB to 5KB

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 01:03:37 +01:00
Sucukdeluxe
9e255d8110 Fix extraction failures on encrypted RAR5 archives with correct file content
- Retry extraction with 2.5s delay on CRC/password errors (Windows file handle race)
- Improve auto-recovery: force re-download when known password fails (content corruption)
- Expand auto-recovery to wrong_password category for encrypted RAR5
- Add fsync after download for pre-allocated files
- Fix permanent extraction failure loop for archives with valid headers but corrupt content

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 00:50:03 +01:00
Sucukdeluxe
27d75153b9 Boost hybrid extraction speed: G1GC, more threads, larger heap
- Switch JVM GC from SerialGC to G1GC with MaxGCPauseMillis=50
  for shorter pause times in long-lived daemon
- Increase JVM heap from 512m/8g to 1g/32g to reduce GC pressure
  on systems with plenty of RAM
- Raise hybrid thread cap from floor(cpuCount/2) capped 8
  to ceil(cpuCount*0.75) capped 12 — downloads are I/O-bound
  and don't need much CPU headroom
- Refresh daemon process priority before each request so hybrid
  extraction gets correct CPU priority even if daemon was started
  with a different priority level

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 00:02:59 +01:00
Sucukdeluxe
d2689aa425 Fix stall-timeout for providers without fileSize (Mega-Debrid Web)
- Early-exit now also uses raw Content-Length as fallback when
  totalBytes is unknown (provider returned fileSize=0)
- Stall handler checks if file is already complete on disk before
  deleting and retrying — prevents re-download loop for files that
  finished but server delayed closing the connection

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 23:46:16 +01:00
Sucukdeluxe
00d873445c Fix stall-timeout false positives on fully downloaded small archive parts
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 23:34:46 +01:00
Sucukdeluxe
307dcf0815 Fix stop→start race conditions causing potential hang
- Add scheduler generation counter to prevent stale scheduler from
  continuing after stop/start cycle
- Guard processItem stop-abort handler: skip status overwrite when a
  new start() has already re-activated the session
- Yield in start() after recoverRetryableItems to let pending abort
  handlers complete before evaluating item states
- Add test: rapid stop → disable provider → start must resolve

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 23:15:05 +01:00
Sucukdeluxe
291c80c7fc Fix auto-recovery re-download loop: check archive magic bytes before forcing re-download
Files with valid RAR/7z/ZIP signature are not corrupt (wrong password),
only files with invalid signature get force-redownloaded.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 22:33:10 +01:00
Sucukdeluxe
556cbd1d85 Fix auto-recovery for CRC-corrupt archives with correct file sizes
- Trust extractor CRC verdict over file size checks
- Re-queue incomplete downloads instead of just warning

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 22:26:49 +01:00
Sucukdeluxe
5c29355e9a Prevent repeated hybrid extraction retries 2026-03-07 22:13:51 +01:00
Sucukdeluxe
9bc9c984cb Fix hybrid auto recovery loops 2026-03-07 21:53:10 +01:00
Sucukdeluxe
fb036733e3 Fix auto-recovery for stale archive parts 2026-03-07 21:27:03 +01:00
Sucukdeluxe
16bfbfc106 Fix archive underflow and extraction readiness 2026-03-07 21:08:43 +01:00
Sucukdeluxe
b8bf9c491c Fallback to UnRAR when 7-Zip fails on encrypted RAR archives
If the primary extractor (7-Zip) fails with wrong_password/checksum
error on a .rar file, automatically try the alternative extractor
(UnRAR/WinRAR) which handles RAR format natively and more reliably.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 20:34:17 +01:00
Sucukdeluxe
167c28f945 Show base provider name in status text instead of key details
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 20:25:32 +01:00
Sucukdeluxe
934f24ae22 Add shift-click range selection for downloads list
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 20:18:27 +01:00
Sucukdeluxe
24e457d84d Revalidate completed items on startup, fix stale session data
Items incorrectly marked as "completed" by the old 50% recovery threshold
persist in the session file across updates. On startup, check all completed
items: if the file on disk is smaller than expected totalBytes, reset to
"queued" so it gets re-downloaded. Also reset items whose files are missing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 20:14:11 +01:00
Sucukdeluxe
e80948df54 Fix disk-fallback in hybrid extract allowing partial files
Two bugs in findReadyArchiveSets disk-fallback:

1. Failed items were explicitly excluded from the blocking check
   (status !== "failed"), so partial downloads with "failed" status
   would not block extraction. Now ANY non-completed item blocks.

2. The disk size check was only > 10 KB, allowing 627 MB partial
   files of 1001 MB archives to pass. Now requires the file to be
   within one allocation unit of the item's expected totalBytes.

Added findItemByDiskPath helper to look up the owning item for a
file on disk and get its expected size.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 20:10:04 +01:00
Sucukdeluxe
0f2823bdc2 Fix premature hybrid extraction of incomplete archive parts
Item-Recovery incorrectly marked partially downloaded files as "completed"
when the file size was >= 50% of expected size. A 627 MB partial download
of a 1001 MB file (62.7%) would pass the check and trigger hybrid
extraction on incomplete RAR archives.

Fix: require file to be within one allocation unit (4 KB) of the expected
size instead of 50%. Also add a pre-allocation guard: if the file appears
to be at the expected size but downloadedBytes is significantly behind
(< 95%), skip recovery (likely a pre-allocated sparse file from a crash).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 19:48:22 +01:00
Sucukdeluxe
927ff5c21a Auto-fix legacy (N) suffix filenames on startup
Detect items whose targetPath has a " (N)" suffix from the previous
duplicate filename bug and rename them back to the original filename.
This fixes extraction failures for RAR split archives that were
downloaded with (1) suffix before v1.7.19.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 19:36:30 +01:00
Sucukdeluxe
afbd425227 Fix Debrid-Link key selection: always use first available key
Replace shared currentKeyIndex round-robin with sequential scan from
first key. All parallel items now consistently use the same key (e.g.
Key 3) until it hits a quota/error, then all move to Key 4, etc.

Previously, currentKeyIndex was shared across parallel unrestrict calls,
causing items to scatter across keys (3, 5, 7) even when Key 3 still
had capacity.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 19:33:40 +01:00
Sucukdeluxe
0e0c211d35 Restore target path reservations on startup to prevent (1) duplicates
After restart, reservedTargetPaths (in-memory) was empty so claimTargetPath
could not distinguish between "file belongs to this item" and "file belongs
to another item". The naive fix (allow overwrite if unclaimed) would have
risked overwriting completed files from other items.

Proper fix: restore reservedTargetPaths from persisted session data on init.
This way each item's targetPath is correctly claimed, and claimTargetPath
can safely reuse the item's own file while protecting other items' files.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 19:26:29 +01:00
Sucukdeluxe
cb02dd3aac Fix duplicate (1) filenames after app restart with partial downloads
When the app restarts (or updates) while downloads are in progress,
partial files remain on disk but reservedTargetPaths (in-memory) is empty.
claimTargetPath treated the unclaimed-but-existing file as a conflict and
appended (1) to the filename, breaking RAR split archive extraction.

Fix: if a file exists on disk but no other item has reserved the path,
allow overwriting instead of creating a duplicate.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 19:20:26 +01:00
Sucukdeluxe
a0800045ec Fix Debrid-Link key rotation: skip broken keys immediately, add cooldown cache
- Add "notDebrid", "disabledServerHost", "notFree" as immediate-skip errors
  (no 3x retry per key, break to next key instantly like quota errors)
- Add per-key cooldown cache (2 min) so parallel items skip recently-failed keys
  instead of all starting at the same broken key
- Set cooldown on quota errors too, preventing repeated checks on exhausted keys

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 18:02:34 +01:00
Sucukdeluxe
e00c5b5344 Fix shelve mechanism: reset provider + circuit breaker, reduce pause to 90s
Shelve (15+ failures) now mimics manual stop/start behavior:
- Clears item.provider for fresh provider selection on retry
- Resets provider circuit breaker (providerFailures) for the old provider
- Reduces shelve duration from 5 min to 90s since the issue is stale
  provider state, not a timing problem (manual restart works instantly)

Also adds comprehensive session-load logging:
- Logs package/item count on every session file read
- Logs errors when session file parsing fails (was silent before)
- Safety net: if primary session is empty but backup has packages,
  automatically restores from backup
- Logs shutdown save with package/item counts
- Logs DownloadManager init state and cleanup policy

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 17:55:56 +01:00
Sucukdeluxe
ccf4dc2e08 Fix hosterNotAvailable skipping provider cooldown in inner catch
The inner unrestrict error handler still called recordProviderFailure()
for hosterNotAvailable errors, causing provider-level cooldown escalation
(up to 180s) even though the issue is hoster-side, not provider-side.
This made auto-retry stall while manual reset worked instantly.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 17:14:38 +01:00
Sucukdeluxe
35975d7333 Fix hosterNotAvailable retry stalling due to provider cooldown
hosterNotAvailable was added to isTemporaryUnrestrictError which
triggered aggressive provider-level cooldowns (up to 180s) that
blocked ALL items for the affected provider. Since items kept
failing, the cooldown never expired (15-min reset threshold never
reached), causing retries to effectively stall.

Fix: remove hosterNotAvailable from isTemporaryUnrestrictError.
It still gets normal unrestrict retry with item-level backoff
(5s -> 120s) via isUnrestrictFailure, but without provider-wide
cooldown blocking other items.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 17:09:29 +01:00
Sucukdeluxe
67fc3a8e1c Treat hosterNotAvailable as temporary error with retry
Move hosterNotAvailable from isPermanentLinkError to
isTemporaryUnrestrictError — hoster being unavailable is usually
transient (overload, maintenance) and should be retried with backoff
instead of immediately failing as "Link ungültig".

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 17:01:58 +01:00
Sucukdeluxe
8e4b29a155 Encrypted backup system + hide extracted items in package list
Backup redesign (JDownloader 2 style):
- AES-256-GCM encrypted .mdd format with fixed app key
- All credentials exported (no more ***-masking), works on any PC
- Includes settings, session AND history in backup
- Backward-compatible: auto-detects legacy JSON backups
- Normalize history entries on import
- Added debridLinkApiKeys, linkSnappy credentials to sensitive keys

Hide extracted items:
- New setting: hide completed/extracted items from package item list
- Items still count in progress stats (done/total), only hidden in UI
- Default: enabled
- Toggle in settings: "Entpackte Items in Paketliste ausblenden"

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 16:44:21 +01:00
Sucukdeluxe
0edd8f6be5 Redesign backup system: AES-256-GCM encrypted .mdd format
- Replace plaintext JSON export with encrypted binary format (JDownloader 2 style)
- Fixed app-internal key, works on any machine without password
- Export now includes ALL credentials (no more ***-masking), session AND history
- Add debridLinkApiKeys, linkSnappy credentials to sensitive keys list
- Backward-compatible import: auto-detects legacy JSON backups
- File extension changed from .json to .mdd
- MDD1 magic bytes + random IV + GCM auth tag for integrity

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 16:39:19 +01:00
Sucukdeluxe
5fbcdc1722 Cache flat-mode flag per package to skip redundant password cycles
Archives with absolute internal paths (e.g. scene groups storing full
Windows paths) fail all password attempts in normal mode at ~98%, then
succeed only after the flat-mode fallback kicks in. Previously every
archive in such a package wasted all password cycles before discovering
flat mode was needed again.

Now the first successful flat-mode extraction sets a package-level flag
so subsequent archives skip the normal loop entirely and go straight to
flat-mode extraction, saving ~4x password attempts per archive.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 15:11:37 +01:00