| author | Stephen Paul Weber
<singpolyma@singpolyma.net> 2023-10-05 02:56:11 UTC |
| committer | Stephen Paul Weber
<singpolyma@singpolyma.net> 2023-10-05 03:28:01 UTC |
| parent | 12717612be09293205e88b5b2ed619bf5b6a86d7 |
| 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);