Browse Source

Clear cached data

JC Brand 1 week ago
parent
commit
fb3a0efab2

+ 17 - 10
src/headless/utils/init.js

@@ -92,9 +92,9 @@ export async function initClientConfig(_converse) {
 export async function initSessionStorage(_converse) {
     await Storage.sessionStorageInitialized;
     _converse.storage["session"] = Storage.localForage.createInstance({
-        "name": isTestEnv() ? "converse-test-session" : "converse-session",
-        "description": "sessionStorage instance",
-        "driver": ["sessionStorageWrapper"],
+        name: isTestEnv() ? "converse-test-session" : "converse-session",
+        description: "sessionStorage instance",
+        driver: ["sessionStorageWrapper"],
     });
 }
 
@@ -105,15 +105,17 @@ export async function initSessionStorage(_converse) {
  * @param {string} [key="persistent"] - The key for `_converse.storage`.
  */
 export function initPersistentStorage(_converse, store_name, key="persistent") {
-    if (_converse.api.settings.get("persistent_store") === "sessionStorage") {
+    const { api } = _converse;
+    if (api.settings.get("persistent_store") === "sessionStorage") {
+        _converse.storage[key] = _converse.storage["session"];
         return;
-    } else if (_converse.api.settings.get("persistent_store") === "BrowserExtLocal") {
+    } else if (api.settings.get("persistent_store") === "BrowserExtLocal") {
         Storage.localForage
             .defineDriver(localDriver)
             .then(() => Storage.localForage.setDriver("webExtensionLocalStorage"));
         _converse.storage[key] = Storage.localForage;
         return;
-    } else if (_converse.api.settings.get("persistent_store") === "BrowserExtSync") {
+    } else if (api.settings.get("persistent_store") === "BrowserExtSync") {
         Storage.localForage
             .defineDriver(syncDriver)
             .then(() => Storage.localForage.setDriver("webExtensionSyncStorage"));
@@ -122,13 +124,13 @@ export function initPersistentStorage(_converse, store_name, key="persistent") {
     }
 
     const config = {
-        "name": isTestEnv() ? "converse-test-persistent" : "converse-persistent",
-        "storeName": store_name,
+        name: isTestEnv() ? "converse-test-persistent" : "converse-persistent",
+        storeName: store_name,
     };
-    if (_converse.api.settings.get("persistent_store") === "localStorage") {
+    if (api.settings.get("persistent_store") === "localStorage") {
         config["description"] = "localStorage instance";
         config["driver"] = [Storage.localForage.LOCALSTORAGE];
-    } else if (_converse.api.settings.get("persistent_store") === "IndexedDB") {
+    } else if (api.settings.get("persistent_store") === "IndexedDB") {
         config["description"] = "indexedDB instance";
         config["driver"] = [Storage.localForage.INDEXEDDB];
     }
@@ -422,7 +424,12 @@ export async function attemptNonPreboundSession(credentials, automatic) {
  */
 export async function savedLoginInfo(jid) {
     const id = `converse.scram-keys-${Strophe.getBareJidFromJid(jid)}`;
+    if (_converse.state.login_info?.get("id") === id) {
+        return _converse.state.login_info;
+    }
+
     const login_info = new Model({ id });
+    _converse.state.login_info = login_info;
     initStorage(login_info, id, "persistent");
     await new Promise((f) => login_info.fetch({ "success": f, "error": f }));
     return login_info;

+ 4 - 1
src/headless/utils/session.js

@@ -79,7 +79,10 @@ export async function tearDown (_converse) {
  * @param {ConversePrivateGlobal} _converse
  */
 export function clearSession (_converse) {
-    shouldClearCache(_converse) && _converse.api.user.settings.clear();
+    if (shouldClearCache(_converse)) {
+        _converse.api.user.settings.clear();
+        _converse.state.login_info?.destroy();
+    }
     _converse.initSession();
     /**
      * Synchronouse event triggered once the user session has been cleared,

+ 8 - 2
src/plugins/roomslist/index.js

@@ -5,7 +5,7 @@
  * @copyright 2022, the Converse.js contributors
  * @license Mozilla Public License (MPLv2)
  */
-import { api, converse } from "@converse/headless";
+import { _converse, api, converse, u } from "@converse/headless";
 import './view.js';
 
 
@@ -20,7 +20,13 @@ converse.plugins.add('converse-roomslist', {
 
     initialize () {
         api.settings.extend({
-            'muc_grouped_by_domain': false,
+            muc_grouped_by_domain: false,
+        });
+
+        api.listen.on('clearSession', () => {
+            if (u.shouldClearCache(_converse)) {
+                _converse.state.roomslist?.destroy();
+            }
         });
     }
 });

+ 2 - 0
src/plugins/roomslist/view.js

@@ -17,6 +17,8 @@ export class RoomsList extends CustomElement {
         const bare_jid = _converse.session.get('bare_jid');
         const id = `converse.roomspanel${bare_jid}`;
         this.model = new RoomsListModel({ id });
+        _converse.state.roomslist = this.model;
+
         initStorage(this.model, id);
         this.model.fetch();