From ed2219df8fe3da91113fe98068a08e71c501c98b Mon Sep 17 00:00:00 2001 From: Goffi Date: Mon, 7 Mar 2016 15:48:11 +0100 Subject: [PATCH] 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 --- src/plugins/plugin_xep_0045.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/plugins/plugin_xep_0045.py b/src/plugins/plugin_xep_0045.py index f2d8f4da..77d48753 100755 --- a/src/plugins/plugin_xep_0045.py +++ b/src/plugins/plugin_xep_0045.py @@ -692,6 +692,34 @@ class SatMUCClient (muc.MUCClient): 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