Browse Source

Set flag to indicate user session is active

We then use this flag to determine whether we should use the values from
sessionStorage.

This appears to fix the problem I originally tried to fix in 607d7986651461eb912ef14081e247c9915d91f7.

When "cloning" a tab (e.g. via middle-click), the `active` flag will be
set and we'll create a new empty user session, otherwise it'll be false
and we can re-use the user session.
JC Brand 6 years ago
parent
commit
119966d902
1 changed files with 14 additions and 4 deletions
  1. 14 4
      src/headless/converse-core.js

+ 14 - 4
src/headless/converse-core.js

@@ -506,12 +506,15 @@ _converse.initConnection = function () {
 
 
 async function initUserSession (jid) {
-    const bare_jid = Strophe.getBareJidFromJid(jid);
+    const bare_jid = Strophe.getBareJidFromJid(jid).toLowerCase();
     const id = `converse.session-${bare_jid}`;
     if (!_converse.session || _converse.session.get('id') !== id) {
         _converse.session = new Backbone.Model({id});
         _converse.session.browserStorage = new BrowserStorage.session(id);
         await new Promise(r => _converse.session.fetch({'success': r, 'error': r}));
+        if (_converse.session.get('active')) {
+            _converse.session.clear();
+        }
         /**
          * Triggered once the user's session has been initialized. The session is a
          * cache which stores information about the user's current session.
@@ -523,7 +526,9 @@ async function initUserSession (jid) {
 }
 
 async function setUserJID (jid) {
-    jid = jid.toLowerCase();
+    await initUserSession(jid);
+    jid = _converse.session.get('jid') || jid;
+
     if (!Strophe.getResourceFromJid(jid)) {
         jid = jid.toLowerCase() + _converse.generateResource();
         // Set JID on the connection object so that when we call
@@ -531,7 +536,6 @@ async function setUserJID (jid) {
         // and sent to the XMPP server.
         _converse.connection.jid = jid;
     }
-    await initUserSession(jid);
     _converse.jid = jid;
     _converse.bare_jid = Strophe.getBareJidFromJid(jid);
     _converse.resource = Strophe.getResourceFromJid(jid);
@@ -540,7 +544,8 @@ async function setUserJID (jid) {
        'jid': jid,
        'bare_jid': _converse.bare_jid,
        'resource': _converse.resource,
-       'domain': _converse.domain
+       'domain': _converse.domain,
+       'active': true
     });
     /**
      * Triggered whenever the user's JID has been updated
@@ -822,6 +827,11 @@ _converse.initialize = async function (settings, callback) {
         window.addEventListener('mousemove', _converse.onUserActivity);
         const options = {'once': true, 'passive': true};
         window.addEventListener(_converse.unloadevent, _converse.onUserActivity, options);
+        window.addEventListener(_converse.unloadevent, () => {
+            if (_converse.session) {
+                _converse.session.save('active', false);
+            }
+        });
         _converse.everySecondTrigger = window.setInterval(_converse.onEverySecond, 1000);
     };