diff sat_pubsub/backend.py @ 355:c72fcbdcdab7

backend: fixed subscription, PEP was not handled correctly
author Goffi <goffi@goffi.org>
date Fri, 08 Sep 2017 08:02:05 +0200
parents 18b983fe9e1b
children 1167e48e5f52
line wrap: on
line diff
--- a/sat_pubsub/backend.py	Fri Sep 08 08:02:05 2017 +0200
+++ b/sat_pubsub/backend.py	Fri Sep 08 08:02:05 2017 +0200
@@ -460,11 +460,10 @@
 
         d = self.storage.getNode(nodeIdentifier, pep, recipient)
         d.addCallback(_getAffiliation, subscriberEntity)
-        d.addCallback(self._doSubscribe, subscriber)
+        d.addCallback(self._doSubscribe, subscriber, pep, recipient)
         return d
 
-    def _doSubscribe(self, result, subscriber):
-        # TODO: implement other access models
+    def _doSubscribe(self, result, subscriber, pep, recipient):
         node, affiliation = result
 
         if affiliation == 'outcast':
@@ -490,22 +489,24 @@
         def cb(sendLast):
             d = node.getSubscription(subscriber)
             if sendLast:
-                d.addCallback(self._sendLastPublished, node)
+                d.addCallback(self._sendLastPublished, node, pep, recipient)
             return d
 
-        d = node.addSubscription(subscriber, 'subscribed', {})
+        d.addCallback(lambda _: node.addSubscription(subscriber, 'subscribed', {}))
         d.addCallbacks(lambda _: True, trapExists)
         d.addCallback(cb)
 
         return d
 
-    def _sendLastPublished(self, subscription, node):
+    def _sendLastPublished(self, subscription, node, pep, recipient):
 
-        def notifyItem(items):
-            if items:
+        def notifyItem(items_data):
+            if items_data:
                 reactor.callLater(0, self.dispatch,
-                                     {'items': items,
+                                     {'items_data': items_data,
                                       'node': node,
+                                      'pep': pep,
+                                      'recipient': recipient,
                                       'subscription': subscription,
                                      },
                                      '//event/pubsub/notify')
@@ -515,7 +516,7 @@
                                        'never')
         if sendLastPublished == 'on_sub' and node.nodeType == 'leaf':
             entity = subscription.subscriber.userhostJID()
-            d = self.getItems(node.nodeIdentifier, entity, 1)
+            d = self.getItemsData(node.nodeIdentifier, entity, recipient, maxItems=1, ext_data={'pep': pep})
             d.addCallback(notifyItem)
             d.addErrback(log.err)
 
@@ -529,8 +530,8 @@
         d.addCallback(lambda node: node.removeSubscription(subscriber))
         return d
 
-    def getSubscriptions(self, entity):
-        return self.storage.getSubscriptions(entity)
+    def getSubscriptions(self, requestor, pep, recipient):
+        return self.storage.getSubscriptions(requestor, pep, recipient)
 
     def supportsAutoCreate(self):
         return True