diff --git a/web/database/database-module-provider.js b/web/database/database-module-provider.js --- a/web/database/database-module-provider.js +++ b/web/database/database-module-provider.js @@ -36,23 +36,38 @@ worker: SharedWorker; workerProxy: WorkerConnectionProxy; initPromise: Promise; - status: DatabaseStatus; + status: DatabaseStatus = databaseStatuses.notSupported; - constructor() { - const currentLoggedInUserID = preloadedState.currentUserInfo?.anonymous - ? undefined - : preloadedState.currentUserInfo?.id; - const isSupported = isSQLiteSupported(currentLoggedInUserID); + async init(currentLoggedInUserID: ?string): Promise { + if (!currentLoggedInUserID) { + return; + } - if (!isSupported || isDesktopSafari) { + if (!isSQLiteSupported(currentLoggedInUserID)) { + console.warn('Sqlite is not supported'); this.status = databaseStatuses.notSupported; - } else { - this.init(); + return; + } + + if (this.status === databaseStatuses.initInProgress) { + await this.initPromise; + return; + } + + if ( + this.status === databaseStatuses.initSuccess || + this.status === databaseStatuses.initError + ) { + return; } - } - init(encryptionKey?: ?SubtleCrypto$JsonWebKey) { this.status = databaseStatuses.initInProgress; + + let encryptionKey = null; + if (isDesktopSafari) { + encryptionKey = await getSafariEncryptionKey(); + } + this.worker = new SharedWorker(DATABASE_WORKER_PATH); this.worker.onerror = console.error; this.workerProxy = new WorkerConnectionProxy( @@ -77,24 +92,8 @@ console.error(`Database initialization failure`, error); } })(); - } - - async initDBForLoggedInUser(currentLoggedInUserID: ?string) { - if (this.status === databaseStatuses.initSuccess) { - return; - } - if ( - this.status === databaseStatuses.notSupported && - isSQLiteSupported(currentLoggedInUserID) - ) { - let encryptionKey = null; - if (isDesktopSafari) { - encryptionKey = await getSafariEncryptionKey(); - } - - this.init(encryptionKey); - } + await this.initPromise; } async clearSensitiveData(): Promise { @@ -146,6 +145,10 @@ async function getDatabaseModule(): Promise { if (!databaseModule) { databaseModule = new DatabaseModule(); + const currentLoggedInUserID = preloadedState.currentUserInfo?.anonymous + ? undefined + : preloadedState.currentUserInfo?.id; + await databaseModule.init(currentLoggedInUserID); } return databaseModule; } diff --git a/web/database/sqlite-data-handler.js b/web/database/sqlite-data-handler.js --- a/web/database/sqlite-data-handler.js +++ b/web/database/sqlite-data-handler.js @@ -50,7 +50,7 @@ const databaseModule = await getDatabaseModule(); if (currentLoggedInUserID) { - await databaseModule.initDBForLoggedInUser(currentLoggedInUserID); + await databaseModule.init(currentLoggedInUserID); } if (!rehydrateConcluded) {