| author | Stephen Paul Weber
<singpolyma@singpolyma.net> 2025-09-30 19:48:05 UTC |
| committer | Stephen Paul Weber
<singpolyma@singpolyma.net> 2025-09-30 19:48:05 UTC |
| parent | eee343552719a84bc1d05f3e54766562f8d29ba5 |
| borogove/persistence/IDB.js | +60 | -59 |
diff --git a/borogove/persistence/IDB.js b/borogove/persistence/IDB.js index e1a4556..1e1b625 100644 --- a/borogove/persistence/IDB.js +++ b/borogove/persistence/IDB.js @@ -4,7 +4,7 @@ import { borogove as enums } from "./borogove-enums.js"; import { borogove } from "./borogove.js"; -export default (dbname, media, tokenize, stemmer) => { +export default async (dbname, media, tokenize, stemmer) => { if (!tokenize) tokenize = function(s) { return s.split(" "); } if (!stemmer) stemmer = function(s) { return s; } @@ -25,67 +25,68 @@ export default (dbname, media, tokenize, stemmer) => { return bytes.buffer; } - var db = null; 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 messages = upgradeDb.createObjectStore("messages", { keyPath: ["account", "serverId", "serverIdBy", "localId"] }); - messages.createIndex("chats", ["account", "chatId", "timestamp"]); - messages.createIndex("localId", ["account", "localId", "chatId"]); - messages.createIndex("accounts", ["account", "timestamp"]); - } - if (!db.objectStoreNames.contains("keyvaluepairs")) { - upgradeDb.createObjectStore("keyvaluepairs"); - } - if (!db.objectStoreNames.contains("chats")) { - upgradeDb.createObjectStore("chats", { keyPath: ["account", "chatId"] }); - } - if (!db.objectStoreNames.contains("services")) { - upgradeDb.createObjectStore("services", { keyPath: ["account", "serviceId"] }); - } - if (!db.objectStoreNames.contains("reactions")) { - const reactions = upgradeDb.createObjectStore("reactions", { keyPath: ["account", "chatId", "senderId", "updateId"] }); - reactions.createIndex("senders", ["account", "chatId", "messageId", "senderId", "timestamp"]); - } - if (!db.objectStoreNames.contains("omemo_identities")) { - upgradeDb.createObjectStore("omemo_identities", { keyPath: ["account", "address"] }); - } - if (!db.objectStoreNames.contains("omemo_prekeys")) { - upgradeDb.createObjectStore("omemo_prekeys", { keyPath: ["account", "keyId"] }); - } - if (!db.objectStoreNames.contains("omemo_sessions")) { - upgradeDb.createObjectStore("omemo_sessions", { keyPath: ["account", "address"] }); - } - if (!db.objectStoreNames.contains("omemo_sessions_meta")) { - upgradeDb.createObjectStore("omemo_sessions_meta", { keyPath: ["account", "address"] }); - } - }; - dbOpenReq.onsuccess = (event) => { - db = event.target.result; - //window.db = db; - const storeNames = [ - "messages", - "keyvaluepairs", - "chats", - "services", - "reactions", - "omemo_identities", - "omemo_sessions", - "omemo_sessions_meta" - ]; - for(let storeName of storeNames) { - if(!db.objectStoreNames.contains(storeName)) { - db.close(); - openDb(db.version + 1); - return; + return new Promise((resolve, reject) => { + var dbOpenReq = indexedDB.open(dbname, version); + dbOpenReq.onerror = console.error; + dbOpenReq.onupgradeneeded = (event) => { + const db = event.target.result; + if (!db.objectStoreNames.contains("messages")) { + const messages = db.createObjectStore("messages", { keyPath: ["account", "serverId", "serverIdBy", "localId"] }); + messages.createIndex("chats", ["account", "chatId", "timestamp"]); + messages.createIndex("localId", ["account", "localId", "chatId"]); + messages.createIndex("accounts", ["account", "timestamp"]); } - } - }; + if (!db.objectStoreNames.contains("keyvaluepairs")) { + db.createObjectStore("keyvaluepairs"); + } + if (!db.objectStoreNames.contains("chats")) { + db.createObjectStore("chats", { keyPath: ["account", "chatId"] }); + } + if (!db.objectStoreNames.contains("services")) { + db.createObjectStore("services", { keyPath: ["account", "serviceId"] }); + } + if (!db.objectStoreNames.contains("reactions")) { + const reactions = db.createObjectStore("reactions", { keyPath: ["account", "chatId", "senderId", "updateId"] }); + reactions.createIndex("senders", ["account", "chatId", "messageId", "senderId", "timestamp"]); + } + if (!db.objectStoreNames.contains("omemo_identities")) { + db.createObjectStore("omemo_identities", { keyPath: ["account", "address"] }); + } + if (!db.objectStoreNames.contains("omemo_prekeys")) { + db.createObjectStore("omemo_prekeys", { keyPath: ["account", "keyId"] }); + } + if (!db.objectStoreNames.contains("omemo_sessions")) { + db.createObjectStore("omemo_sessions", { keyPath: ["account", "address"] }); + } + if (!db.objectStoreNames.contains("omemo_sessions_meta")) { + db.createObjectStore("omemo_sessions_meta", { keyPath: ["account", "address"] }); + } + }; + dbOpenReq.onsuccess = (event) => { + const db = event.target.result; + const storeNames = [ + "messages", + "keyvaluepairs", + "chats", + "services", + "reactions", + "omemo_identities", + "omemo_sessions", + "omemo_sessions_meta" + ]; + for(let storeName of storeNames) { + if(!db.objectStoreNames.contains(storeName)) { + db.close(); + openDb(db.version + 1).then(resolve, reject); + return; + } + } + resolve(db); + }; + }); } - openDb(); + const db = await openDb(); function promisifyRequest(request) { return new Promise((resolve, reject) => {