From 409c976df0682c97d2faf3341e5bdfab57b1a025 Mon Sep 17 00:00:00 2001 From: xRangerDE Date: Thu, 19 Mar 2026 17:53:55 +0100 Subject: [PATCH] feat(merge-split): integrate merge-group pipeline into processQueue and cleanup handlers Co-Authored-By: Claude Opus 4.6 (1M context) --- src/main.ts | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/src/main.ts b/src/main.ts index f485b81..1531636 100644 --- a/src/main.ts +++ b/src/main.ts @@ -3258,9 +3258,13 @@ async function processQueue(): Promise { for (let attempt = 1; attempt <= maxAttempts; attempt++) { appendDebugLog('queue-item-attempt', { itemId: item.id, attempt, max: maxAttempts }); - const result = await downloadVOD(item, (progress) => { - mainWindow?.webContents.send('download-progress', progress); - }); + const result = item.mergeGroup + ? await processDownloadMergeGroup(item, (progress) => { + mainWindow?.webContents.send('download-progress', progress); + }) + : await downloadVOD(item, (progress) => { + mainWindow?.webContents.send('download-progress', progress); + }); if (result.success) { finalResult = result; @@ -3784,6 +3788,18 @@ ipcMain.handle('remove-from-queue', (_, id: string) => { appendDebugLog('queue-item-removed-active-cancelled', { id }); } + // Clean up merge-group temp files (must run for any merge group, not just active) + const removedItem = downloadQueue.find(item => item.id === id); + if (removedItem?.mergeGroup) { + const mg = removedItem.mergeGroup; + for (const key of Object.keys(mg.downloadedFiles)) { + try { if (fs.existsSync(mg.downloadedFiles[Number(key)])) fs.unlinkSync(mg.downloadedFiles[Number(key)]); } catch { } + } + if (mg.mergedFile) { + try { if (fs.existsSync(mg.mergedFile)) fs.unlinkSync(mg.mergedFile); } catch { } + } + } + downloadQueue = downloadQueue.filter(item => item.id !== id); saveQueue(downloadQueue); emitQueueUpdated();