Mercurial > libervia-backend
diff sat/plugins/plugin_xep_0060.py @ 3757:5bda9d2e8b35
plugin XEP-0060: use serialised options in `psSubscribe` + triggers update
author | Goffi <goffi@goffi.org> |
---|---|
date | Fri, 13 May 2022 18:29:42 +0200 |
parents | aa923e6b369f |
children | b7cef1b24f83 |
line wrap: on
line diff
--- a/sat/plugins/plugin_xep_0060.py Fri May 13 18:22:06 2022 +0200 +++ b/sat/plugins/plugin_xep_0060.py Fri May 13 18:29:42 2022 +0200 @@ -17,7 +17,7 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. -from typing import Optional, List, Tuple +from typing import Optional, List, Tuple, Dict, Union from collections import namedtuple import urllib.request, urllib.parse, urllib.error from functools import reduce @@ -255,7 +255,7 @@ host.bridge.addMethod( "psSubscribe", ".plugin", - in_sign="ssa{ss}s", + in_sign="ssss", out_sign="s", method=self._subscribe, async_=True, @@ -1147,7 +1147,12 @@ client = self.host.getClient(profile_key) service = None if not service else jid.JID(service) d = defer.ensureDeferred( - self.subscribe(client, service, nodeIdentifier, options=options or None) + self.subscribe( + client, + service, + nodeIdentifier, + options=data_format.deserialise(options) + ) ) d.addCallback(lambda subscription: subscription.subscriptionIdentifier or "") return d @@ -1161,14 +1166,15 @@ options: Optional[dict] = None ) -> pubsub.Subscription: # TODO: reimplement a subscribtion cache, checking that we have not subscription before trying to subscribe + cont, trigger_sub = await self.host.trigger.asyncReturnPoint( + "XEP-0060_subscribe", client, service, nodeIdentifier, sub_jid, options, + ) + if not cont: + return trigger_sub subscription = await client.pubsub_client.subscribe( service, nodeIdentifier, sub_jid or client.jid.userhostJID(), options=options, sender=client.jid.userhostJID() ) - await self.host.trigger.asyncPoint( - "XEP-0060_subscribe", client, service, nodeIdentifier, sub_jid, options, - subscription - ) return subscription def _unsubscribe(self, service, nodeIdentifier, profile_key=C.PROF_KEY_NONE): @@ -1181,10 +1187,15 @@ client: SatXMPPEntity, service: jid.JID, nodeIdentifier: str, - sub_jid=None, - subscriptionIdentifier=None, - sender=None, - ): + sub_jid: Optional[jid.JID] = None, + subscriptionIdentifier: Optional[str] = None, + sender: Optional[jid.JID] = None, + ) -> None: + if not await self.host.trigger.asyncPoint( + "XEP-0060_unsubscribe", client, service, nodeIdentifier, sub_jid, + subscriptionIdentifier, sender + ): + return await client.pubsub_client.unsubscribe( service, nodeIdentifier, @@ -1192,10 +1203,6 @@ subscriptionIdentifier, sender, ) - await self.host.trigger.asyncPoint( - "XEP-0060_unsubscribe", client, service, nodeIdentifier, sub_jid, - subscriptionIdentifier, sender - ) def _subscriptions(self, service, nodeIdentifier="", profile_key=C.PROF_KEY_NONE): client = self.host.getClient(profile_key)