import { Command, type CommandResult } from "@/commands/base-command"; import { EditorCore } from "@/core"; import type { SceneTracks } from "@/timeline"; import { canTrackHaveAudio, updateTrackInSceneTracks } from "@/timeline"; import { clampDb } from "@/timeline/audio-state"; export class UpdateTrackVolumeCommand extends Command { private savedState: SceneTracks | null = null; constructor({ trackId, volume }: { trackId: string; volume: number }) { super(); this.trackId = trackId; this.volume = clampDb(volume); } private trackId: string; private volume: number; execute(): CommandResult | undefined { const editor = EditorCore.getInstance(); this.savedState = editor.scenes.getActiveScene().tracks; const updatedTracks = updateTrackInSceneTracks({ tracks: this.savedState, trackId: this.trackId, update: (track) => canTrackHaveAudio(track) ? { ...track, volume: this.volume } : track, }); editor.timeline.updateTracks(updatedTracks); return undefined; } undo(): void { if (this.savedState) { const editor = EditorCore.getInstance(); editor.timeline.updateTracks(this.savedState); } } }