From e645f4e8384ecdf66b7dc41f3db3cc5f118e0bef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philipp=20H=C3=B6rist?= Date: Fri, 24 Jun 2016 20:12:37 +0200 Subject: [PATCH] add new event for gc after message stanza is built so it can be modified by plugins --- src/common/connection.py | 36 +++++++++++++++++------- src/common/connection_handlers_events.py | 7 +++++ 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/src/common/connection.py b/src/common/connection.py index 8c66b2c9e..30737f635 100644 --- a/src/common/connection.py +++ b/src/common/connection.py @@ -814,6 +814,8 @@ class Connection(CommonConnection, ConnectionHandlers): self._nec_message_outgoing) gajim.ged.register_event_handler('gc-message-outgoing', ged.OUT_CORE, self._nec_gc_message_outgoing) + gajim.ged.register_event_handler('gc-stanza-message-outgoing', ged.OUT_CORE, + self._nec_gc_stanza_message_outgoing) gajim.ged.register_event_handler('stanza-message-outgoing', ged.OUT_CORE, self._nec_stanza_message_outgoing) # END __init__ @@ -830,6 +832,8 @@ class Connection(CommonConnection, ConnectionHandlers): self._nec_message_outgoing) gajim.ged.remove_event_handler('gc-message-outgoing', ged.OUT_CORE, self._nec_gc_message_outgoing) + gajim.ged.remove_event_handler('gc-stanza-message-outgoing', ged.OUT_CORE, + self._nec_gc_stanza_message_outgoing) gajim.ged.remove_event_handler('stanza-message-outgoing', ged.OUT_CORE, self._nec_stanza_message_outgoing) @@ -2736,16 +2740,16 @@ class Connection(CommonConnection, ConnectionHandlers): if obj.correction_msg.getTag('replace'): obj.correction_msg.delChild('replace') obj.correction_msg.setTag('replace', attrs={'id': id_}, - namespace=nbxmpp.NS_CORRECT) + namespace=nbxmpp.NS_CORRECT) id2 = self.connection.getAnID() obj.correction_msg.setID(id2) obj.correction_msg.setBody(obj.message) if obj.xhtml: obj.correction_msg.setXHTML(xhtml) - obj.msg_id = self.connection.send(obj.correction_msg) - gajim.nec.push_incoming_event(MessageSentEvent(None, conn=self, - jid=obj.jid, message=obj.message, keyID=None, chatstate=None, - automatic_message=obj.automatic_message, msg_id=obj.msg_id)) + gajim.nec.push_incoming_event(GcStanzaMessageOutgoingEvent( + None, conn=self, automatic_message=obj.automatic_message, + jid=obj.jid, message=obj.message, + correction_msg=obj.correction_msg)) if obj.callback: obj.callback(obj.correction_msg, obj.message) return @@ -2753,16 +2757,28 @@ class Connection(CommonConnection, ConnectionHandlers): from common.rst_xhtml_generator import create_xhtml obj.xhtml = create_xhtml(obj.message) msg_iq = nbxmpp.Message(obj.jid, obj.message, typ='groupchat', - xhtml=obj.xhtml) + xhtml=obj.xhtml) if obj.label is not None: msg_iq.addChild(node=obj.label) - obj.msg_id = self.connection.send(msg_iq) - gajim.nec.push_incoming_event(MessageSentEvent(None, conn=self, - jid=obj.jid, message=obj.message, keyID=None, chatstate=None, - automatic_message=obj.automatic_message, msg_id=obj.msg_id)) + gajim.nec.push_incoming_event(GcStanzaMessageOutgoingEvent( + None, conn=self, msg_iq=msg_iq, + automatic_message=obj.automatic_message, + jid=obj.jid, message=obj.message, correction_msg=None)) if obj.callback: obj.callback(msg_iq, obj.message) + def _nec_gc_stanza_message_outgoing(self, obj): + if obj.conn.name != self.name: + return + if obj.correction_msg: + obj.msg_id = self.connection.send(obj.correction_msg) + else: + obj.msg_id = self.connection.send(obj.msg_iq) + gajim.nec.push_incoming_event(MessageSentEvent( + None, conn=self, jid=obj.jid, message=obj.message, keyID=None, + chatstate=None, automatic_message=obj.automatic_message, + msg_id=obj.msg_id)) + def send_gc_subject(self, jid, subject): if not gajim.account_is_connected(self.name): return diff --git a/src/common/connection_handlers_events.py b/src/common/connection_handlers_events.py index 87d708cb1..d4ce52988 100644 --- a/src/common/connection_handlers_events.py +++ b/src/common/connection_handlers_events.py @@ -2688,6 +2688,13 @@ class StanzaMessageOutgoingEvent(nec.NetworkOutgoingEvent): def generate(self): return True +class GcStanzaMessageOutgoingEvent(nec.NetworkOutgoingEvent): + name='gc-stanza-message-outgoing' + base_network_events = [] + + def generate(self): + return True + class GcMessageOutgoingEvent(nec.NetworkOutgoingEvent): name = 'gc-message-outgoing' base_network_events = []