diff --git a/gajim/common/connection_handlers_events.py b/gajim/common/connection_handlers_events.py index c29e14b99..ddc8aacac 100644 --- a/gajim/common/connection_handlers_events.py +++ b/gajim/common/connection_handlers_events.py @@ -176,8 +176,10 @@ class HelperEvent: def _is_muc_pm(self, message): if self.muc_pm is not None: return self.muc_pm - self.muc_pm = message.getTag( - 'x', namespace=nbxmpp.NS_MUC_USER) is not None + self.muc_pm = False + muc_user = message.getTag('x', namespace=nbxmpp.NS_MUC_USER) + if muc_user is not None: + self.muc_pm = muc_user.getChildren() == [] return self.muc_pm class HttpAuthReceivedEvent(nec.NetworkIncomingEvent): @@ -1599,6 +1601,7 @@ class DecryptedMessageReceivedEvent(nec.NetworkIncomingEvent, HelperEvent): self.forwarded = self.msg_obj.forwarded self.sent = self.msg_obj.sent self.conn = self.msg_obj.conn + self.muc_pm = self.msg_obj.muc_pm self.popup = False self.msg_log_id = None # id in log database self.attention = False # XEP-0224 diff --git a/gajim/session.py b/gajim/session.py index 8b6eef9d4..35d9bfa54 100644 --- a/gajim/session.py +++ b/gajim/session.py @@ -101,7 +101,7 @@ class ChatControlSession(stanza_session.EncryptedStanzaSession): if treat_as: obj.mtype = treat_as pm = False - if obj.gc_control and obj.resource: + if obj.muc_pm or (obj.gc_control and obj.resource): # It's a Private message pm = True obj.mtype = 'pm' @@ -123,6 +123,11 @@ class ChatControlSession(stanza_session.EncryptedStanzaSession): additional_data=obj.additional_data, stanza_id=obj.unique_id) + if obj.muc_pm and not obj.gc_control: + # This is a carbon of a PM from a MUC we are not currently + # joined. We log it silently without notification. + return True + # Handle chat states if contact and (not obj.forwarded or not obj.sent): if self.control and self.control.type_id == \