From fdd8020e3988607f3e0e57ba02fdaa10a2cf1f6f Mon Sep 17 00:00:00 2001 From: FromTheLOLAshes <153381408+FromTheLOLAshes@users.noreply.github.com> Date: Thu, 23 May 2024 15:30:53 -0400 Subject: [PATCH] Auto trim clips if too long to fit into the remaining space in the film (#422) Co-authored-by: Christopher Oliphant --- .../PageEnigma/comps/Timeline/TrackClips.tsx | 4 +-- app/pages/PageEnigma/signals/audioGroup.ts | 10 +++----- .../signals/characterGroups/characterGroup.ts | 20 ++++----------- .../PageEnigma/signals/utils/publishClip.ts | 25 +++++++++++++++++++ 4 files changed, 36 insertions(+), 23 deletions(-) create mode 100644 app/pages/PageEnigma/signals/utils/publishClip.ts diff --git a/app/pages/PageEnigma/comps/Timeline/TrackClips.tsx b/app/pages/PageEnigma/comps/Timeline/TrackClips.tsx index 85f6bd32ef..e19a53545b 100644 --- a/app/pages/PageEnigma/comps/Timeline/TrackClips.tsx +++ b/app/pages/PageEnigma/comps/Timeline/TrackClips.tsx @@ -120,8 +120,8 @@ export const TrackClips = ({ id, clips, updateClip, group, type }: Props) => { (event.clientX - position.x) / 4 / scale.value, ); - if (clipOffset + (dragItem.value!.length ?? 0) > filmLength.value * 60) { - DndAsset.notDropText = "Item is longer than the film length"; + if (clipOffset + 30 > filmLength.value * 60) { + DndAsset.notDropText = "Not enough room to hold item"; canDrop.value = false; return; } diff --git a/app/pages/PageEnigma/signals/audioGroup.ts b/app/pages/PageEnigma/signals/audioGroup.ts index f51c31feb7..96f47ffd2e 100644 --- a/app/pages/PageEnigma/signals/audioGroup.ts +++ b/app/pages/PageEnigma/signals/audioGroup.ts @@ -6,6 +6,8 @@ import { toEngineActions } from "~/pages/PageEnigma/Queue/toEngineActions"; import * as uuid from "uuid"; import { signal } from "@preact/signals-core"; import { ClipUI } from "~/pages/PageEnigma/datastructures/clips/clip_ui"; +import { filmLength } from "~/pages/PageEnigma/signals/sizing"; +import { publishClip } from "~/pages/PageEnigma/signals/utils/publishClip"; export const audioGroup = signal({ id: "AG-1", @@ -69,17 +71,13 @@ export function addGlobalAudio({ clip_uuid, } as Clip; + publishClip(newClip, dragItem, offset); + const oldAudioGroup = audioGroup.value; audioGroup.value = { ...oldAudioGroup, clips: [...oldAudioGroup.clips, newClip], }; - - Queue.publish({ - queueName: QueueNames.TO_ENGINE, - action: toEngineActions.ADD_CLIP, - data: newClip, - }); } export function toggleAudioMute() { diff --git a/app/pages/PageEnigma/signals/characterGroups/characterGroup.ts b/app/pages/PageEnigma/signals/characterGroups/characterGroup.ts index 1ce7a13263..9d0e8b7a6a 100644 --- a/app/pages/PageEnigma/signals/characterGroups/characterGroup.ts +++ b/app/pages/PageEnigma/signals/characterGroups/characterGroup.ts @@ -13,6 +13,8 @@ import { toEngineActions } from "~/pages/PageEnigma/Queue/toEngineActions"; import * as uuid from "uuid"; import { ToastTypes } from "~/enums"; import { addToast } from "~/signals"; +import { filmLength } from "~/pages/PageEnigma/signals"; +import { publishClip } from "~/pages/PageEnigma/signals/utils/publishClip"; export const characterGroup = signal({ id: "CG1", @@ -49,11 +51,7 @@ export function addCharacterAnimation({ return { ...character }; } - Queue.publish({ - queueName: QueueNames.TO_ENGINE, - action: toEngineActions.ADD_CLIP, - data: newClip, - }); + publishClip(newClip, dragItem, offset); return { ...character, @@ -95,11 +93,7 @@ export function addCharacterExpression({ return { ...character }; } - Queue.publish({ - queueName: QueueNames.TO_ENGINE, - action: toEngineActions.ADD_CLIP, - data: newClip, - }); + publishClip(newClip, dragItem, offset); return { ...character, @@ -141,11 +135,7 @@ export function addCharacterAudio({ return { ...character }; } - Queue.publish({ - queueName: QueueNames.TO_ENGINE, - action: toEngineActions.ADD_CLIP, - data: newClip, - }); + publishClip(newClip, dragItem, offset); return { ...character, diff --git a/app/pages/PageEnigma/signals/utils/publishClip.ts b/app/pages/PageEnigma/signals/utils/publishClip.ts new file mode 100644 index 0000000000..02fd78a1be --- /dev/null +++ b/app/pages/PageEnigma/signals/utils/publishClip.ts @@ -0,0 +1,25 @@ +import Queue from "~/pages/PageEnigma/Queue/Queue"; +import { QueueNames } from "~/pages/PageEnigma/Queue/QueueNames"; +import { toEngineActions } from "~/pages/PageEnigma/Queue/toEngineActions"; +import { filmLength } from "~/pages/PageEnigma/signals"; +import { MediaItem, Clip } from "~/pages/PageEnigma/models"; + +export function publishClip( + newClip: Clip, + dragItem: MediaItem, + offset: number, +) { + Queue.publish({ + queueName: QueueNames.TO_ENGINE, + action: toEngineActions.ADD_CLIP, + data: newClip, + }); + if (offset + (dragItem.length ?? 0) > filmLength.value * 60) { + newClip.length = filmLength.value * 60 - offset; + Queue.publish({ + queueName: QueueNames.TO_ENGINE, + action: toEngineActions.UPDATE_CLIP, + data: newClip, + }); + } +}