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 năm trước cách đây
mục cha
commit
119966d902
1 tập tin đã thay đổi với 14 bổ sung4 xóa
  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);
     };