Compare commits
No commits in common. "01e0f27841cb2aa27d7d59f358186638ac7c71df" and "58e261230644472e90f645ff10356f4ba38dcf6e" have entirely different histories.
01e0f27841
...
58e2612306
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "real-debrid-downloader",
|
"name": "real-debrid-downloader",
|
||||||
"version": "1.7.69",
|
"version": "1.7.68",
|
||||||
"description": "Desktop downloader",
|
"description": "Desktop downloader",
|
||||||
"main": "build/main/main/main.js",
|
"main": "build/main/main/main.js",
|
||||||
"author": "Sucukdeluxe",
|
"author": "Sucukdeluxe",
|
||||||
|
|||||||
@ -2390,12 +2390,6 @@ export class DownloadManager extends EventEmitter {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
const hasExtractErrors = items.some((item) => isExtractErrorLabel(item.fullStatus || ""));
|
|
||||||
if (hasExtractErrors) {
|
|
||||||
logger.info(`Nachträgliches Cleanup übersprungen: pkg=${pkg.name}, reason=extract_error_present`);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
const hasExtractMarker = items.some((item) => isExtractedLabel(item.fullStatus));
|
const hasExtractMarker = items.some((item) => isExtractedLabel(item.fullStatus));
|
||||||
const extractDirIsUnique = (extractDirUsage.get(pathKey(pkg.extractDir)) || 0) === 1;
|
const extractDirIsUnique = (extractDirUsage.get(pathKey(pkg.extractDir)) || 0) === 1;
|
||||||
const hasExtractedOutput = extractDirIsUnique && await this.directoryHasAnyFiles(pkg.extractDir);
|
const hasExtractedOutput = extractDirIsUnique && await this.directoryHasAnyFiles(pkg.extractDir);
|
||||||
|
|||||||
@ -6358,100 +6358,6 @@ describe("download manager", () => {
|
|||||||
expect(snapshot.session.items[itemId]?.fullStatus).toBe("Entpackt (Quelle fehlt)");
|
expect(snapshot.session.items[itemId]?.fullStatus).toBe("Entpackt (Quelle fehlt)");
|
||||||
});
|
});
|
||||||
|
|
||||||
it("does not delete startup archives when any completed item has an extract error", async () => {
|
|
||||||
const root = fs.mkdtempSync(path.join(os.tmpdir(), "rd-dm-"));
|
|
||||||
tempDirs.push(root);
|
|
||||||
|
|
||||||
const outputDir = path.join(root, "downloads", "keep-failed-archive");
|
|
||||||
const extractDir = path.join(root, "extract", "keep-failed-archive");
|
|
||||||
fs.mkdirSync(outputDir, { recursive: true });
|
|
||||||
fs.mkdirSync(extractDir, { recursive: true });
|
|
||||||
fs.writeFileSync(path.join(extractDir, "episode1.mkv"), "ok", "utf8");
|
|
||||||
|
|
||||||
const okArchivePath = path.join(outputDir, "episode1.part01.rar");
|
|
||||||
const failedArchivePath = path.join(outputDir, "episode2.part01.rar");
|
|
||||||
fs.writeFileSync(okArchivePath, Buffer.from("ok-archive"));
|
|
||||||
fs.writeFileSync(failedArchivePath, Buffer.from("failed-archive"));
|
|
||||||
|
|
||||||
const session = emptySession();
|
|
||||||
const packageId = "keep-failed-archive-pkg";
|
|
||||||
const itemOkId = "keep-failed-archive-item-ok";
|
|
||||||
const itemFailId = "keep-failed-archive-item-fail";
|
|
||||||
const createdAt = Date.now() - 20_000;
|
|
||||||
session.packageOrder = [packageId];
|
|
||||||
session.packages[packageId] = {
|
|
||||||
id: packageId,
|
|
||||||
name: "keep-failed-archive",
|
|
||||||
outputDir,
|
|
||||||
extractDir,
|
|
||||||
status: "completed",
|
|
||||||
itemIds: [itemOkId, itemFailId],
|
|
||||||
cancelled: false,
|
|
||||||
enabled: true,
|
|
||||||
createdAt,
|
|
||||||
updatedAt: createdAt
|
|
||||||
};
|
|
||||||
session.items[itemOkId] = {
|
|
||||||
id: itemOkId,
|
|
||||||
packageId,
|
|
||||||
url: "https://dummy/keep-failed-archive-1",
|
|
||||||
provider: "realdebrid",
|
|
||||||
status: "completed",
|
|
||||||
retries: 0,
|
|
||||||
speedBps: 0,
|
|
||||||
downloadedBytes: 10,
|
|
||||||
totalBytes: 10,
|
|
||||||
progressPercent: 100,
|
|
||||||
fileName: "episode1.part01.rar",
|
|
||||||
targetPath: okArchivePath,
|
|
||||||
resumable: true,
|
|
||||||
attempts: 1,
|
|
||||||
lastError: "",
|
|
||||||
fullStatus: "Entpackt - Done",
|
|
||||||
createdAt,
|
|
||||||
updatedAt: createdAt
|
|
||||||
};
|
|
||||||
session.items[itemFailId] = {
|
|
||||||
id: itemFailId,
|
|
||||||
packageId,
|
|
||||||
url: "https://dummy/keep-failed-archive-2",
|
|
||||||
provider: "realdebrid",
|
|
||||||
status: "completed",
|
|
||||||
retries: 0,
|
|
||||||
speedBps: 0,
|
|
||||||
downloadedBytes: 14,
|
|
||||||
totalBytes: 14,
|
|
||||||
progressPercent: 100,
|
|
||||||
fileName: "episode2.part01.rar",
|
|
||||||
targetPath: failedArchivePath,
|
|
||||||
resumable: true,
|
|
||||||
attempts: 1,
|
|
||||||
lastError: "",
|
|
||||||
fullStatus: "Entpack-Fehler: Unexpected end of archive",
|
|
||||||
createdAt,
|
|
||||||
updatedAt: createdAt
|
|
||||||
};
|
|
||||||
|
|
||||||
new DownloadManager(
|
|
||||||
{
|
|
||||||
...defaultSettings(),
|
|
||||||
token: "rd-token",
|
|
||||||
outputDir: path.join(root, "downloads"),
|
|
||||||
extractDir: path.join(root, "extract"),
|
|
||||||
autoExtract: true,
|
|
||||||
enableIntegrityCheck: false,
|
|
||||||
cleanupMode: "delete"
|
|
||||||
},
|
|
||||||
session,
|
|
||||||
createStoragePaths(path.join(root, "state"))
|
|
||||||
);
|
|
||||||
|
|
||||||
await new Promise((resolve) => setTimeout(resolve, 600));
|
|
||||||
|
|
||||||
expect(fs.existsSync(okArchivePath)).toBe(true);
|
|
||||||
expect(fs.existsSync(failedArchivePath)).toBe(true);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("does not delete stale target file when stopping during unrestrict phase", async () => {
|
it("does not delete stale target file when stopping during unrestrict phase", async () => {
|
||||||
const root = fs.mkdtempSync(path.join(os.tmpdir(), "rd-dm-"));
|
const root = fs.mkdtempSync(path.join(os.tmpdir(), "rd-dm-"));
|
||||||
tempDirs.push(root);
|
tempDirs.push(root);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user