diff options
Diffstat (limited to 'apps/web/src/lib/subtitles/insert.ts')
| -rw-r--r-- | apps/web/src/lib/subtitles/insert.ts | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/apps/web/src/lib/subtitles/insert.ts b/apps/web/src/lib/subtitles/insert.ts new file mode 100644 index 00000000..1bb04fc8 --- /dev/null +++ b/apps/web/src/lib/subtitles/insert.ts @@ -0,0 +1,40 @@ +import type { EditorCore } from "@/core"; +import { + AddTrackCommand, + BatchCommand, + InsertElementCommand, +} from "@/lib/commands"; +import { buildSubtitleTextElement } from "./build-subtitle-text-element"; +import type { SubtitleCue } from "./types"; + +export function insertCaptionChunksAsTextTrack({ + editor, + captions, +}: { + editor: EditorCore; + captions: SubtitleCue[]; +}): string | null { + if (captions.length === 0) { + return null; + } + + const addTrackCommand = new AddTrackCommand("text", 0); + const trackId = addTrackCommand.getTrackId(); + const canvasSize = editor.project.getActive().settings.canvasSize; + const insertCommands = captions.map( + (caption, index) => + new InsertElementCommand({ + placement: { mode: "explicit", trackId }, + element: buildSubtitleTextElement({ + index, + caption, + canvasSize, + }), + }), + ); + editor.command.execute({ + command: new BatchCommand([addTrackCommand, ...insertCommands]), + }); + + return trackId; +} |
