Update scene document version and add project sequence duration

This commit is contained in:
2026-04-15 00:46:45 +02:00
parent 932f03ba30
commit 133a83bcdb
2 changed files with 25 additions and 3 deletions

View File

@@ -32,7 +32,8 @@ import {
type ProjectSequenceLibrary
} from "../sequencer/project-sequences";
export const SCENE_DOCUMENT_VERSION = 54 as const;
export const SCENE_DOCUMENT_VERSION = 55 as const;
export const PROJECT_SEQUENCE_TIMING_SCENE_DOCUMENT_VERSION = 55 as const;
export const PROJECT_SEQUENCE_CLIPS_SCENE_DOCUMENT_VERSION = 54 as const;
export const PROJECT_SEQUENCE_LIBRARY_SCENE_DOCUMENT_VERSION = 53 as const;
export const PLAYER_START_PAUSE_BINDINGS_SCENE_DOCUMENT_VERSION = 52 as const;

View File

@@ -2,6 +2,8 @@ import { createOpaqueId } from "../core/ids";
import {
cloneSequenceClip,
DEFAULT_PROJECT_SEQUENCE_DURATION_MINUTES,
getProjectSequenceDurationMinutes,
type SequenceClip,
type SequenceStep
} from "./project-sequence-steps";
@@ -9,6 +11,7 @@ import {
export interface ProjectSequence {
id: string;
title: string;
durationMinutes: number;
clips: SequenceClip[];
}
@@ -26,6 +29,16 @@ function normalizeProjectSequenceTitle(title: string | undefined): string {
return normalizedTitle;
}
function normalizeProjectSequenceDurationMinutes(
value: number | undefined
): number {
if (value === undefined || !Number.isFinite(value)) {
return DEFAULT_PROJECT_SEQUENCE_DURATION_MINUTES;
}
return Math.max(1, Math.trunc(value));
}
export function createEmptyProjectSequenceLibrary(): ProjectSequenceLibrary {
return {
sequences: {}
@@ -33,15 +46,21 @@ export function createEmptyProjectSequenceLibrary(): ProjectSequenceLibrary {
}
export function createProjectSequence(
overrides: Partial<Pick<ProjectSequence, "id" | "title">> & {
overrides: Partial<Pick<ProjectSequence, "id" | "title" | "durationMinutes">> & {
clips?: SequenceClip[];
steps?: SequenceStep[];
} = {}
): ProjectSequence {
const clips = (overrides.clips ?? overrides.steps)?.map(cloneSequenceClip) ?? [];
return {
id: overrides.id ?? createOpaqueId("sequence"),
title: normalizeProjectSequenceTitle(overrides.title ?? "Sequence"),
clips: (overrides.clips ?? overrides.steps)?.map(cloneSequenceClip) ?? []
durationMinutes: normalizeProjectSequenceDurationMinutes(
overrides.durationMinutes ??
(clips.length > 0 ? getProjectSequenceDurationMinutes({ id: "sequence", clips }) : undefined)
),
clips
};
}
@@ -51,6 +70,7 @@ export function cloneProjectSequence(
return {
id: sequence.id,
title: sequence.title,
durationMinutes: sequence.durationMinutes,
clips: sequence.clips.map(cloneSequenceClip)
};
}
@@ -75,6 +95,7 @@ export function areProjectSequencesEqual(
if (
left.id !== right.id ||
left.title !== right.title ||
left.durationMinutes !== right.durationMinutes ||
left.clips.length !== right.clips.length
) {
return false;