Compare commits
No commits in common. "a010b967b93fcb0f575b820241a61b2e2406c229" and "ba235b0b9384e233eeef9d5d9a630c3509695517" have entirely different histories.
a010b967b9
...
ba235b0b93
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "real-debrid-downloader",
|
"name": "real-debrid-downloader",
|
||||||
"version": "1.6.48",
|
"version": "1.6.47",
|
||||||
"description": "Desktop downloader",
|
"description": "Desktop downloader",
|
||||||
"main": "build/main/main/main.js",
|
"main": "build/main/main/main.js",
|
||||||
"author": "Sucukdeluxe",
|
"author": "Sucukdeluxe",
|
||||||
|
|||||||
@ -3815,26 +3815,18 @@ export class DownloadManager extends EventEmitter {
|
|||||||
this.packagePostProcessAbortControllers.set(packageId, abortController);
|
this.packagePostProcessAbortControllers.set(packageId, abortController);
|
||||||
|
|
||||||
const task = (async () => {
|
const task = (async () => {
|
||||||
const slotWaitStart = nowMs();
|
|
||||||
await this.acquirePostProcessSlot(packageId);
|
await this.acquirePostProcessSlot(packageId);
|
||||||
const slotWaitMs = nowMs() - slotWaitStart;
|
|
||||||
if (slotWaitMs > 100) {
|
|
||||||
logger.info(`Post-Process Slot erhalten nach ${(slotWaitMs / 1000).toFixed(1)}s Wartezeit: pkg=${packageId.slice(0, 8)}`);
|
|
||||||
}
|
|
||||||
try {
|
try {
|
||||||
let round = 0;
|
// Loop while requeue requests arrive — keep the slot so the same
|
||||||
|
// package can immediately re-run hybrid extraction without waiting
|
||||||
|
// behind other packages that may be queued for the slot.
|
||||||
do {
|
do {
|
||||||
round += 1;
|
|
||||||
const hadRequeue = this.hybridExtractRequeue.has(packageId);
|
|
||||||
this.hybridExtractRequeue.delete(packageId);
|
this.hybridExtractRequeue.delete(packageId);
|
||||||
const roundStart = nowMs();
|
|
||||||
try {
|
try {
|
||||||
await this.handlePackagePostProcessing(packageId, abortController.signal);
|
await this.handlePackagePostProcessing(packageId, abortController.signal);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.warn(`Post-Processing für Paket fehlgeschlagen: ${compactErrorText(error)}`);
|
logger.warn(`Post-Processing für Paket fehlgeschlagen: ${compactErrorText(error)}`);
|
||||||
}
|
}
|
||||||
const roundMs = nowMs() - roundStart;
|
|
||||||
logger.info(`Post-Process Runde ${round} fertig in ${(roundMs / 1000).toFixed(1)}s (requeue=${hadRequeue}, nextRequeue=${this.hybridExtractRequeue.has(packageId)}): pkg=${packageId.slice(0, 8)}`);
|
|
||||||
this.persistSoon();
|
this.persistSoon();
|
||||||
this.emitState();
|
this.emitState();
|
||||||
} while (this.hybridExtractRequeue.has(packageId));
|
} while (this.hybridExtractRequeue.has(packageId));
|
||||||
@ -6265,12 +6257,7 @@ export class DownloadManager extends EventEmitter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private async runHybridExtraction(packageId: string, pkg: PackageEntry, items: DownloadItem[], signal?: AbortSignal): Promise<number> {
|
private async runHybridExtraction(packageId: string, pkg: PackageEntry, items: DownloadItem[], signal?: AbortSignal): Promise<number> {
|
||||||
const findReadyStart = nowMs();
|
|
||||||
const readyArchives = await this.findReadyArchiveSets(pkg);
|
const readyArchives = await this.findReadyArchiveSets(pkg);
|
||||||
const findReadyMs = nowMs() - findReadyStart;
|
|
||||||
if (findReadyMs > 200) {
|
|
||||||
logger.info(`findReadyArchiveSets dauerte ${(findReadyMs / 1000).toFixed(1)}s: pkg=${pkg.name}, found=${readyArchives.size}`);
|
|
||||||
}
|
|
||||||
if (readyArchives.size === 0) {
|
if (readyArchives.size === 0) {
|
||||||
logger.info(`Hybrid-Extract: pkg=${pkg.name}, keine fertigen Archive-Sets`);
|
logger.info(`Hybrid-Extract: pkg=${pkg.name}, keine fertigen Archive-Sets`);
|
||||||
// Relabel completed items that are part of incomplete multi-part archives
|
// Relabel completed items that are part of incomplete multi-part archives
|
||||||
@ -6498,20 +6485,9 @@ export class DownloadManager extends EventEmitter {
|
|||||||
|
|
||||||
logger.info(`Hybrid-Extract Ende: pkg=${pkg.name}, extracted=${result.extracted}, failed=${result.failed}`);
|
logger.info(`Hybrid-Extract Ende: pkg=${pkg.name}, extracted=${result.extracted}, failed=${result.failed}`);
|
||||||
if (result.extracted > 0) {
|
if (result.extracted > 0) {
|
||||||
// Fire-and-forget: rename then collect MKVs in background so the
|
void this.autoRenameExtractedVideoFiles(pkg.extractDir, pkg).catch((err) =>
|
||||||
// slot is not blocked and the next archive set can start immediately.
|
logger.warn(`Hybrid Auto-Rename Fehler: pkg=${pkg.name}, reason=${compactErrorText(err)}`)
|
||||||
void (async () => {
|
);
|
||||||
try {
|
|
||||||
await this.autoRenameExtractedVideoFiles(pkg.extractDir, pkg);
|
|
||||||
} catch (err) {
|
|
||||||
logger.warn(`Hybrid Auto-Rename Fehler: pkg=${pkg.name}, reason=${compactErrorText(err)}`);
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
await this.collectMkvFilesToLibrary(packageId, pkg);
|
|
||||||
} catch (err) {
|
|
||||||
logger.warn(`Hybrid MKV-Collection Fehler: pkg=${pkg.name}, reason=${compactErrorText(err)}`);
|
|
||||||
}
|
|
||||||
})();
|
|
||||||
}
|
}
|
||||||
if (result.failed > 0) {
|
if (result.failed > 0) {
|
||||||
logger.warn(`Hybrid-Extract: ${result.failed} Archive fehlgeschlagen, wird beim finalen Durchlauf erneut versucht`);
|
logger.warn(`Hybrid-Extract: ${result.failed} Archive fehlgeschlagen, wird beim finalen Durchlauf erneut versucht`);
|
||||||
@ -6567,7 +6543,6 @@ export class DownloadManager extends EventEmitter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private async handlePackagePostProcessing(packageId: string, signal?: AbortSignal): Promise<void> {
|
private async handlePackagePostProcessing(packageId: string, signal?: AbortSignal): Promise<void> {
|
||||||
const handleStart = nowMs();
|
|
||||||
const pkg = this.session.packages[packageId];
|
const pkg = this.session.packages[packageId];
|
||||||
if (!pkg || pkg.cancelled) {
|
if (!pkg || pkg.cancelled) {
|
||||||
return;
|
return;
|
||||||
@ -6579,7 +6554,6 @@ export class DownloadManager extends EventEmitter {
|
|||||||
|
|
||||||
// Recover items whose file exists on disk but status was never set to "completed".
|
// Recover items whose file exists on disk but status was never set to "completed".
|
||||||
// Only recover items in idle states (queued/paused), never active ones (downloading/validating).
|
// Only recover items in idle states (queued/paused), never active ones (downloading/validating).
|
||||||
const recoveryStart = nowMs();
|
|
||||||
for (const item of items) {
|
for (const item of items) {
|
||||||
if (isFinishedStatus(item.status)) {
|
if (isFinishedStatus(item.status)) {
|
||||||
continue;
|
continue;
|
||||||
@ -6619,12 +6593,10 @@ export class DownloadManager extends EventEmitter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const recoveryMs = nowMs() - recoveryStart;
|
|
||||||
const success = items.filter((item) => item.status === "completed").length;
|
const success = items.filter((item) => item.status === "completed").length;
|
||||||
const failed = items.filter((item) => item.status === "failed").length;
|
const failed = items.filter((item) => item.status === "failed").length;
|
||||||
const cancelled = items.filter((item) => item.status === "cancelled").length;
|
const cancelled = items.filter((item) => item.status === "cancelled").length;
|
||||||
const setupMs = nowMs() - handleStart;
|
logger.info(`Post-Processing Start: pkg=${pkg.name}, success=${success}, failed=${failed}, cancelled=${cancelled}, autoExtract=${this.settings.autoExtract}`);
|
||||||
logger.info(`Post-Processing Start: pkg=${pkg.name}, success=${success}, failed=${failed}, cancelled=${cancelled}, autoExtract=${this.settings.autoExtract}, setupMs=${setupMs}, recoveryMs=${recoveryMs}`);
|
|
||||||
|
|
||||||
const allDone = success + failed + cancelled >= items.length;
|
const allDone = success + failed + cancelled >= items.length;
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user