diff options
| author | Maze Winther <mazewinther@gmail.com> | 2026-04-20 11:31:17 +0200 |
|---|---|---|
| committer | Maze Winther <mazewinther@gmail.com> | 2026-04-20 11:31:17 +0200 |
| commit | 3e89d2998588f8e35c524e523ba2ee853f0f6475 (patch) | |
| tree | 57221f96c1259b3b07e3ddf8c1adefc502b9d8eb /apps/web/src/lib/commands/timeline/track/add-track.ts | |
| parent | 729d10592f4e802f91c555c309ff3ba4b119f843 (diff) | |
| download | opencut-3e89d2998588f8e35c524e523ba2ee853f0f6475.tar.gz | |
refactor: restructure files to their domains, new preview overlay system, and dep graph
Diffstat (limited to 'apps/web/src/lib/commands/timeline/track/add-track.ts')
| -rw-r--r-- | apps/web/src/lib/commands/timeline/track/add-track.ts | 115 |
1 files changed, 0 insertions, 115 deletions
diff --git a/apps/web/src/lib/commands/timeline/track/add-track.ts b/apps/web/src/lib/commands/timeline/track/add-track.ts deleted file mode 100644 index a577c693..00000000 --- a/apps/web/src/lib/commands/timeline/track/add-track.ts +++ /dev/null @@ -1,115 +0,0 @@ -import { Command, type CommandResult } from "@/lib/commands/base-command"; -import type { SceneTracks, TrackType } from "@/lib/timeline"; -import { generateUUID } from "@/utils/id"; -import { EditorCore } from "@/core"; -import { - buildEmptyTrack, - getDefaultInsertIndexForTrack, -} from "@/lib/timeline/placement"; - -export class AddTrackCommand extends Command { - private trackId: string; - private savedState: SceneTracks | null = null; - - constructor( - private type: TrackType, - private index?: number, - ) { - super(); - this.trackId = generateUUID(); - } - - execute(): CommandResult | undefined { - const editor = EditorCore.getInstance(); - this.savedState = editor.scenes.getActiveScene().tracks; - - const insertIndex = - this.index ?? - getDefaultInsertIndexForTrack({ - tracks: this.savedState, - trackType: this.type, - }); - - const updatedTracks = - this.type === "audio" - ? buildAudioTrackState({ - tracks: this.savedState, - insertIndex, - trackId: this.trackId, - }) - : buildOverlayTrackState({ - tracks: this.savedState, - insertIndex, - trackId: this.trackId, - trackType: this.type, - }); - - editor.timeline.updateTracks(updatedTracks); - return undefined; - } - - undo(): void { - if (this.savedState) { - const editor = EditorCore.getInstance(); - editor.timeline.updateTracks(this.savedState); - } - } - - getTrackId(): string { - return this.trackId; - } -} - -function buildAudioTrackState({ - tracks, - insertIndex, - trackId, -}: { - tracks: SceneTracks; - insertIndex: number; - trackId: string; -}): SceneTracks { - const audioInsertIndex = Math.max(0, insertIndex - tracks.overlay.length - 1); - const newTrack = buildEmptyTrack({ - id: trackId, - type: "audio", - }); - return { - ...tracks, - audio: [ - ...tracks.audio.slice(0, audioInsertIndex), - newTrack, - ...tracks.audio.slice(audioInsertIndex), - ], - }; -} - -function buildOverlayTrackState({ - tracks, - insertIndex, - trackId, - trackType, -}: { - tracks: SceneTracks; - insertIndex: number; - trackId: string; - trackType: Exclude<TrackType, "audio">; -}): SceneTracks { - const overlayInsertIndex = Math.min(insertIndex, tracks.overlay.length); - const newTrack = - trackType === "video" - ? buildEmptyTrack({ id: trackId, type: "video" }) - : trackType === "text" - ? buildEmptyTrack({ id: trackId, type: "text" }) - : trackType === "graphic" - ? buildEmptyTrack({ id: trackId, type: "graphic" }) - : buildEmptyTrack({ id: trackId, type: "effect" }); - return { - ...tracks, - overlay: [ - ...tracks.overlay.slice(0, overlayInsertIndex), - newTrack, - ...tracks.overlay.slice(overlayInsertIndex), - ], - }; -} |
