summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormathieui <mathieui@mathieui.net>2021-04-20 19:08:46 +0200
committermathieui <mathieui@mathieui.net>2021-04-20 19:08:46 +0200
commit3630c3d1ccaad8aa668d86d96dd58555d1b25556 (patch)
tree36315b1f64ccffce606bdd64d22457b25c6d909b
parent7f0febb929b0db51f300a2986be98af3ff32ca79 (diff)
parent41fc6a2e6b29927148d2af7ed33d1f1645a31bf4 (diff)
downloadslixmpp-3630c3d1ccaad8aa668d86d96dd58555d1b25556.tar.gz
slixmpp-3630c3d1ccaad8aa668d86d96dd58555d1b25556.tar.bz2
slixmpp-3630c3d1ccaad8aa668d86d96dd58555d1b25556.tar.xz
slixmpp-3630c3d1ccaad8aa668d86d96dd58555d1b25556.zip
Merge branch 'caps-broadcast-presence' into 'master'
Caps: do not broadcast presence on PEP plugin load/unload See merge request poezio/slixmpp!157
-rw-r--r--itests/test_user_avatar.py5
-rw-r--r--slixmpp/plugins/xep_0115/caps.py19
-rw-r--r--slixmpp/plugins/xep_0163.py4
3 files changed, 21 insertions, 7 deletions
diff --git a/itests/test_user_avatar.py b/itests/test_user_avatar.py
index 193bbe72..988225bb 100644
--- a/itests/test_user_avatar.py
+++ b/itests/test_user_avatar.py
@@ -11,9 +11,12 @@ class TestUserAvatar(SlixIntegration):
self.envjid('CI_ACCOUNT1'),
self.envstr('CI_ACCOUNT1_PASSWORD'),
)
- self.register_plugins(['xep_0084'])
+ self.register_plugins(['xep_0084', 'xep_0115'])
self.data = b'coucou coucou'
await self.connect_clients()
+ await asyncio.gather(
+ self.clients[0]['xep_0115'].update_caps(),
+ )
async def _clear_avatar(self):
"""Utility for purging remote state"""
diff --git a/slixmpp/plugins/xep_0115/caps.py b/slixmpp/plugins/xep_0115/caps.py
index e469f6ff..c52d1166 100644
--- a/slixmpp/plugins/xep_0115/caps.py
+++ b/slixmpp/plugins/xep_0115/caps.py
@@ -8,6 +8,7 @@ import hashlib
import base64
from asyncio import Future
+from typing import Optional
from slixmpp import __version__
from slixmpp.stanza import StreamFeatures, Presence, Iq
@@ -15,10 +16,10 @@ from slixmpp.xmlstream import register_stanza_plugin, JID
from slixmpp.xmlstream.handler import Callback
from slixmpp.xmlstream.matcher import StanzaPath
from slixmpp.util import MemoryCache
-from slixmpp import asyncio
-from slixmpp.exceptions import XMPPError, IqError, IqTimeout
+from slixmpp.exceptions import XMPPError
from slixmpp.plugins import BasePlugin
from slixmpp.plugins.xep_0115 import stanza, StaticCaps
+from slixmpp.types import OptJidStr
log = logging.getLogger(__name__)
@@ -285,7 +286,17 @@ class XEP_0115(BasePlugin):
binary = hash(S.encode('utf8')).digest()
return base64.b64encode(binary).decode('utf-8')
- async def update_caps(self, jid=None, node=None, preserve=False):
+ async def update_caps(self, jid: OptJidStr = None,
+ node: Optional[str] = None,
+ preserve: bool = False,
+ broadcast: bool = True):
+ """Update caps for a local JID based on current data.
+
+ :param jid: JID whose info to update
+ :param node: Node to fetch info from
+ :param broadcast: Send a presence after updating.
+ :param preserve: Send presence only to contacts found in the roster.
+ """
try:
info = await self.xmpp['xep_0030'].get_info(jid, node, local=True)
if isinstance(info, Iq):
@@ -299,7 +310,7 @@ class XEP_0115(BasePlugin):
await self.cache_caps(ver, info)
await self.assign_verstring(jid, ver)
- if self.xmpp.sessionstarted and self.broadcast:
+ if broadcast and self.xmpp.sessionstarted and self.broadcast:
if self.xmpp.is_component or preserve:
for contact in self.xmpp.roster[jid]:
self.xmpp.roster[jid][contact].send_last_presence()
diff --git a/slixmpp/plugins/xep_0163.py b/slixmpp/plugins/xep_0163.py
index b885eec8..d8ab8c8e 100644
--- a/slixmpp/plugins/xep_0163.py
+++ b/slixmpp/plugins/xep_0163.py
@@ -61,7 +61,7 @@ class XEP_0163(BasePlugin):
self.xmpp['xep_0030'].add_feature('%s+notify' % ns,
jid=jid)
asyncio.ensure_future(
- self.xmpp['xep_0115'].update_caps(jid),
+ self.xmpp['xep_0115'].update_caps(jid, broadcast=False),
loop=self.xmpp.loop,
)
@@ -82,7 +82,7 @@ class XEP_0163(BasePlugin):
self.xmpp['xep_0030'].del_feature(jid=jid,
feature='%s+notify' % namespace)
asyncio.ensure_future(
- self.xmpp['xep_0115'].update_caps(jid),
+ self.xmpp['xep_0115'].update_caps(jid, broadcast=False),
loop=self.xmpp.loop,
)