summaryrefslogtreecommitdiff
path: root/apps/web/src/subtitles/insert.ts
diff options
context:
space:
mode:
authorMaze Winther <mazewinther@gmail.com>2026-04-20 11:31:17 +0200
committerMaze Winther <mazewinther@gmail.com>2026-04-20 11:31:17 +0200
commit3e89d2998588f8e35c524e523ba2ee853f0f6475 (patch)
tree57221f96c1259b3b07e3ddf8c1adefc502b9d8eb /apps/web/src/subtitles/insert.ts
parent729d10592f4e802f91c555c309ff3ba4b119f843 (diff)
downloadopencut-3e89d2998588f8e35c524e523ba2ee853f0f6475.tar.gz
refactor: restructure files to their domains, new preview overlay system, and dep graph
Diffstat (limited to 'apps/web/src/subtitles/insert.ts')
-rw-r--r--apps/web/src/subtitles/insert.ts40
1 files changed, 40 insertions, 0 deletions
diff --git a/apps/web/src/subtitles/insert.ts b/apps/web/src/subtitles/insert.ts
new file mode 100644
index 00000000..50d6c40b
--- /dev/null
+++ b/apps/web/src/subtitles/insert.ts
@@ -0,0 +1,40 @@
+import type { EditorCore } from "@/core";
+import {
+ AddTrackCommand,
+ BatchCommand,
+ InsertElementCommand,
+} from "@/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;
+}