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 | |
| 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')
5 files changed, 0 insertions, 235 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), - ], - }; -} diff --git a/apps/web/src/lib/commands/timeline/track/index.ts b/apps/web/src/lib/commands/timeline/track/index.ts deleted file mode 100644 index 9d4bd9c3..00000000 --- a/apps/web/src/lib/commands/timeline/track/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export { AddTrackCommand } from "./add-track"; -export { RemoveTrackCommand } from "./remove-track"; -export { ToggleTrackMuteCommand } from "./toggle-track-mute"; -export { ToggleTrackVisibilityCommand } from "./toggle-track-visibility"; diff --git a/apps/web/src/lib/commands/timeline/track/remove-track.ts b/apps/web/src/lib/commands/timeline/track/remove-track.ts deleted file mode 100644 index 5fcaa898..00000000 --- a/apps/web/src/lib/commands/timeline/track/remove-track.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Command, type CommandResult } from "@/lib/commands/base-command"; -import { EditorCore } from "@/core"; -import type { SceneTracks } from "@/lib/timeline"; - -export class RemoveTrackCommand extends Command { - private savedState: SceneTracks | null = null; - - constructor(private trackId: string) { - super(); - } - - execute(): CommandResult | undefined { - const editor = EditorCore.getInstance(); - this.savedState = editor.scenes.getActiveScene().tracks; - const updatedTracks: SceneTracks = { - ...this.savedState, - overlay: this.savedState.overlay.filter((track) => track.id !== this.trackId), - audio: this.savedState.audio.filter((track) => track.id !== this.trackId), - }; - editor.timeline.updateTracks(updatedTracks); - return undefined; - } - - undo(): void { - if (this.savedState) { - const editor = EditorCore.getInstance(); - editor.timeline.updateTracks(this.savedState); - } - } -} diff --git a/apps/web/src/lib/commands/timeline/track/toggle-track-mute.ts b/apps/web/src/lib/commands/timeline/track/toggle-track-mute.ts deleted file mode 100644 index 7ffe2fd7..00000000 --- a/apps/web/src/lib/commands/timeline/track/toggle-track-mute.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { Command, type CommandResult } from "@/lib/commands/base-command"; -import type { SceneTracks } from "@/lib/timeline"; -import { EditorCore } from "@/core"; -import { canTrackHaveAudio, findTrackInSceneTracks, updateTrackInSceneTracks } from "@/lib/timeline"; - -export class ToggleTrackMuteCommand extends Command { - private savedState: SceneTracks | null = null; - - constructor(private trackId: string) { - super(); - } - - execute(): CommandResult | undefined { - const editor = EditorCore.getInstance(); - this.savedState = editor.scenes.getActiveScene().tracks; - - const targetTrack = findTrackInSceneTracks({ - tracks: this.savedState, - trackId: this.trackId, - }); - if (!targetTrack) { - return; - } - - const updatedTracks = updateTrackInSceneTracks({ - tracks: this.savedState, - trackId: this.trackId, - update: (track) => - canTrackHaveAudio(track) ? { ...track, muted: !track.muted } : track, - }); - - editor.timeline.updateTracks(updatedTracks); - } - - undo(): void { - if (this.savedState) { - const editor = EditorCore.getInstance(); - editor.timeline.updateTracks(this.savedState); - } - } -} diff --git a/apps/web/src/lib/commands/timeline/track/toggle-track-visibility.ts b/apps/web/src/lib/commands/timeline/track/toggle-track-visibility.ts deleted file mode 100644 index 2292c83a..00000000 --- a/apps/web/src/lib/commands/timeline/track/toggle-track-visibility.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { Command, type CommandResult } from "@/lib/commands/base-command"; -import type { SceneTracks } from "@/lib/timeline"; -import { EditorCore } from "@/core"; -import { canTrackBeHidden, findTrackInSceneTracks, updateTrackInSceneTracks } from "@/lib/timeline"; - -export class ToggleTrackVisibilityCommand extends Command { - private savedState: SceneTracks | null = null; - - constructor(private trackId: string) { - super(); - } - - execute(): CommandResult | undefined { - const editor = EditorCore.getInstance(); - this.savedState = editor.scenes.getActiveScene().tracks; - - const targetTrack = findTrackInSceneTracks({ - tracks: this.savedState, - trackId: this.trackId, - }); - if (!targetTrack) { - return; - } - - const updatedTracks = updateTrackInSceneTracks({ - tracks: this.savedState, - trackId: this.trackId, - update: (track) => { - if (canTrackBeHidden(track)) { - return { ...track, hidden: !track.hidden }; - } - return track; - }, - }); - - editor.timeline.updateTracks(updatedTracks); - } - - undo(): void { - if (this.savedState) { - const editor = EditorCore.getInstance(); - editor.timeline.updateTracks(this.savedState); - } - } -} |
