From 0a131fcc5bda900e2a0dc1215f901f936f835e64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maxime=20=E2=80=9Cpep=E2=80=9D=20Buquet?= Date: Sun, 12 Jan 2020 12:20:57 +0100 Subject: Some more typing for is_known_muc_pm MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Maxime “pep” Buquet --- poezio/core/handlers.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/poezio/core/handlers.py b/poezio/core/handlers.py index cfa5a147..d6a4c8b9 100644 --- a/poezio/core/handlers.py +++ b/poezio/core/handlers.py @@ -5,6 +5,8 @@ XMPP-related handlers for the Core class import logging log = logging.getLogger(__name__) +from typing import Optional + import asyncio import curses import functools @@ -103,7 +105,7 @@ class HandlerCore: self.core.xmpp['xep_0030'].get_info_from_domain(), ) - def is_known_muc_pm(self, message: Message, with_jid: JID): + def is_known_muc_pm(self, message: Message, with_jid: JID) -> Optional[bool]: """ Try to determine whether a given message is a MUC-PM, without a roundtrip. Returns None when it's not clear """ -- cgit v1.2.3 From 830a37879249429eabb46fcb6d610d711750a5bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maxime=20=E2=80=9Cpep=E2=80=9D=20Buquet?= Date: Sun, 12 Jan 2020 12:21:36 +0100 Subject: is_known_muc_pm: search into more than MucTab MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- poezio/core/handlers.py | 45 ++++++++++++++++++++++++++++++++------------- 1 file 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 ', - with_jid) + if message.xml.find('{http://jabber.org/protocol/muc#user}x') is not None: + log.debug('MUC-PM from %s with ', 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): -- cgit v1.2.3