From fa507897106a89f2599d67e62e8e25929f03b0d4 Mon Sep 17 00:00:00 2001 From: Goffi Date: Fri, 5 Jul 2019 15:58:15 +0200 Subject: [PATCH] quick_frontend (contact list): fixed `nick` use for groupchat: during the profile connection workflow, joined rooms are retrieved, then presence are filled, all asynchronously. In some cases, all rooms may not be joined when presence are filled, resulting in cache being already filled with a `nick` when cache is set for the room itself. Because of that, a `nick` may be displayed in contact list instead of MUC local part. This patch fixes it by removing `nick` if it exists when cache a MUC room. fix 305 --- sat/plugins/plugin_xep_0048.py | 3 +++ sat_frontends/quick_frontend/quick_contact_list.py | 2 ++ 2 files changed, 5 insertions(+) diff --git a/sat/plugins/plugin_xep_0048.py b/sat/plugins/plugin_xep_0048.py index ec57b3f7..dc41e6fe 100644 --- a/sat/plugins/plugin_xep_0048.py +++ b/sat/plugins/plugin_xep_0048.py @@ -120,6 +120,9 @@ class XEP_0048(object): nick = data.get("nick", client.jid.user) self.host.plugins["XEP-0045"].join(client, room_jid, nick, {}) + # we don't use a DeferredList to gather result here, as waiting for all room would + # slow down a lot the connection process, and result in a bad user experience. + @defer.inlineCallbacks def _getServerBookmarks(self, storage_type, profile): """Get distants bookmarks diff --git a/sat_frontends/quick_frontend/quick_contact_list.py b/sat_frontends/quick_frontend/quick_contact_list.py index 836506a1..a011efd8 100644 --- a/sat_frontends/quick_frontend/quick_contact_list.py +++ b/sat_frontends/quick_frontend/quick_contact_list.py @@ -498,6 +498,8 @@ class ProfileContactList(object): else: self._specials.add(entity) cache[C.CONTACT_MAIN_RESOURCE] = None + if 'nick' in cache: + del cache['nick'] # now the attributes we keep in cache # XXX: if entity is a full jid, we store the value for the resource only