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:
parent
30c94b550e
commit
6c082a87ab
11
src/main.ts
11
src/main.ts
@ -3002,6 +3002,11 @@ async function processDownloadMergeGroup(
|
|||||||
return { success: false, error: 'Streamlink fehlt.' };
|
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 streamer = mg.items[0].streamer.replace(/[^a-zA-Z0-9_-]/g, '');
|
||||||
const date = new Date(mg.items[0].date);
|
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()}`;
|
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) => {
|
(currentPart, totalParts) => {
|
||||||
const overallProgress = 90 + (currentPart / totalParts) * 10; // split = 90-100%
|
const overallProgress = 90 + ((currentPart - 1) / totalParts) * 10; // split = 90-100%
|
||||||
onProgress({
|
onProgress({
|
||||||
id: item.id,
|
id: item.id,
|
||||||
progress: overallProgress,
|
progress: overallProgress,
|
||||||
@ -3179,6 +3184,10 @@ async function processDownloadMergeGroup(
|
|||||||
);
|
);
|
||||||
|
|
||||||
if (!splitResult.success) {
|
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.' };
|
return { success: false, error: 'FFmpeg Split fehlgeschlagen.' };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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> '
|
? '<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
|
const mergeMetaExtra = isMergeGroup
|
||||||
? ` (${item.mergeGroup!.items.length} VODs)`
|
? ` (${UI_TEXT.mergeGroup.metaLabel.replace('{count}', String(item.mergeGroup!.items.length))})`
|
||||||
: '';
|
: '';
|
||||||
|
|
||||||
return `
|
return `
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user