From 2a1f9d2abb7deab685abca19dcd0e810094530ec Mon Sep 17 00:00:00 2001
From: Yann Leboulanger <asterix@lagaule.org>
Date: Tue, 13 Mar 2012 17:30:48 +0100
Subject: [PATCH] handle data forms in groupchat messages. This way room admins
 can handle voice requests.

---
 src/common/connection_handlers_events.py |  2 ++
 src/gui_interface.py                     | 11 +++++++++++
 2 files changed, 13 insertions(+)

diff --git a/src/common/connection_handlers_events.py b/src/common/connection_handlers_events.py
index 1b5e316527..41f989d69a 100644
--- a/src/common/connection_handlers_events.py
+++ b/src/common/connection_handlers_events.py
@@ -1280,6 +1280,8 @@ class GcMessageReceivedEvent(nec.NetworkIncomingEvent):
                 if self.status_code != []:
                     gajim.nec.push_incoming_event(GcConfigChangedReceivedEvent(
                         None, conn=self.conn, msg_event=self))
+            if self.msg_obj.form_node:
+                return True
             return
 
         self.displaymarking = None
diff --git a/src/gui_interface.py b/src/gui_interface.py
index c829fae327..726ce527c0 100644
--- a/src/gui_interface.py
+++ b/src/gui_interface.py
@@ -329,6 +329,16 @@ class Interface:
             if gc_control and gc_control.autorejoin:
                 gc_control.autorejoin = False
 
+    def handle_event_gc_message(self, obj):
+        if not obj.stanza.getTag('body'): # no <body>
+            # It could be a voice request. See
+            # http://www.xmpp.org/extensions/xep-0045.html#voiceapprove
+            if obj.msg_obj.form_node:
+                dialogs.SingleMessageWindow(obj.conn.name, obj.fjid,
+                    action='receive', from_whom=obj.fjid,
+                    subject='', message='', resource='', session=None,
+                    form_node=obj.msg_obj.form_node)
+
     def handle_event_presence(self, obj):
         # 'NOTIFY' (account, (jid, status, status message, resource,
         # priority, # keyID, timestamp, contact_nickname))
@@ -1415,6 +1425,7 @@ class Interface:
             'fingerprint-error': [self.handle_event_fingerprint_error],
             'gc-invitation-received': [self.handle_event_gc_invitation],
             'gc-presence-received': [self.handle_event_gc_presence],
+            'gc-message-received': [self.handle_event_gc_message],
             'gmail-notify': [self.handle_event_gmail_notify],
             'gpg-password-required': [self.handle_event_gpg_password_required],
             'gpg-trust-key': [self.handle_event_gpg_trust_key],
-- 
GitLab