Commit d8f7a612 authored by Maxime Buquet's avatar Maxime Buquet

Merge branch 'is_known_muc_pm' into 'master'

Is known muc pm

See merge request !58
parents a7ab0cf5 830a3787
......@@ -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,32 +105,51 @@ 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
"""
# 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):
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment