# HG changeset patch # User Goffi # Date 1457362091 -3600 # Node ID b91c8637c656c1c0a559b27c0f80ebd026b55e31 # Parent 0a45bc8e7cf4e8b46e2b5dba736b71503319d441 plugin XEP-0045: overriden availableReceived method of MUCClient to work around a bug in Wokkel (affiliation and role are not set). TODO: propose a patch upstream diff -r 0a45bc8e7cf4 -r b91c8637c656 src/plugins/plugin_xep_0045.py --- a/src/plugins/plugin_xep_0045.py Mon Mar 07 13:50:57 2016 +0100 +++ b/src/plugins/plugin_xep_0045.py Mon Mar 07 15:48:11 2016 +0100 @@ -692,6 +692,34 @@ def subject(self, room, subject): return muc.MUCClientProtocol.subject(self, room, subject) + def availableReceived(self, presence): + """ + Available presence was received. + """ + # XXX: we override MUCClient.availableReceived to fix bugs + # (affiliation and role are not set) + # FIXME: propose a patch upstream + + room, user = self._getRoomUser(presence) + + if room is None: + return + + if user is None: + nick = presence.sender.resource + user = muc.User(nick, presence.entity) + + # Update user data + user.role = presence.role + user.affiliation = presence.affiliation + user.status = presence.status + user.show = presence.show + + if room.inRoster(user): + self.userUpdatedStatus(room, user, presence.show, presence.status) + else: + room.addUser(user) + self.userJoinedRoom(room, user) def unavailableReceived(self, presence): # XXX: we override this method to manage nickname change # TODO: feed this back to Wokkel