diff options
| author | Maze Winther <mazewinther@gmail.com> | 2026-03-25 16:47:22 +0100 |
|---|---|---|
| committer | Maze Winther <mazewinther@gmail.com> | 2026-03-29 15:48:22 +0200 |
| commit | 8db3bead13441a5882d8689dfc6a9f09c82375d9 (patch) | |
| tree | e9d0cafa93904ffcbec3188c37961bcc16c6422d /apps/web/src/services/storage/migrations/transformers/v2-to-v3.ts | |
| parent | 39ea298a9ccba3104c549c0ca079c231981811f5 (diff) | |
| download | opencut-8db3bead13441a5882d8689dfc6a9f09c82375d9.tar.gz | |
feat: masks, properties refactor, shaders, storage migrations, and more
Diffstat (limited to 'apps/web/src/services/storage/migrations/transformers/v2-to-v3.ts')
| -rw-r--r-- | apps/web/src/services/storage/migrations/transformers/v2-to-v3.ts | 37 |
1 files changed, 32 insertions, 5 deletions
diff --git a/apps/web/src/services/storage/migrations/transformers/v2-to-v3.ts b/apps/web/src/services/storage/migrations/transformers/v2-to-v3.ts index 094b8bd8..0807d4fb 100644 --- a/apps/web/src/services/storage/migrations/transformers/v2-to-v3.ts +++ b/apps/web/src/services/storage/migrations/transformers/v2-to-v3.ts @@ -1,5 +1,3 @@ -import { getProjectDurationFromScenes } from "@/lib/scenes"; -import type { TScene } from "@/types/timeline"; import type { MigrationResult, ProjectRecord } from "./types"; import { getProjectId, isRecord } from "./utils"; @@ -18,7 +16,7 @@ export function transformProjectV2ToV3({ } const scenes = getScenes({ project }); - const duration = getProjectDurationFromScenes({ scenes }); + const duration = getDurationFromScenes({ scenes }); const metadataValue = project.metadata; const metadata = isRecord(metadataValue) @@ -36,13 +34,42 @@ export function transformProjectV2ToV3({ export { getProjectId } from "./utils"; -function getScenes({ project }: { project: ProjectRecord }): TScene[] { +function getScenes({ project }: { project: ProjectRecord }): unknown[] { const scenesValue = project.scenes; if (!Array.isArray(scenesValue)) { return []; } - return scenesValue.filter(isRecord) as unknown as TScene[]; + return scenesValue.filter(isRecord); +} + +function getDurationFromScenes({ scenes }: { scenes: unknown[] }): number { + const mainScene = + scenes.find( + (s): s is Record<string, unknown> => + isRecord(s) && s.isMain === true, + ) ?? + scenes.find(isRecord) ?? + null; + + if (!mainScene || !Array.isArray(mainScene.tracks)) { + return 0; + } + + let maxEnd = 0; + for (const track of mainScene.tracks) { + if (!isRecord(track) || !Array.isArray(track.elements)) continue; + for (const element of track.elements) { + if (!isRecord(element)) continue; + const startTime = + typeof element.startTime === "number" ? element.startTime : 0; + const duration = + typeof element.duration === "number" ? element.duration : 0; + maxEnd = Math.max(maxEnd, startTime + duration); + } + } + + return maxEnd; } function isV3Project({ project }: { project: ProjectRecord }): boolean { |
