summaryrefslogtreecommitdiff
path: root/apps/web/src/services/storage
diff options
context:
space:
mode:
authorMaze Winther <mazewinther@gmail.com>2026-04-21 20:45:33 +0200
committerMaze Winther <mazewinther@gmail.com>2026-04-21 20:45:33 +0200
commit75eebf52bc91507a3c51a1a0ac2f5e3c1584c8f2 (patch)
tree571eab82d93b017495c5d2f0d09c039e978ec3d8 /apps/web/src/services/storage
parent1582423dbfe701b079e2f6ad0b4ae6a1ffbde1b4 (diff)
downloadopencut-75eebf52bc91507a3c51a1a0ac2f5e3c1584c8f2.tar.gz
fix: project loading thing
Diffstat (limited to 'apps/web/src/services/storage')
-rw-r--r--apps/web/src/services/storage/migrations/runner.ts1
-rw-r--r--apps/web/src/services/storage/service.ts59
2 files changed, 43 insertions, 17 deletions
diff --git a/apps/web/src/services/storage/migrations/runner.ts b/apps/web/src/services/storage/migrations/runner.ts
index 409a8695..f63fe983 100644
--- a/apps/web/src/services/storage/migrations/runner.ts
+++ b/apps/web/src/services/storage/migrations/runner.ts
@@ -43,6 +43,7 @@ export async function runStorageMigrations({
"projects",
1,
);
+
const projects = await projectsAdapter.getAll();
const orderedMigrations = [...migrations].sort((a, b) => a.from - b.from);
diff --git a/apps/web/src/services/storage/service.ts b/apps/web/src/services/storage/service.ts
index 8ef77846..858198eb 100644
--- a/apps/web/src/services/storage/service.ts
+++ b/apps/web/src/services/storage/service.ts
@@ -113,11 +113,7 @@ class StorageService {
return isStorageQuotaExceededError({ error });
}
- private stripAudioBuffers({
- tracks,
- }: {
- tracks: SceneTracks;
- }): SceneTracks {
+ private stripAudioBuffers({ tracks }: { tracks: SceneTracks }): SceneTracks {
return {
...tracks,
audio: tracks.audio.map((track) => ({
@@ -173,6 +169,19 @@ class StorageService {
if (!serializedProject) return null;
+ if (
+ typeof serializedProject !== "object" ||
+ serializedProject === null ||
+ typeof serializedProject.metadata !== "object" ||
+ serializedProject.metadata === null
+ ) {
+ console.warn(
+ "[storage] Skipping malformed project entry (missing metadata):",
+ { id, entry: serializedProject },
+ );
+ return null;
+ }
+
const scenes =
serializedProject.scenes?.map((scene) => ({
id: scene.id,
@@ -225,18 +234,34 @@ class StorageService {
await this.ensureMigrations();
const serializedProjects = await this.projectsAdapter.getAll();
- const metadata = serializedProjects.map((serializedProject) => ({
- id: serializedProject.metadata.id,
- name: serializedProject.metadata.name,
- thumbnail: serializedProject.metadata.thumbnail,
- duration:
- serializedProject.metadata.duration ??
- getProjectDurationFromScenes({
- scenes: (serializedProject.scenes ?? []) as unknown as TScene[],
- }),
- createdAt: new Date(serializedProject.metadata.createdAt),
- updatedAt: new Date(serializedProject.metadata.updatedAt),
- }));
+ const metadata: TProjectMetadata[] = [];
+ for (const serializedProject of serializedProjects) {
+ if (
+ typeof serializedProject !== "object" ||
+ serializedProject === null ||
+ typeof serializedProject.metadata !== "object" ||
+ serializedProject.metadata === null
+ ) {
+ console.warn(
+ "[storage] Skipping malformed project entry (missing metadata):",
+ serializedProject,
+ );
+ continue;
+ }
+
+ metadata.push({
+ id: serializedProject.metadata.id,
+ name: serializedProject.metadata.name,
+ thumbnail: serializedProject.metadata.thumbnail,
+ duration:
+ serializedProject.metadata.duration ??
+ getProjectDurationFromScenes({
+ scenes: (serializedProject.scenes ?? []) as unknown as TScene[],
+ }),
+ createdAt: new Date(serializedProject.metadata.createdAt),
+ updatedAt: new Date(serializedProject.metadata.updatedAt),
+ });
+ }
return metadata.sort(
(a, b) => b.updatedAt.getTime() - a.updatedAt.getTime(),