summaryrefslogtreecommitdiff
path: root/apps/web/src/lib/subtitles/insert.ts
diff options
context:
space:
mode:
Diffstat (limited to 'apps/web/src/lib/subtitles/insert.ts')
-rw-r--r--apps/web/src/lib/subtitles/insert.ts40
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;
+}