git » sdk » commit 333e9ad

Make sure to upgrade db when needed

author Stephen Paul Weber
2023-10-05 02:56:11 UTC
committer Stephen Paul Weber
2023-10-05 03:28:01 UTC
parent 12717612be09293205e88b5b2ed619bf5b6a86d7

Make sure to upgrade db when needed

xmpp/persistence/browser.js +23 -12

diff --git a/xmpp/persistence/browser.js b/xmpp/persistence/browser.js
index 8522fe9..869b5d1 100644
--- a/xmpp/persistence/browser.js
+++ b/xmpp/persistence/browser.js
@@ -4,18 +4,29 @@
 exports.xmpp.persistence = {
 	browser: (dbname) => {
 		var db = null;
-		var dbOpenReq = indexedDB.open(dbname);
-		dbOpenReq.onerror = console.error;
-		dbOpenReq.onupgradeneeded = (event) => {
-			const upgradeDb = event.target.result;
-			const store = upgradeDb.createObjectStore("messages", { keyPath: "serverId" });
-			store.createIndex("account", ["account", "timestamp"]);
-			store.createIndex("conversation", ["account", "conversation", "timestamp"]);
-			upgradeDb.createObjectStore("keyvaluepairs");
-		};
-		dbOpenReq.onsuccess = (event) => {
-			db = event.target.result;
-		};
+		function openDb(version) {
+			var dbOpenReq = indexedDB.open(dbname, version);
+			dbOpenReq.onerror = console.error;
+			dbOpenReq.onupgradeneeded = (event) => {
+				const upgradeDb = event.target.result;
+				if (!db.objectStoreNames.contains("messages")) {
+					const store = upgradeDb.createObjectStore("messages", { keyPath: "serverId" });
+					store.createIndex("account", ["account", "timestamp"]);
+					store.createIndex("conversation", ["account", "conversation", "timestamp"]);
+				}
+				if (!db.objectStoreNames.contains("keyvaluepairs")) {
+					upgradeDb.createObjectStore("keyvaluepairs");
+				}
+			};
+			dbOpenReq.onsuccess = (event) => {
+				db = event.target.result;
+				if (!db.objectStoreNames.contains("messages") || !db.objectStoreNames.contains("keyvaluepairs")) {
+					db.close();
+					openDb(db.version + 1);
+				}
+			};
+		}
+		openDb();
 
 		var cache = null;
 		caches.open(dbname).then((c) => cache = c);