From f06a930fc1920b7eb396202d429c237ff30c6b5e Mon Sep 17 00:00:00 2001 From: Maze Winther Date: Tue, 7 Apr 2026 15:51:53 +0200 Subject: fix: convert media asset duration to ticks on insert --- apps/web/src/hooks/timeline/use-timeline-drag-drop.ts | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'apps/web/src/hooks/timeline') diff --git a/apps/web/src/hooks/timeline/use-timeline-drag-drop.ts b/apps/web/src/hooks/timeline/use-timeline-drag-drop.ts index 009f0ff6..868c638d 100644 --- a/apps/web/src/hooks/timeline/use-timeline-drag-drop.ts +++ b/apps/web/src/hooks/timeline/use-timeline-drag-drop.ts @@ -4,6 +4,7 @@ import { processMediaAssets } from "@/lib/media/processing"; import { toast } from "sonner"; import { showMediaUploadToast } from "@/lib/media/upload-toast"; import { DEFAULT_NEW_ELEMENT_DURATION } from "@/lib/timeline/creation"; +import { TICKS_PER_SECOND } from "@/lib/wasm"; import { BASE_TIMELINE_PIXELS_PER_SECOND } from "@/lib/timeline/scale"; import { roundToFrame } from "opencut-wasm"; import { @@ -87,7 +88,9 @@ export function useTimelineDragDrop({ if (mediaId) { const mediaAssets = editor.media.getAssets(); const media = mediaAssets.find((m) => m.id === mediaId); - return media?.duration ?? DEFAULT_NEW_ELEMENT_DURATION; + return media?.duration != null + ? Math.round(media.duration * TICKS_PER_SECOND) + : DEFAULT_NEW_ELEMENT_DURATION; } return DEFAULT_NEW_ELEMENT_DURATION; }, @@ -342,7 +345,9 @@ export function useTimelineDragDrop({ dragData.mediaType === "audio" ? "audio" : "video"; const duration = - mediaAsset.duration ?? DEFAULT_NEW_ELEMENT_DURATION; + mediaAsset.duration != null + ? Math.round(mediaAsset.duration * TICKS_PER_SECOND) + : DEFAULT_NEW_ELEMENT_DURATION; const element = buildElementFromMedia({ mediaId: mediaAsset.id, mediaType: mediaAsset.type, @@ -463,9 +468,10 @@ export function useTimelineDragDrop({ }); if (!createdAsset) continue; - const duration = - createdAsset.duration ?? - DEFAULT_NEW_ELEMENT_DURATION; + const duration = + createdAsset.duration != null + ? Math.round(createdAsset.duration * TICKS_PER_SECOND) + : DEFAULT_NEW_ELEMENT_DURATION; const sceneTracks = editor.scenes.getActiveScene().tracks; const currentTime = editor.playback.getCurrentTime(); const reuseMainTrackId = -- cgit v1.3.1