Philipp Hörist pushed to branch master at gajim / gajim

Commits:
4caa4971 by Philipp Hörist at 2018-04-04T01:13:02+02:00
Catch decrypted-message-received event in ChatControl

It makes more sense to catch the event with ChatControl than with the
RosterWindow. RosterWindow is only used now if no ChatControl is open.

- - - - -


3 changed files:

- gajim/chat_control.py
- gajim/roster_window.py
- gajim/session.py


Changes:

=====================================
gajim/chat_control.py
=====================================
--- a/gajim/chat_control.py
+++ b/gajim/chat_control.py
@@ -242,6 +242,9 @@ class ChatControl(ChatControlBase):
         app.ged.register_event_handler(
             'mam-decrypted-message-received',
             ged.GUI1, self._nec_mam_decrypted_message_received)
+        app.ged.register_event_handler(
+            'decrypted-message-received',
+            ged.GUI1, self._nec_decrypted_message_received)
 
         # PluginSystem: adding GUI extension point for this ChatControl
         # instance object
@@ -822,6 +825,36 @@ class ChatControl(ChatControlBase):
             encrypted=obj.encrypted, correct_id=obj.correct_id, 
             msg_stanza_id=obj.message_id, additional_data=obj.additional_data)
 
+    def _nec_decrypted_message_received(self, obj):
+        if not obj.msgtxt:
+            return True
+        if obj.conn.name != self.account:
+            return
+        if obj.mtype != 'chat':
+            return
+        if obj.session.control != self:
+            return
+
+        typ = ''
+        xep0184_id = None
+        if obj.mtype == 'error':
+            typ = 'error'
+        if obj.forwarded and obj.sent:
+            typ = 'out'
+            if obj.jid != app.get_jid_from_account(obj.conn.name):
+                xep0184_id = obj.id_
+        self.print_conversation(obj.msgtxt, typ,
+            tim=obj.timestamp, encrypted=obj.encrypted, subject=obj.subject,
+            xhtml=obj.xhtml, displaymarking=obj.displaymarking,
+            msg_log_id=obj.msg_log_id, msg_stanza_id=obj.id_, 
correct_id=obj.correct_id,
+            xep0184_id=xep0184_id, additional_data=obj.additional_data)
+        if obj.msg_log_id:
+            pw = self.parent_win
+            end = self.conv_textview.autoscroll
+            if not pw or (pw.get_active_control() and self \
+            == pw.get_active_control() and pw.is_active() and end):
+                app.logger.set_read_messages([obj.msg_log_id])
+
     def _message_sent(self, obj):
         if obj.conn.name != self.account:
             return
@@ -1164,6 +1197,9 @@ class ChatControl(ChatControlBase):
         app.ged.remove_event_handler(
             'mam-decrypted-message-received',
             ged.GUI1, self._nec_mam_decrypted_message_received)
+        app.ged.remove_event_handler(
+            'decrypted-message-received',
+            ged.GUI1, self._nec_decrypted_message_received)
 
         self.unsubscribe_events()
 


=====================================
gajim/roster_window.py
=====================================
--- a/gajim/roster_window.py
+++ b/gajim/roster_window.py
@@ -2695,8 +2695,6 @@ class RosterWindow:
         self.draw_account(obj.conn.name)
 
     def _nec_decrypted_message_received(self, obj):
-        if not obj.msgtxt: # empty message text
-            return True
         if obj.mtype not in ('normal', 'chat'):
             return
         if obj.mtype == 'normal' and obj.popup:
@@ -2706,28 +2704,8 @@ class RosterWindow:
                 message=obj.msgtxt, resource=obj.resource, session=obj.session,
                 form_node=obj.form_node)
             return
-        if obj.session.control and obj.mtype == 'chat':
-            typ = ''
-            xep0184_id = None
-            if obj.mtype == 'error':
-                typ = 'error'
-            if obj.forwarded and obj.sent:
-                typ = 'out'
-                if obj.jid != app.get_jid_from_account(obj.conn.name):
-                    xep0184_id = obj.id_
-
-            obj.session.control.print_conversation(obj.msgtxt, typ,
-                tim=obj.timestamp, encrypted=obj.encrypted, 
subject=obj.subject,
-                xhtml=obj.xhtml, displaymarking=obj.displaymarking,
-                msg_log_id=obj.msg_log_id, msg_stanza_id=obj.id_, 
correct_id=obj.correct_id,
-                xep0184_id=xep0184_id, additional_data=obj.additional_data)
-            if obj.msg_log_id:
-                pw = obj.session.control.parent_win
-                end = obj.session.control.conv_textview.autoscroll
-                if not pw or (pw.get_active_control() and obj.session.control \
-                == pw.get_active_control() and pw.is_active() and end):
-                    app.logger.set_read_messages([obj.msg_log_id])
-        elif obj.popup and obj.mtype == 'chat':
+
+        if obj.popup and obj.mtype == 'chat' and not obj.session.control:
             contact = app.contacts.get_contact(obj.conn.name, obj.jid)
             obj.session.control = app.interface.new_chat(contact,
                 obj.conn.name, session=obj.session)


=====================================
gajim/session.py
=====================================
--- a/gajim/session.py
+++ b/gajim/session.py
@@ -40,7 +40,7 @@ class 
ChatControlSession(stanza_session.EncryptedStanzaSession):
     def __init__(self, conn, jid, thread_id, type_='chat'):
         stanza_session.EncryptedStanzaSession.__init__(self, conn, jid, 
thread_id,
                 type_='chat')
-        app.ged.register_event_handler('decrypted-message-received', ged.GUI1,
+        app.ged.register_event_handler('decrypted-message-received', 
ged.PREGUI,
             self._nec_decrypted_message_received)
 
         self.control = None



View it on GitLab: 
https://dev.gajim.org/gajim/gajim/commit/4caa4971b24668b10207a376a1fcf97dd837f26c

---
View it on GitLab: 
https://dev.gajim.org/gajim/gajim/commit/4caa4971b24668b10207a376a1fcf97dd837f26c
You're receiving this email because of your account on dev.gajim.org.
_______________________________________________
Commits mailing list
[email protected]
https://lists.gajim.org/cgi-bin/listinfo/commits

Reply via email to