From 11da8b6e9a05894f27850b7803a9f3e741eba67e Mon Sep 17 00:00:00 2001 From: Sucukdeluxe Date: Thu, 5 Mar 2026 14:31:35 +0100 Subject: [PATCH] Release v1.6.59 --- README.md | 8 +++++++- package.json | 2 +- src/main/extractor.ts | 44 +++++++++++++++++++++++++++++++++++-------- 3 files changed, 44 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 4a5492e..573bfdc 100644 --- a/README.md +++ b/README.md @@ -160,7 +160,7 @@ The app stores runtime files in Electron's `userData` directory, including: ## Troubleshooting - Download does not start: verify token and selected provider in Settings. -- Extraction fails: check archive passwords, JVM runtime (`resources/extractor-jvm`), or force legacy mode with `RD_EXTRACT_BACKEND=legacy`. +- Extraction fails: check archive passwords and native extractor installation (7-Zip/WinRAR). Optional JVM extractor can be forced with `RD_EXTRACT_BACKEND=jvm`. - Very slow downloads: check active speed limit and bandwidth schedules. - Unexpected interruptions: enable reconnect and fallback providers. - Stalled downloads: the app auto-detects stalls within 10 seconds and retries automatically. @@ -169,6 +169,12 @@ The app stores runtime files in Electron's `userData` directory, including: Release history is available on [git.24-music.de Releases](https://git.24-music.de/Administrator/real-debrid-downloader/releases). +### v1.6.59 (2026-03-05) + +- Switched default extraction backend to native tools (`legacy`) for more stable archive-to-archive flow. +- Prioritized 7-Zip as primary native extractor, with WinRAR/UnRAR as fallback. +- JVM extractor remains available as opt-in via `RD_EXTRACT_BACKEND=jvm`. + ### v1.6.58 (2026-03-05) - Fixed extraction progress oscillation (`1% -> 100% -> 1%` loops) during password retries. diff --git a/package.json b/package.json index 26f2b01..7aef8a6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "real-debrid-downloader", - "version": "1.6.58", + "version": "1.6.59", "description": "Desktop downloader", "main": "build/main/main/main.js", "author": "Sucukdeluxe", diff --git a/src/main/extractor.ts b/src/main/extractor.ts index 93aff87..b29a665 100644 --- a/src/main/extractor.ts +++ b/src/main/extractor.ts @@ -10,7 +10,7 @@ import { removeDownloadLinkArtifacts, removeSampleArtifacts } from "./cleanup"; import crypto from "node:crypto"; const DEFAULT_ARCHIVE_PASSWORDS = ["", "serienfans.org", "serienjunkies.org"]; -const NO_EXTRACTOR_MESSAGE = "WinRAR/UnRAR nicht gefunden. Bitte WinRAR installieren."; +const NO_EXTRACTOR_MESSAGE = "Kein nativer Entpacker gefunden (7-Zip/WinRAR). Bitte 7-Zip oder WinRAR installieren."; const NO_JVM_EXTRACTOR_MESSAGE = "7-Zip-JBinding Runtime nicht gefunden. Bitte resources/extractor-jvm prüfen."; const JVM_EXTRACTOR_MAIN_CLASS = "com.sucukdeluxe.extractor.JBindExtractorMain"; const JVM_EXTRACTOR_CLASSES_SUBDIR = "classes"; @@ -549,23 +549,51 @@ function prioritizePassword(passwords: string[], successful: string): string[] { return next; } -function winRarCandidates(): string[] { +function nativeExtractorCandidates(): string[] { const programFiles = process.env.ProgramFiles || "C:\\Program Files"; const programFilesX86 = process.env["ProgramFiles(x86)"] || "C:\\Program Files (x86)"; const localAppData = process.env.LOCALAPPDATA || ""; - const installed = [ + const sevenZipInstalled = [ + process.env.RD_7Z_BIN || "", + path.join(programFiles, "7-Zip", "7z.exe"), + path.join(programFilesX86, "7-Zip", "7z.exe") + ]; + if (localAppData) { + sevenZipInstalled.push(path.join(localAppData, "Programs", "7-Zip", "7z.exe")); + } + + const winRarInstalled = [ path.join(programFiles, "WinRAR", "UnRAR.exe"), path.join(programFilesX86, "WinRAR", "UnRAR.exe") ]; if (localAppData) { - installed.push(path.join(localAppData, "Programs", "WinRAR", "UnRAR.exe")); + winRarInstalled.push(path.join(localAppData, "Programs", "WinRAR", "UnRAR.exe")); } const ordered = resolvedExtractorCommand - ? [resolvedExtractorCommand, ...installed, "UnRAR.exe", "unrar"] - : [...installed, "UnRAR.exe", "unrar"]; + ? [ + resolvedExtractorCommand, + ...sevenZipInstalled, + "7z.exe", + "7z", + "7za.exe", + "7za", + ...winRarInstalled, + "UnRAR.exe", + "unrar" + ] + : [ + ...sevenZipInstalled, + "7z.exe", + "7z", + "7za.exe", + "7za", + ...winRarInstalled, + "UnRAR.exe", + "unrar" + ]; return Array.from(new Set(ordered.filter(Boolean))); } @@ -860,7 +888,7 @@ type JvmExtractResult = { }; function extractorBackendMode(): ExtractBackendMode { - const defaultMode = process.env.VITEST ? "legacy" : "jvm"; + const defaultMode = "legacy"; const raw = String(process.env.RD_EXTRACT_BACKEND || defaultMode).trim().toLowerCase(); if (raw === "legacy") { return "legacy"; @@ -1574,7 +1602,7 @@ async function resolveExtractorCommandInternal(): Promise { resolveFailureAt = 0; } - const candidates = winRarCandidates(); + const candidates = nativeExtractorCandidates(); for (const command of candidates) { if (isAbsoluteCommand(command) && !fs.existsSync(command)) { continue;