From b172861d2c86db81234b4249d6d86baa3b8a26cc Mon Sep 17 00:00:00 2001 From: laszlovl Date: Mon, 11 Feb 2019 17:26:42 +0100 Subject: [PATCH] Dont run fetchRosterContacts async, to prevent processing presence before contacts are created Fixes #1405 --- CHANGES.md | 1 + dist/converse.js | 15 +++++++++------ src/headless/converse-roster.js | 14 +++++++++----- 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index d9e6710ca..5e490e745 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -7,6 +7,7 @@ - Accessibility: Tag the chat-content as an ARIA live region, for screen readers - Set releases URL to new Github repo - #1369 Don't wrongly interpret message with `subject` as a topic change. +- #1405 Status of contacts list are not displayed properly - #1408 new config option `roomconfig_whitelist` - #1412 muc moderator commands can be disabled selectively by config - #1413 fix moderator commands that change affiliation diff --git a/dist/converse.js b/dist/converse.js index 363e2e1e9..001d960bb 100644 --- a/dist/converse.js +++ b/dist/converse.js @@ -68022,11 +68022,15 @@ _converse_headless_converse_core__WEBPACK_IMPORTED_MODULE_0__["default"].plugins } } else { try { - await _converse.rostergroups.fetchRosterGroups().then(() => { - _converse.emit('rosterGroupsFetched'); + /* Make sure not to run fetchRosterContacts async, since we need + * the contacts to exist before processing contacts presence, + * which might come in the same BOSH request. + */ + await _converse.rostergroups.fetchRosterGroups(); - return _converse.roster.fetchRosterContacts(); - }); + _converse.emit('rosterGroupsFetched'); + + await _converse.roster.fetchRosterContacts(); _converse.emit('rosterContactsFetched'); } catch (reason) { @@ -68375,8 +68379,7 @@ _converse_headless_converse_core__WEBPACK_IMPORTED_MODULE_0__["default"].plugins if (collection.length === 0 || this.rosterVersioningSupported() && !_converse.session.get('roster_fetched')) { _converse.send_initial_presence = true; - - _converse.roster.fetchFromServer(); + await _converse.roster.fetchFromServer(); } else { _converse.emit('cachedRoster', collection); } diff --git a/src/headless/converse-roster.js b/src/headless/converse-roster.js index ec4a8a942..d4e7e4020 100644 --- a/src/headless/converse-roster.js +++ b/src/headless/converse-roster.js @@ -88,10 +88,14 @@ converse.plugins.add('converse-roster', { } } else { try { - await _converse.rostergroups.fetchRosterGroups().then(() => { - _converse.emit('rosterGroupsFetched'); - return _converse.roster.fetchRosterContacts(); - }); + /* Make sure not to run fetchRosterContacts async, since we need + * the contacts to exist before processing contacts presence, + * which might come in the same BOSH request. + */ + await _converse.rostergroups.fetchRosterGroups(); + _converse.emit('rosterGroupsFetched'); + + await _converse.roster.fetchRosterContacts(); _converse.emit('rosterContactsFetched'); } catch (reason) { _converse.log(reason, Strophe.LogLevel.ERROR); @@ -403,7 +407,7 @@ converse.plugins.add('converse-roster', { if (collection.length === 0 || (this.rosterVersioningSupported() && !_converse.session.get('roster_fetched'))) { _converse.send_initial_presence = true; - _converse.roster.fetchFromServer(); + await _converse.roster.fetchFromServer(); } else { _converse.emit('cachedRoster', collection); }