mirror of
https://github.com/OpenCut-app/OpenCut.git
synced 2026-07-13 21:52:53 +02:00
42 lines
1.1 KiB
TypeScript
42 lines
1.1 KiB
TypeScript
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);
|
|
}
|
|
}
|
|
}
|