diff options
| author | Maze Winther <mazewinther@gmail.com> | 2025-08-06 12:52:11 +0200 |
|---|---|---|
| committer | Maze Winther <mazewinther@gmail.com> | 2025-08-06 12:52:11 +0200 |
| commit | ce58b5199adae444c6ade029c14c496379932d83 (patch) | |
| tree | 8379e0ad5406a038a67a26ea16c53f914552f720 | |
| parent | 2c90ddd5d5f16c868f5e04943b64e0a3a78147f1 (diff) | |
| download | opencut-ce58b5199adae444c6ade029c14c496379932d83.tar.gz | |
feat: external files always create new tracks at playhead position
| -rw-r--r-- | apps/web/src/components/editor/timeline/index.tsx | 18 | ||||
| -rw-r--r-- | apps/web/src/components/editor/timeline/timeline-track.tsx | 12 |
2 files changed, 24 insertions, 6 deletions
diff --git a/apps/web/src/components/editor/timeline/index.tsx b/apps/web/src/components/editor/timeline/index.tsx index bb8dfbc0..8bb20d72 100644 --- a/apps/web/src/components/editor/timeline/index.tsx +++ b/apps/web/src/components/editor/timeline/index.tsx @@ -53,7 +53,7 @@ import { SelectionBox } from "../selection-box"; import { useSelectionBox } from "@/hooks/use-selection-box"; import { SnapIndicator } from "../snap-indicator"; import { SnapPoint } from "@/hooks/use-timeline-snapping"; -import type { DragData, TimelineTrack } from "@/types/timeline"; +import type { DragData, TimelineTrack, TrackType } from "@/types/timeline"; import { getTrackHeight, getCumulativeHeightBefore, @@ -490,7 +490,21 @@ export function Timeline() { item.name === processedItem.name && item.url === processedItem.url ); if (addedItem) { - useTimelineStore.getState().addMediaToNewTrack(addedItem); + const trackType: TrackType = + addedItem.type === "audio" ? "audio" : "media"; + const targetTrackId = useTimelineStore + .getState() + .insertTrackAt(trackType, 0); + + useTimelineStore.getState().addElementToTrack(targetTrackId, { + type: "media", + mediaId: addedItem.id, + name: addedItem.name, + duration: addedItem.duration || 5, + startTime: currentTime, + trimStart: 0, + trimEnd: 0, + }); } } } catch (error) { diff --git a/apps/web/src/components/editor/timeline/timeline-track.tsx b/apps/web/src/components/editor/timeline/timeline-track.tsx index 75910c46..ff4797fb 100644 --- a/apps/web/src/components/editor/timeline/timeline-track.tsx +++ b/apps/web/src/components/editor/timeline/timeline-track.tsx @@ -15,6 +15,7 @@ import { usePlaybackStore } from "@/stores/playback-store"; import type { TimelineElement as TimelineElementType, DragData, + TrackType, } from "@/types/timeline"; import { snapTimeToFrame, @@ -1061,7 +1062,7 @@ export function TimelineTrackContent({ return; } - // Process and add files to timeline at the drop position + // Process and add files to new timeline tracks at playhead position processMediaFiles(e.dataTransfer.files) .then(async (processedItems) => { for (const processedItem of processedItems) { @@ -1074,13 +1075,16 @@ export function TimelineTrackContent({ ); if (addedItem) { - // Add to current track at the drop position - addElementToTrack(track.id, { + const trackType: TrackType = + addedItem.type === "audio" ? "audio" : "media"; + const targetTrackId = insertTrackAt(trackType, 0); + + addElementToTrack(targetTrackId, { type: "media", mediaId: addedItem.id, name: addedItem.name, duration: addedItem.duration || 5, - startTime: snappedTime, + startTime: currentTime, trimStart: 0, trimEnd: 0, }); |
