From cbd1b8212370c67b34a70dccd21bd82de72fead2 Mon Sep 17 00:00:00 2001 From: Maze Winther Date: Tue, 7 Apr 2026 04:41:27 +0200 Subject: refactor: structured track layout per scene --- apps/web/src/core/managers/scenes-manager.ts | 67 +++++----------------------- 1 file changed, 12 insertions(+), 55 deletions(-) (limited to 'apps/web/src/core/managers/scenes-manager.ts') diff --git a/apps/web/src/core/managers/scenes-manager.ts b/apps/web/src/core/managers/scenes-manager.ts index 43938f96..3508a066 100644 --- a/apps/web/src/core/managers/scenes-manager.ts +++ b/apps/web/src/core/managers/scenes-manager.ts @@ -1,5 +1,5 @@ import type { EditorCore } from "@/core"; -import type { TimelineTrack, TScene } from "@/lib/timeline"; +import type { SceneTracks, TScene } from "@/lib/timeline"; import { storageService } from "@/services/storage/service"; import { getMainScene, @@ -12,7 +12,6 @@ import { getFrameTime, isBookmarkAtTime, } from "@/lib/timeline/bookmarks"; -import { ensureMainTrack } from "@/lib/timeline/placement"; import { CreateSceneCommand, DeleteSceneCommand, @@ -174,10 +173,7 @@ export class ScenesManager { try { const result = await storageService.loadProject({ id: projectId }); if (result?.project.scenes) { - const { scenes: ensuredScenes, hasAddedMainTrack } = - this.ensureScenesHaveMainTrack({ - scenes: result.project.scenes ?? [], - }); + const ensuredScenes = result.project.scenes ?? []; const currentScene = findCurrentScene({ scenes: ensuredScenes, currentSceneId: result.project.currentSceneId, @@ -186,22 +182,6 @@ export class ScenesManager { this.list = ensuredScenes; this.active = currentScene; this.notify(); - - if (hasAddedMainTrack) { - const activeProject = this.editor.project.getActive(); - if (activeProject) { - const updatedProject = { - ...activeProject, - scenes: ensuredScenes, - metadata: { - ...activeProject.metadata, - updatedAt: new Date(), - }, - }; - this.editor.project.setActiveProject({ project: updatedProject }); - this.editor.save.markDirty({ force: true }); - } - } } } catch (error) { console.error("Failed to load project scenes:", error); @@ -219,26 +199,24 @@ export class ScenesManager { currentSceneId?: string; }): void { const ensuredScenes = ensureMainScene({ scenes }); - const { scenes: scenesWithMainTracks, hasAddedMainTrack } = - this.ensureScenesHaveMainTrack({ scenes: ensuredScenes }); const currentScene = currentSceneId - ? scenesWithMainTracks.find((s) => s.id === currentSceneId) + ? ensuredScenes.find((s) => s.id === currentSceneId) : null; - const fallbackScene = getMainScene({ scenes: scenesWithMainTracks }); + const fallbackScene = getMainScene({ scenes: ensuredScenes }); - this.list = scenesWithMainTracks; + this.list = ensuredScenes; this.active = currentScene || fallbackScene; this.notify(); const hasAddedMainScene = ensuredScenes.length > scenes.length; - if (hasAddedMainScene || hasAddedMainTrack) { + if (hasAddedMainScene) { const activeProject = this.editor.project.getActive(); if (activeProject) { const updatedProject = { ...activeProject, - scenes: scenesWithMainTracks, + scenes: ensuredScenes, metadata: { ...activeProject.metadata, updatedAt: new Date(), @@ -264,6 +242,10 @@ export class ScenesManager { return this.active; } + getActiveSceneOrNull(): TScene | null { + return this.active; + } + getScenes(): TScene[] { return this.list; } @@ -307,7 +289,7 @@ export class ScenesManager { }); } - updateSceneTracks({ tracks }: { tracks: TimelineTrack[] }): void { + updateSceneTracks({ tracks }: { tracks: SceneTracks }): void { if (!this.active) return; const updatedScene: TScene = { @@ -335,29 +317,4 @@ export class ScenesManager { this.editor.project.setActiveProject({ project: updatedProject }); } } - - private ensureScenesHaveMainTrack({ scenes }: { scenes: TScene[] }): { - scenes: TScene[]; - hasAddedMainTrack: boolean; - } { - let hasAddedMainTrack = false; - const ensuredScenes: TScene[] = []; - - for (const scene of scenes) { - const existingTracks = scene.tracks ?? []; - const updatedTracks = ensureMainTrack({ tracks: existingTracks }); - if (updatedTracks !== existingTracks) { - hasAddedMainTrack = true; - ensuredScenes.push({ - ...scene, - tracks: updatedTracks, - updatedAt: new Date(), - }); - } else { - ensuredScenes.push(scene); - } - } - - return { scenes: ensuredScenes, hasAddedMainTrack }; - } } -- cgit v1.3.1