From 6cf0272e7e27eecc79277457c2ddf1a63a2bf792 Mon Sep 17 00:00:00 2001 From: sudacode Date: Sun, 15 Mar 2026 13:01:50 -0700 Subject: [PATCH] feat: add unified parseSubtitleCues with format auto-detection --- src/core/services/subtitle-cue-parser.ts | 30 +++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/src/core/services/subtitle-cue-parser.ts b/src/core/services/subtitle-cue-parser.ts index 3f0cd4c..1b0d75c 100644 --- a/src/core/services/subtitle-cue-parser.ts +++ b/src/core/services/subtitle-cue-parser.ts @@ -122,7 +122,31 @@ export function parseAssCues(content: string): SubtitleCue[] { return cues; } -// Stub export — will be implemented in Task 6 -export function parseSubtitleCues(_content: string, _filename: string): SubtitleCue[] { - throw new Error('parseSubtitleCues not yet implemented'); +function detectSubtitleFormat(filename: string): 'srt' | 'vtt' | 'ass' | 'ssa' | null { + const ext = filename.split('.').pop()?.toLowerCase() ?? ''; + if (ext === 'srt') return 'srt'; + if (ext === 'vtt') return 'vtt'; + if (ext === 'ass' || ext === 'ssa') return 'ass'; + return null; +} + +export function parseSubtitleCues(content: string, filename: string): SubtitleCue[] { + const format = detectSubtitleFormat(filename); + let cues: SubtitleCue[]; + + switch (format) { + case 'srt': + case 'vtt': + cues = parseSrtCues(content); + break; + case 'ass': + case 'ssa': + cues = parseAssCues(content); + break; + default: + return []; + } + + cues.sort((a, b) => a.startTime - b.startTime); + return cues; }