Mercurial > libervia-backend
changeset 75:7322a41f8a8e
Basic user joined/left management
- plugin XEP-0045: user joined./left signal is sended
- wix: user are adder/removed when these signals are catched
author | Goffi <goffi@goffi.org> |
---|---|
date | Mon, 29 Mar 2010 16:54:53 +1100 (2010-03-29) |
parents | 6e3a06b4dd36 |
children | 8becde8a967c |
files | frontends/quick_frontend/quick_app.py frontends/wix/chat.py frontends/wix/contact_list.py frontends/wix/main_window.py plugins/plugin_xep_0045.py |
diffstat | 5 files changed, 51 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/frontends/quick_frontend/quick_app.py Wed Mar 24 16:50:53 2010 +1100 +++ b/frontends/quick_frontend/quick_app.py Mon Mar 29 16:54:53 2010 +1100 @@ -43,6 +43,8 @@ self.bridge.register("newMessage", self.newMessage) self.bridge.register("presenceUpdate", self.presenceUpdate) self.bridge.register("roomJoined", self.roomJoined) + self.bridge.register("roomUserJoined", self.roomUserJoined) + self.bridge.register("roomUserLeft", self.roomUserLeft) self.bridge.register("subscribe", self.subscribe) self.bridge.register("paramUpdate", self.paramUpdate) self.bridge.register("contactDeleted", self.contactDeleted) @@ -198,9 +200,31 @@ def roomJoined(self, room_id, room_service, room_nicks, user_nick, profile): """Called when a MUC room is joined""" - debug (_("Room [%(room_name)s] joined by %(profile)s") % {'room_name':room_id+'@'+room_service, 'profile': profile}) + if not self.__check_profile(profile): + return + debug (_("Room [%(room_name)s] joined by %(profile)s, users presents:%(users)s") % {'room_name':room_id+'@'+room_service, 'profile': profile, 'users':room_nicks}) + room_jid=room_id+'@'+room_service + self.chat_wins[room_jid].setType("group") + self.chat_wins[room_jid].setPresents([user_nick]+room_nicks) + def roomUserJoined(self, room_id, room_service, user_nick, user_data, profile): + """Called when an user joined a MUC room""" + if not self.__check_profile(profile): + return + room_jid=room_id+'@'+room_service + if self.chat_wins.has_key(room_jid): + self.chat_wins[room_jid].replaceUser(user_nick) + debug (_("user [%(user_nick)s] joined room [%(room_jid)s]") % {'user_nick':user_nick, 'room_jid':room_jid}) + + def roomUserLeft(self, room_id, room_service, user_nick, user_data, profile): + """Called when an user joined a MUC room""" + if not self.__check_profile(profile): + return + room_jid=room_id+'@'+room_service + if self.chat_wins.has_key(room_jid): + self.chat_wins[room_jid].removeUser(user_nick) + debug (_("user [%(user_nick)s] left room [%(room_jid)s]") % {'user_nick':user_nick, 'room_jid':room_jid}) def subscribe(self, type, raw_jid, profile): """Called when a subsciption maangement signal is received"""
--- a/frontends/wix/chat.py Wed Mar 24 16:50:53 2010 +1100 +++ b/frontends/wix/chat.py Mon Mar 29 16:54:53 2010 +1100 @@ -97,6 +97,25 @@ return for nick in nicks: self.present_panel.presents.replace(nick) + + + def replaceUser(self, nick): + """Add user if it is not in the group list""" + debug (_("Replacing user %s") % nick) + if self.type != "group": + error (_("[INTERNAL] trying to replace user for a non group chat window")) + return + self.present_panel.presents.replace(nick) + + def removeUser(self, nick): + """Remove a user from the group list""" + debug(_("Removing user %s") % nick) + if self.type != "group": + error (_("[INTERNAL] trying to remove user for a non group chat window")) + return + self.present_panel.presents.remove(nick) + + def createMenus(self): info("Creating menus")
--- a/frontends/wix/contact_list.py Wed Mar 24 16:50:53 2010 +1100 +++ b/frontends/wix/contact_list.py Mon Mar 29 16:54:53 2010 +1100 @@ -137,7 +137,7 @@ """remove a contact from the list""" debug (_("removing %s"), contact) list_idx = self.__find_idx(contact) - list_idx.reverse() #we me make some deletions, we have to reverse the order + list_idx.reverse() #as we make some deletions, we have to reverse the order for i in list_idx: self.Delete(i)
--- a/frontends/wix/main_window.py Wed Mar 24 16:50:53 2010 +1100 +++ b/frontends/wix/main_window.py Mon Mar 29 16:54:53 2010 +1100 @@ -162,8 +162,6 @@ def roomJoined(self, room_id, room_service, room_nicks, user_nick, profile): super(MainWindow, self).roomJoined(room_id, room_service, room_nicks, user_nick, profile) - self.chat_wins[room_id+'@'+room_service].setType("group") - self.chat_wins[room_id+'@'+room_service].setPresents([user_nick]+room_nicks) def showAlert(self, message): # TODO: place this in a separate class
--- a/plugins/plugin_xep_0045.py Wed Mar 24 16:50:53 2010 +1100 +++ b/plugins/plugin_xep_0045.py Mon Mar 29 16:54:53 2010 +1100 @@ -74,6 +74,10 @@ host.bridge.addSignal("roomUserLeft", ".communication", signature='sssa{ss}s') #args: room_id, room_service, user_nick, user_data, profile def __check_profile(self, profile): + """check if profile is used and connected + if profile known but disconnected, remove it from known profiles + @param profile: profile to check + @return: True if the profile is known and connected, else False""" if not profile or not self.clients.has_key(profile) or not self.host.isConnected(profile): error (_('Unknown or disconnected profile')) if self.clients.has_key(profile): @@ -86,9 +90,9 @@ print "room joined (profile = %s)" % profile room_jid = room.roomIdentifier+'@'+room.service self.clients[profile].joined_rooms[room_jid] = room - self.host.bridge.roomJoined(room.roomIdentifier, room.service, room.roster.keys(), room.nick, profile) + self.host.bridge.roomJoined(room.roomIdentifier, room.service, [user.nick for user in room.roster.values()], room.nick, profile) - def __err_joining_room(self, failure, profile): #, profile): + def __err_joining_room(self, failure, profile): """Called when something is going wrong when joining the room""" error ("Error when joining the room") pdb.set_trace()