Disconnect chatrooms upon tab reload (when using websocket)

This is a workaround until we have support for XEP-0198

updates #1111
This commit is contained in:
JC Brand 2018-06-06 09:29:32 +02:00
parent 3153604823
commit 54c6bcd861
2 changed files with 20 additions and 8 deletions

View File

@ -321,17 +321,16 @@
_converse._tearDown();
}
let unloadevent;
if ('onpagehide' in window) {
// Pagehide gets thrown in more cases than unload. Specifically it
// gets thrown when the page is cached and not just
// closed/destroyed. It's the only viable event on mobile Safari.
// https://www.webkit.org/blog/516/webkit-page-cache-ii-the-unload-event/
unloadevent = 'pagehide';
_converse.unloadevent = 'pagehide';
} else if ('onbeforeunload' in window) {
unloadevent = 'beforeunload';
_converse.unloadevent = 'beforeunload';
} else if ('onunload' in window) {
unloadevent = 'unload';
_converse.unloadevent = 'unload';
}
_.assignIn(this, this.default_settings);
@ -449,7 +448,8 @@
window.addEventListener('focus', _converse.onUserActivity);
window.addEventListener('keypress', _converse.onUserActivity);
window.addEventListener('mousemove', _converse.onUserActivity);
window.addEventListener(unloadevent, _converse.onUserActivity);
const options = {'once': true, 'passive': true};
window.addEventListener(_converse.unloadevent, _converse.onUserActivity, options);
_converse.everySecondTrigger = window.setInterval(_converse.onEverySecond, 1000);
};
@ -1090,7 +1090,7 @@
window.removeEventListener('focus', _converse.onUserActivity);
window.removeEventListener('keypress', _converse.onUserActivity);
window.removeEventListener('mousemove', _converse.onUserActivity);
window.removeEventListener(unloadevent, _converse.onUserActivity);
window.removeEventListener(_converse.unloadevent, _converse.onUserActivity);
window.clearInterval(_converse.everySecondTrigger);
_converse.emit('afterTearDown');
return _converse;

View File

@ -1192,8 +1192,20 @@
_converse.api.disco.own.features.add('jabber:x:conference'); // Invites
}
});
_converse.on('chatBoxesFetched', autoJoinRooms);
_converse.on('disconnecting', disconnectChatRooms);
_converse.api.listen.on('chatBoxesFetched', autoJoinRooms);
_converse.api.listen.on('disconnecting', disconnectChatRooms);
_converse.api.listen.on('statusInitialized', () => {
// XXX: For websocket connections, we disconnect from all
// chatrooms when the page reloads. This is a workaround for
// issue #1111 and should be removed once we support XEP-0198
const options = {'once': true, 'passive': true};
window.addEventListener(_converse.unloadevent, () => {
if (_converse.connection._proto instanceof Strophe.Websocket) {
disconnectChatRooms();
}
});
});
/************************ END Event Handlers ************************/