From 492827553791866f2aec355ab27358e5fdef74c6 Mon Sep 17 00:00:00 2001 From: Yann Leboulanger Date: Thu, 23 Aug 2012 22:11:21 +0200 Subject: [PATCH] print in groupchat when the invited contact declines the invitation --- src/common/connection_handlers_events.py | 28 ++++++++++++++++++++++++ src/gui_interface.py | 9 ++++++++ 2 files changed, 37 insertions(+) diff --git a/src/common/connection_handlers_events.py b/src/common/connection_handlers_events.py index 0cf10c0b6..13820146d 100644 --- a/src/common/connection_handlers_events.py +++ b/src/common/connection_handlers_events.py @@ -1068,12 +1068,18 @@ class MessageReceivedEvent(nec.NetworkIncomingEvent, HelperEvent): self.enc_tag = self.stanza.getTag('x', namespace=xmpp.NS_ENCRYPTED) self.invite_tag = None + self.decline_tag = None if not self.enc_tag: self.invite_tag = self.stanza.getTag('x', namespace=xmpp.NS_MUC_USER) if self.invite_tag and not self.invite_tag.getTag('invite'): self.invite_tag = None + self.decline_tag = self.stanza.getTag('x', + namespace=xmpp.NS_MUC_USER) + if self.decline_tag and not self.decline_tag.getTag('decline'): + self.decline_tag = None + self.thread_id = self.stanza.getThread() self.mtype = self.stanza.getType() if not self.mtype or self.mtype not in ('chat', 'groupchat', 'error'): @@ -1194,6 +1200,28 @@ class GcInvitationReceivedEvent(nec.NetworkIncomingEvent): return True +class GcDeclineReceivedEvent(nec.NetworkIncomingEvent): + name = 'gc-decline-received' + base_network_events = [] + + def generate(self): + self.room_jid = self.msg_obj.fjid + + item = self.msg_obj.invite_tag.getTag('decline') + try: + self.jid_from = helpers.parse_jid(item.getAttr('from')) + except helpers.InvalidFormat: + log.warn('Invalid JID: %s, ignoring it' % item.getAttr('from')) + return + jid = gajim.get_jid_without_resource(self.jid_from) + if gajim.config.get_per('accounts', self.conn.name, + 'ignore_unknown_contacts') and not gajim.contacts.get_contacts( + self.conn.name, jid): + return + self.reason = item.getTagData('reason') + + return True + class DecryptedMessageReceivedEvent(nec.NetworkIncomingEvent, HelperEvent): name = 'decrypted-message-received' base_network_events = [] diff --git a/src/gui_interface.py b/src/gui_interface.py index a3ceb90a5..86a78647e 100644 --- a/src/gui_interface.py +++ b/src/gui_interface.py @@ -615,6 +615,14 @@ class Interface: self.instances[account]['gc_config'][obj.jid].\ affiliation_list_received(obj.users_dict) + def handle_event_gc_decline(self, obj): + account = obj.conn.name + gc_control = self.msg_win_mgr.get_gc_control(obj.room_jid, account) + if gc_control: + gc_control.print_conversation( + _('%(jid)s declined the invitation') % {'jid': obj.room_jid}, + graphics=False) + def handle_event_gc_invitation(self, obj): #('GC_INVITATION', (room_jid, jid_from, reason, password, is_continued)) jid = gajim.get_jid_without_resource(obj.jid_from) @@ -1497,6 +1505,7 @@ class Interface: 'file-request-received': [self.handle_event_file_request], 'fingerprint-error': [self.handle_event_fingerprint_error], 'gc-invitation-received': [self.handle_event_gc_invitation], + 'gc-decline-received': [self.handle_event_gc_decline], 'gc-presence-received': [self.handle_event_gc_presence], 'gc-message-received': [self.handle_event_gc_message], 'gmail-notify': [self.handle_event_gmail_notify],