Files
movim-rs/frontend/widgets/ChatOmemo/chatomemo_db.js
T
2026-10-24 14:03:52 +07:00

92 lines
2.6 KiB
JavaScript

var ChatOmemoDB = {
dbName: 'movim',
storeName: 'decryptedMessages',
version: 3,
cachedMessages: {},
db: null,
setup: async function() {
var db = window.indexedDB.open(this.dbName, this.version);
db.onupgradeneeded = function (event) {
var db = event.target.result;
db.createObjectStore(ChatOmemoDB.storeName, { keyPath: "id" });
}
db.onsuccess = function() {
ChatOmemoDB.db = db;
}
db.onerror = function() {
console.log('Movim Decrypted Messages database cannot be opened properly');
}
},
loadMessagesByIds: async function(ids) {
ChatOmemoDB.cachedMessages = {};
var tx = ChatOmemoDB.db.result.transaction(ChatOmemoDB.storeName, 'readonly');
var os = tx.objectStore(ChatOmemoDB.storeName);
var promises = [];
ids.forEach(id => {
var request = os.get(id);
promises.push(new Promise((resolve, reject) => {
request.onsuccess = function (event) {
if (event.target.result) {
ChatOmemoDB.cachedMessages[id] = event.target.result.body;
}
resolve();
}
request.onerror = function() {
resolve();
}
}));
});
return Promise.all(promises);
},
putMessage: async function(id, body) {
let promise = new Promise(resolve => {
var tx = ChatOmemoDB.db.result.transaction(ChatOmemoDB.storeName, 'readwrite');
var os = tx.objectStore(ChatOmemoDB.storeName);
var request = os.put({"id" : id, "body" : body});
request.onsuccess = function(event) {
resolve(body);
}
});
return promise;
},
getMessage: async function(id) {
let promise = new Promise(resolve => {
if (id in ChatOmemoDB.cachedMessages) {
resolve(ChatOmemoDB.cachedMessages[String(id)]);
} else {
var tx = ChatOmemoDB.db.result.transaction(ChatOmemoDB.storeName, 'readonly');
var os = tx.objectStore(ChatOmemoDB.storeName);
var request = os.get(id);
request.onsuccess = function(event) {
if (event.target.result) {
resolve(event.target.result.body);
} else {
resolve();
}
}
}
});
return promise;
}
}
ChatOmemoDB.setup();