Update scene document version and add project sequence duration
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user