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>
This commit is contained in:
Sucukdeluxe 2026-03-03 20:31:24 +01:00
parent 31ce1e6618
commit 56a507b45d
5 changed files with 5 additions and 1 deletions

View File

@ -64,6 +64,7 @@ export function defaultSettings(): AppSettings {
reconnectWaitSeconds: 45, reconnectWaitSeconds: 45,
completedCleanupPolicy: "never", completedCleanupPolicy: "never",
maxParallel: 4, maxParallel: 4,
maxParallelExtract: 2,
retryLimit: 0, retryLimit: 0,
speedLimitEnabled: false, speedLimitEnabled: false,
speedLimitKbps: 0, speedLimitKbps: 0,

View File

@ -2997,7 +2997,7 @@ export class DownloadManager extends EventEmitter {
} }
private async acquirePostProcessSlot(): Promise<void> { private async acquirePostProcessSlot(): Promise<void> {
const maxConcurrent = 2; const maxConcurrent = this.settings.maxParallelExtract || 2;
if (this.packagePostProcessActive < maxConcurrent) { if (this.packagePostProcessActive < maxConcurrent) {
this.packagePostProcessActive += 1; this.packagePostProcessActive += 1;
return; return;

View File

@ -96,6 +96,7 @@ export function normalizeSettings(settings: AppSettings): AppSettings {
autoResumeOnStart: Boolean(settings.autoResumeOnStart), autoResumeOnStart: Boolean(settings.autoResumeOnStart),
autoReconnect: Boolean(settings.autoReconnect), autoReconnect: Boolean(settings.autoReconnect),
maxParallel: clampNumber(settings.maxParallel, defaults.maxParallel, 1, 50), maxParallel: clampNumber(settings.maxParallel, defaults.maxParallel, 1, 50),
maxParallelExtract: clampNumber(settings.maxParallelExtract, defaults.maxParallelExtract, 1, 8),
retryLimit: clampNumber(settings.retryLimit, defaults.retryLimit, 0, 99), retryLimit: clampNumber(settings.retryLimit, defaults.retryLimit, 0, 99),
reconnectWaitSeconds: clampNumber(settings.reconnectWaitSeconds, defaults.reconnectWaitSeconds, 10, 600), reconnectWaitSeconds: clampNumber(settings.reconnectWaitSeconds, defaults.reconnectWaitSeconds, 10, 600),
completedCleanupPolicy: settings.completedCleanupPolicy, completedCleanupPolicy: settings.completedCleanupPolicy,

View File

@ -2431,6 +2431,7 @@ export function App(): ReactElement {
<label className="toggle-line"><input type="checkbox" checked={settingsDraft.autoRename4sf4sj} onChange={(e) => setBool("autoRename4sf4sj", e.target.checked)} /> Auto-Rename (Beta)</label> <label className="toggle-line"><input type="checkbox" checked={settingsDraft.autoRename4sf4sj} onChange={(e) => setBool("autoRename4sf4sj", e.target.checked)} /> Auto-Rename (Beta)</label>
<label className="toggle-line"><input type="checkbox" checked={settingsDraft.createExtractSubfolder} onChange={(e) => setBool("createExtractSubfolder", e.target.checked)} /> Entpackte Dateien in Paket-Unterordner speichern</label> <label className="toggle-line"><input type="checkbox" checked={settingsDraft.createExtractSubfolder} onChange={(e) => setBool("createExtractSubfolder", e.target.checked)} /> Entpackte Dateien in Paket-Unterordner speichern</label>
<label className="toggle-line"><input type="checkbox" checked={settingsDraft.hybridExtract} onChange={(e) => setBool("hybridExtract", e.target.checked)} /> Hybrid-Extract</label> <label className="toggle-line"><input type="checkbox" checked={settingsDraft.hybridExtract} onChange={(e) => setBool("hybridExtract", e.target.checked)} /> Hybrid-Extract</label>
<div><label>Parallele Entpackungen</label><input type="number" min={1} max={8} value={settingsDraft.maxParallelExtract} onChange={(e) => setNum("maxParallelExtract", Math.max(1, Math.min(8, Number(e.target.value) || 2)))} /></div>
<label className="toggle-line"><input type="checkbox" checked={settingsDraft.collectMkvToLibrary} onChange={(e) => setBool("collectMkvToLibrary", e.target.checked)} /> MKV nach Paketabschluss in Sammelordner verschieben (flach)</label> <label className="toggle-line"><input type="checkbox" checked={settingsDraft.collectMkvToLibrary} onChange={(e) => setBool("collectMkvToLibrary", e.target.checked)} /> MKV nach Paketabschluss in Sammelordner verschieben (flach)</label>
<label>MKV-Sammelordner</label> <label>MKV-Sammelordner</label>
<div className="input-row"> <div className="input-row">

View File

@ -65,6 +65,7 @@ export interface AppSettings {
reconnectWaitSeconds: number; reconnectWaitSeconds: number;
completedCleanupPolicy: FinishedCleanupPolicy; completedCleanupPolicy: FinishedCleanupPolicy;
maxParallel: number; maxParallel: number;
maxParallelExtract: number;
retryLimit: number; retryLimit: number;
speedLimitEnabled: boolean; speedLimitEnabled: boolean;
speedLimitKbps: number; speedLimitKbps: number;