diff --git a/sat/plugins/plugin_xep_0060.py b/sat/plugins/plugin_xep_0060.py index 7c8c332c..5fb124c3 100755 --- a/sat/plugins/plugin_xep_0060.py +++ b/sat/plugins/plugin_xep_0060.py @@ -143,6 +143,14 @@ class XEP_0060(object): method=self._setNodeSubscriptions, async=True, ) + host.bridge.addMethod( + "psNodePurge", + ".plugin", + in_sign="sss", + out_sign="", + method=self._purgeNode, + async=True, + ) host.bridge.addMethod( "psNodeDelete", ".plugin", @@ -905,6 +913,15 @@ class XEP_0060(object): d = request.send(client.xmlstream) return d + def _purgeNode(self, service_s, nodeIdentifier, profile_key): + client = self.host.getClient(profile_key) + return self.purgeNode( + client, jid.JID(service_s) if service_s else None, nodeIdentifier + ) + + def purgeNode(self, client, service, nodeIdentifier): + return client.pubsub_client.purgeNode(service, nodeIdentifier) + def _deleteNode(self, service_s, nodeIdentifier, profile_key): client = self.host.getClient(profile_key) return self.deleteNode( @@ -1443,6 +1460,19 @@ class SatPubSubClient(rsm.PubSubClient): return d.addCallback(cb) + def purgeNode(self, service, nodeIdentifier): + """Purge a node (i.e. delete all items from it) + + @param service(jid.JID, None): service to send the item to + None to use PEP + @param NodeIdentifier(unicode): PubSub node to use + """ + # TODO: propose this upstream and remove it once merged + request = pubsub.PubSubRequest('purge') + request.recipient = service + request.nodeIdentifier = nodeIdentifier + return request.send(self.xmlstream) + def getDiscoInfo(self, requestor, service, nodeIdentifier=""): disco_info = [] self.host.trigger.point("PubSub Disco Info", disco_info, self.parent.profile)