fix(merge-split): fix premature 100% progress, add ffmpeg preflight, clean partial splits, use locale metaLabel

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
xRangerDE 2026-03-19 18:12:50 +01:00
parent 30c94b550e
commit 6c082a87ab
2 changed files with 11 additions and 2 deletions

View File

@ -3002,6 +3002,11 @@ async function processDownloadMergeGroup(
return { success: false, error: 'Streamlink fehlt.' };
}
const ffmpegReady = await ensureFfmpegInstalled();
if (!ffmpegReady) {
return { success: false, error: 'FFmpeg fehlt.' };
}
const streamer = mg.items[0].streamer.replace(/[^a-zA-Z0-9_-]/g, '');
const date = new Date(mg.items[0].date);
const dateStr = `${date.getDate().toString().padStart(2, '0')}.${(date.getMonth() + 1).toString().padStart(2, '0')}.${date.getFullYear()}`;
@ -3165,7 +3170,7 @@ async function processDownloadMergeGroup(
});
},
(currentPart, totalParts) => {
const overallProgress = 90 + (currentPart / totalParts) * 10; // split = 90-100%
const overallProgress = 90 + ((currentPart - 1) / totalParts) * 10; // split = 90-100%
onProgress({
id: item.id,
progress: overallProgress,
@ -3179,6 +3184,10 @@ async function processDownloadMergeGroup(
);
if (!splitResult.success) {
// Clean up any partial split files
for (const partFile of splitResult.files) {
try { if (fs.existsSync(partFile)) fs.unlinkSync(partFile); } catch { }
}
return { success: false, error: 'FFmpeg Split fehlgeschlagen.' };
}

View File

@ -219,7 +219,7 @@ function renderQueue(): void {
? '<svg class="merge-group-icon" viewBox="0 0 24 24" fill="currentColor" width="14" height="14"><path d="M17 20.41L18.41 19 15 15.59 13.59 17 17 20.41zM7.5 8H11v5.59L5.59 19 7 20.41l6-6V8h3.5L12 3.5 7.5 8z"/></svg> '
: '';
const mergeMetaExtra = isMergeGroup
? ` (${item.mergeGroup!.items.length} VODs)`
? ` (${UI_TEXT.mergeGroup.metaLabel.replace('{count}', String(item.mergeGroup!.items.length))})`
: '';
return `