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();