From 79f531aca517b3e5d507d8709d47aa7f9a37359b Mon Sep 17 00:00:00 2001 From: Balaji Vijayakumar Date: Thu, 24 Nov 2022 20:36:23 +0530 Subject: fix whatsapp initial loading issue --- recipes/whatsapp/package.json | 2 +- recipes/whatsapp/webview.js | 44 ++++++++++++++++++++++++++----------------- 2 files changed, 28 insertions(+), 18 deletions(-) (limited to 'recipes/whatsapp') diff --git a/recipes/whatsapp/package.json b/recipes/whatsapp/package.json index e4701a5..8a38be6 100644 --- a/recipes/whatsapp/package.json +++ b/recipes/whatsapp/package.json @@ -1,7 +1,7 @@ { "id": "whatsapp", "name": "WhatsApp", - "version": "3.4.7", + "version": "3.4.8", "license": "MIT", "config": { "serviceURL": "https://web.whatsapp.com", diff --git a/recipes/whatsapp/webview.js b/recipes/whatsapp/webview.js index 8a5f830..89bc673 100644 --- a/recipes/whatsapp/webview.js +++ b/recipes/whatsapp/webview.js @@ -4,24 +4,38 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : {default: obj}; } -let getMessages = () => { - /* stub until db is connected*/ -} - module.exports = Ferdium => { - const request = window.indexedDB.open("model-storage"); - request.onsuccess = () => { - const db = request.result; - - getMessages = () => { + let dbCache + + const getMessages = () => { + if(!dbCache) { + const dbsPromise = indexedDB.databases() + dbsPromise.then((databases) => { + for(let index in databases) { + //Wait for model-storage db to be available before calling indexedDB.open(). This is to make sure whatsapp created the model-storage DB + if(databases[index].name === "model-storage") { + const request = window.indexedDB.open("model-storage"); + request.onsuccess = () => { + dbCache = request.result; + //This will be called when db.delete is triggered, we need to close and set dbCache to null to trigger lookup again + dbCache.onversionchange = () => { + dbCache.close() + dbCache = null + }; + } + request.addEventListener('error', () => { + console.error("Opening model-storage database failed:", event); + }) + } + } + }) + } else { let unreadCount = 0; let unreadMutedCount = 0; - const txn = db.transaction('chat', 'readonly'); + const txn = dbCache.transaction('chat', 'readonly'); const store = txn.objectStore('chat'); - const query = store.getAll(); - query.onsuccess = (event) => { for (const chat of event.target.result) { if (chat.unreadCount > 0) { @@ -40,11 +54,7 @@ module.exports = Ferdium => { console.error("Loading data from database failed:", event); }) } - }; - - request.addEventListener('error', (event) => { - console.error("Opening model-storage database failed:", event); - }) + } // inject webview hacking script Ferdium.injectJSUnsafe(_path.default.join(__dirname, 'webview-unsafe.js')); -- cgit v1.2.3-54-g00ecf