From c6e7f8628d0f980d17b9a154e0b611ddd551c2ca Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Philipp=20H=C3=B6rist?= <philipp@hoerist.com>
Date: Sun, 25 Feb 2018 21:04:34 +0100
Subject: [PATCH] MAM: Display received mam message in open chats

---
 gajim/chat_control.py                      | 17 +++++++++++++++++
 gajim/common/connection_handlers_events.py |  7 +++++++
 2 files changed, 24 insertions(+)

diff --git a/gajim/chat_control.py b/gajim/chat_control.py
index 71533a6207..c0b01f2d69 100644
--- a/gajim/chat_control.py
+++ b/gajim/chat_control.py
@@ -240,6 +240,9 @@ class ChatControl(ChatControlBase):
             self._nec_caps_received)
         app.ged.register_event_handler('stanza-message-outgoing', ged.OUT_POSTCORE,
             self._message_sent)
+        app.ged.register_event_handler(
+            'mam-decrypted-message-received',
+            ged.GUI1, self._nec_mam_decrypted_message_received)
 
         # PluginSystem: adding GUI extension point for this ChatControl
         # instance object
@@ -806,6 +809,20 @@ class ChatControl(ChatControlBase):
             app.plugin_manager.extension_point(
                 'encryption_dialog' + self.encryption, self)
 
+    def _nec_mam_decrypted_message_received(self, obj):
+        if obj.conn.name != self.account:
+            return
+        if obj.with_ != self.contact.jid:
+            return
+
+        kind = 'incoming'
+        if obj.kind == KindConstant.CHAT_MSG_SENT:
+            kind = 'outgoing'
+
+        self.print_conversation(obj.msgtxt, kind, tim=obj.timestamp,
+            encrypted=obj.encrypted, correct_id=obj.correct_id, 
+            msg_stanza_id=obj.message_id, additional_data=obj.additional_data)
+
     def _message_sent(self, obj):
         if obj.conn.name != self.account:
             return
diff --git a/gajim/common/connection_handlers_events.py b/gajim/common/connection_handlers_events.py
index 93a6b9844d..758303e332 100644
--- a/gajim/common/connection_handlers_events.py
+++ b/gajim/common/connection_handlers_events.py
@@ -1052,6 +1052,7 @@ class MamMessageReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
 
         # use stanza-id as unique-id
         self.unique_id, origin_id = self.get_unique_id()
+        self.message_id = self.msg_.getID()
 
         # Check for duplicates
         if app.logger.find_stanza_id(account,
@@ -1199,11 +1200,17 @@ class MamDecryptedMessageReceivedEvent(nec.NetworkIncomingEvent, HelperEvent):
     base_network_events = []
 
     def generate(self):
+        self.correct_id = None
+
         if not self.msgtxt:
             # For example Chatstates, Receipts, Chatmarkers
             log.debug('Received MAM message without text')
             return
 
+        replace = self.msg_.getTag('replace', namespace=nbxmpp.NS_CORRECT)
+        if replace is not None:
+            self.correct_id = replace.getAttr('id')
+
         self.get_oob_data(self.msg_)
 
         if self.groupchat:
-- 
GitLab