diff --git a/web/apps/photos/src/utils/storage/mlIDbStorage.ts b/web/apps/photos/src/utils/storage/mlIDbStorage.ts index dc513bc1d..eec86e3a2 100644 --- a/web/apps/photos/src/utils/storage/mlIDbStorage.ts +++ b/web/apps/photos/src/utils/storage/mlIDbStorage.ts @@ -1,6 +1,7 @@ import { haveWindow } from "@/next/env"; import log from "@/next/log"; import { + DEFAULT_ML_SEARCH_CONFIG, DEFAULT_ML_SYNC_CONFIG, DEFAULT_ML_SYNC_JOB_CONFIG, MAX_ML_SYNC_ERROR_COUNT, @@ -84,16 +85,21 @@ class MLIDbStorage { async upgrade(db, oldVersion, newVersion, tx) { let wasMLSearchEnabled = false; try { - const searchConfig: unknown = await tx + const s: unknown = await tx .objectStore("configs") - .get(ML_SEARCH_CONFIG_NAME); - if ( - searchConfig && - typeof searchConfig == "object" && - "enabled" in searchConfig && - typeof searchConfig.enabled == "boolean" - ) { - wasMLSearchEnabled = searchConfig.enabled; + .getKey(ML_SEARCH_CONFIG_NAME); + if (typeof s == "string") { + const json = JSON.parse(s); + if ( + json && + typeof json == "object" && + "enabled" in json + ) { + const enabled = json.enabled; + if (typeof enabled == "boolean") { + wasMLSearchEnabled = enabled; + } + } } } catch (e) { log.error( @@ -102,22 +108,10 @@ class MLIDbStorage { ); } log.info( - `Previous ML database v${oldVersion} had ML search ${wasMLSearchEnabled ? "enabled" : "disabled"}`, + `Old database had wasMLSearchEnabled = ${wasMLSearchEnabled}`, ); - // If the user is migrating from a pre-v4 version, delete - // everything and recreate. The only thing that we migrate in - // such cases is whether or not the ML search was enabled. - if (oldVersion < 4) { - // Delete everything in the IndexedDB - db.deleteObjectStore("files"); - db.deleteObjectStore("people"); - db.deleteObjectStore("things"); - db.deleteObjectStore("versions"); - db.deleteObjectStore("library"); - db.deleteObjectStore("configs"); - - // Recreate + if (oldVersion < 1) { const filesStore = db.createObjectStore("files", { keyPath: "fileId", }); @@ -130,14 +124,16 @@ class MLIDbStorage { keyPath: "id", }); - // db.createObjectStore("things", { - // keyPath: "id", - // }); + db.createObjectStore("things", { + keyPath: "id", + }); db.createObjectStore("versions"); db.createObjectStore("library"); - + } + if (oldVersion < 2) { + // TODO: update configs if version is updated in defaults db.createObjectStore("configs"); await tx @@ -146,22 +142,26 @@ class MLIDbStorage { DEFAULT_ML_SYNC_JOB_CONFIG, ML_SYNC_JOB_CONFIG_NAME, ); - await tx .objectStore("configs") .add(DEFAULT_ML_SYNC_CONFIG, ML_SYNC_CONFIG_NAME); - + } + if (oldVersion < 3) { await tx .objectStore("configs") - .add( - { enabled: wasMLSearchEnabled }, - ML_SEARCH_CONFIG_NAME, - ); - - log.info( - `Ml DB upgraded to version: ${newVersion} from version: ${oldVersion}`, - ); + .add(DEFAULT_ML_SEARCH_CONFIG, ML_SEARCH_CONFIG_NAME); } + if (oldVersion < 4) { + // TODO(MR): This loses the user's settings. + db.deleteObjectStore("configs"); + db.createObjectStore("configs"); + + db.deleteObjectStore("things"); + } + + log.info( + `Ml DB upgraded to version: ${newVersion} from version: ${oldVersion}`, + ); }, }); }