summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxime “pep” Buquet <pep@bouah.net>2020-01-12 12:21:36 +0100
committerMaxime “pep” Buquet <pep@bouah.net>2020-01-12 13:28:38 +0100
commit830a37879249429eabb46fcb6d610d711750a5bd (patch)
treef521c6ffdcb33592dfa9bf16699f4466eafb2ce2
parent0a131fcc5bda900e2a0dc1215f901f936f835e64 (diff)
downloadpoezio-830a37879249429eabb46fcb6d610d711750a5bd.tar.gz
poezio-830a37879249429eabb46fcb6d610d711750a5bd.tar.bz2
poezio-830a37879249429eabb46fcb6d610d711750a5bd.tar.xz
poezio-830a37879249429eabb46fcb6d610d711750a5bd.zip
is_known_muc_pm: search into more than MucTab
Use new `by_jid` API to search for any tab containing the barejid, and then look at the type of Tab. Move the Tab search at the top of the checks so that we stop searching if we already have done all this work for previous stanzas. Signed-off-by: Maxime “pep” Buquet <pep@bouah.net>
-rw-r--r--poezio/core/handlers.py45
1 files changed, 32 insertions, 13 deletions
diff --git a/poezio/core/handlers.py b/poezio/core/handlers.py
index d6a4c8b9..158dff17 100644
--- a/poezio/core/handlers.py
+++ b/poezio/core/handlers.py
@@ -109,28 +109,47 @@ class HandlerCore:
"""
Try to determine whether a given message is a MUC-PM, without a roundtrip. Returns None when it's not clear
"""
+
# first, look for the x (XEP-0045 version 1.28)
- if message.xml.find(
- '{http://jabber.org/protocol/muc#user}x'
- ) is not None:
- log.debug('MUC-PM from %s with <x>',
- with_jid)
+ if message.xml.find('{http://jabber.org/protocol/muc#user}x') is not None:
+ log.debug('MUC-PM from %s with <x>', with_jid)
return True
+
+ jid_bare = with_jid.bare
+
+ # then, look whether we have a matching tab with barejid
+ tab = self.core.tabs.by_jid(JID(jid_bare))
+ if tab is not None:
+ if isinstance(tab, tabs.MucTab):
+ log.debug('MUC-PM from %s in known MucTab', with_jid)
+ return True
+ one_to_one = isinstance(tab, (
+ tabs.ConversationTab,
+ tabs.DynamicConversationTab,
+ ))
+ if one_to_one:
+ return False
+
+ # then, look whether we have a matching tab with fulljid
+ if with_jid.resource:
+ tab = self.core.tabs.by_jid(with_jid)
+ if tab is not None:
+ if isinstance(tab, tabs.PrivateTab):
+ log.debug('MUC-PM from %s in known PrivateTab', with_jid)
+ return True
+ if isinstance(tab, tabs.StaticConversationTab):
+ return False
+
# then, look in the roster
- if with_jid.bare in roster and roster[with_jid.bare].subscription != 'none':
+ if jid_bare in roster and roster[jid_bare].subscription != 'none':
return False
+
# then, check bookmarks
- jid_bare = with_jid.bare
for bm in self.core.bookmarks:
if bm.jid.bare == jid_bare:
log.debug('MUC-PM from %s in bookmarks', with_jid)
return True
- # then, look whether we know the MUC JID
- for tab in self.core.get_tabs(tabs.MucTab):
- if tab.jid.bare == jid_bare:
- if with_jid.resource:
- log.debug('MUC-PM from %s in known MucTab', with_jid)
- return True
+
return None
def on_carbon_received(self, message):