Page MenuHomePhorge

D7289.1765068270.diff
No OneTemporary

Size
2 KB
Referenced Files
None
Subscribers
None

D7289.1765068270.diff

diff --git a/web/database/utils/constants.js b/web/database/utils/constants.js
--- a/web/database/utils/constants.js
+++ b/web/database/utils/constants.js
@@ -5,8 +5,6 @@
export const CURRENT_USER_ID_KEY = 'current_user_id';
-export const DB_PERSIST_THROTTLE_WAIT_MS = 300;
-
export const DATABASE_WORKER_PATH = '/worker/database';
export const SQLJS_FILE_PATH = '/compiled/webworkers';
diff --git a/web/database/worker/db-worker.js b/web/database/worker/db-worker.js
--- a/web/database/worker/db-worker.js
+++ b/web/database/worker/db-worker.js
@@ -1,7 +1,6 @@
// @flow
import localforage from 'localforage';
-import _throttle from 'lodash/throttle.js';
import initSqlJs, { type SqliteDatabase } from 'sql.js';
import type {
@@ -34,7 +33,6 @@
} from '../queries/storage-engine-queries.js';
import {
CURRENT_USER_ID_KEY,
- DB_PERSIST_THROTTLE_WAIT_MS,
SQLITE_CONTENT,
SQLITE_ENCRYPTION_KEY,
} from '../utils/constants.js';
@@ -56,6 +54,9 @@
let sqliteDb: ?SqliteDatabase = null;
let encryptionKey: ?CryptoKey = null;
+let persistNeeded: boolean = false;
+let persistInProgress: boolean = false;
+
async function initDatabase(sqljsFilePath: string, sqljsFilename: ?string) {
encryptionKey = await localforage.getItem(SQLITE_ENCRYPTION_KEY);
if (!encryptionKey) {
@@ -134,7 +135,9 @@
}
async function persist() {
+ persistInProgress = true;
if (!sqliteDb) {
+ persistInProgress = false;
throw new Error('Database not initialized');
}
@@ -142,16 +145,19 @@
encryptionKey = await localforage.getItem(SQLITE_ENCRYPTION_KEY);
}
- const dbData = sqliteDb.export();
- if (!encryptionKey) {
- throw new Error('Encryption key is missing');
+ while (persistNeeded) {
+ persistNeeded = false;
+ const dbData = sqliteDb.export();
+ if (!encryptionKey) {
+ persistInProgress = false;
+ throw new Error('Encryption key is missing');
+ }
+ const encryptedData = await encryptDatabaseFile(dbData, encryptionKey);
+ await localforage.setItem(SQLITE_CONTENT, encryptedData);
}
- const encryptedData = await encryptDatabaseFile(dbData, encryptionKey);
- await localforage.setItem(SQLITE_CONTENT, encryptedData);
+ persistInProgress = false;
}
-const throttledPersist = _throttle(persist, DB_PERSIST_THROTTLE_WAIT_MS);
-
async function processAppRequest(
message: WorkerRequestMessage,
): Promise<?WorkerResponseMessage> {
@@ -228,7 +234,11 @@
removePersistStorageItem(sqliteDb, message.key);
}
- throttledPersist();
+ persistNeeded = true;
+ if (!persistInProgress) {
+ persist();
+ }
+
return undefined;
}

File Metadata

Mime Type
text/plain
Expires
Sun, Dec 7, 12:44 AM (10 h, 36 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5841703
Default Alt Text
D7289.1765068270.diff (2 KB)

Event Timeline