Philipp Hörist pushed to branch master at gajim / gajim
Commits: f30564c1 by Philipp Hörist at 2018-02-22T21:42:49+01:00 Dont notify about PMs from MUCs we are not joined The server sends us carbons if one of our other resources has a conversation in a muc we are not joined. Instead we log the messages silently. - - - - - 994244c9 by Philipp Hörist at 2018-02-22T22:03:55+01:00 MAM: Check muc#user namespace before we disco 1. Check if the message has the muc#user namespace 2. Check if we have this jid already in the DB 3. Last resort disco the jid - - - - - 2 changed files: - gajim/common/connection_handlers_events.py - gajim/session.py Changes: ===================================== gajim/common/connection_handlers_events.py ===================================== --- 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): @@ -1125,6 +1127,8 @@ class MamGcMessageReceivedEvent(nec.NetworkIncomingEvent, HelperEvent): :stanza: Complete stanza Node :forwarded: Forwarded Node :result: Result Node + :muc_pm: True, if this is a MUC PM + propagated to MamDecryptedMessageReceivedEvent ''' self._set_base_event_vars_as_attributes(base_event) self.additional_data = {} @@ -1205,23 +1209,27 @@ class MamDecryptedMessageReceivedEvent(nec.NetworkIncomingEvent, HelperEvent): if self.groupchat: return True - self.is_pm = app.logger.jid_is_room_jid(self.with_.getStripped()) - if self.is_pm is None: - # Check if this event is triggered after a disco, so we dont - # run into an endless loop - if hasattr(self, 'disco'): - log.error('JID not known even after sucessful disco') + if not self.muc_pm: + # muc_pm = False, means only there was no muc#user namespace + # This could still be a muc pm, we check the database if we + # know this jid. If not we disco it. + self.muc_pm = app.logger.jid_is_room_jid(self.with_.getStripped()) + if self.muc_pm is None: + # Check if this event is triggered after a disco, so we dont + # run into an endless loop + if hasattr(self, 'disco'): + log.error('JID not known even after sucessful disco') + return + # we don't know this JID, we need to disco it. + server = self.with_.getDomain() + if server not in self.conn.mam_awaiting_disco_result: + self.conn.mam_awaiting_disco_result[server] = [self] + self.conn.discoverInfo(server) + else: + self.conn.mam_awaiting_disco_result[server].append(self) return - # we don't know this JID, we need to disco it. - server = self.with_.getDomain() - if server not in self.conn.mam_awaiting_disco_result: - self.conn.mam_awaiting_disco_result[server] = [self] - self.conn.discoverInfo(server) - else: - self.conn.mam_awaiting_disco_result[server].append(self) - return - if self.is_pm: + if self.muc_pm: self.with_ = str(self.with_) else: self.with_ = self.with_.getStripped() @@ -1599,6 +1607,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 ===================================== gajim/session.py ===================================== --- 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 == \ View it on GitLab: https://dev.gajim.org/gajim/gajim/compare/52fa57795ac04fb273c3686f05adb3d766f3f454...994244c91097374fbed3828465c05cf2664f3d58 --- View it on GitLab: https://dev.gajim.org/gajim/gajim/compare/52fa57795ac04fb273c3686f05adb3d766f3f454...994244c91097374fbed3828465c05cf2664f3d58 You're receiving this email because of your account on dev.gajim.org.
_______________________________________________ Commits mailing list Commits@gajim.org https://lists.gajim.org/cgi-bin/listinfo/commits