def manageSubscriptions(sender, name, subs, xs): old_subscriptions = yield psaff.getSubscriptions( sender=sender, node=name, xs=xs) old_subs = set() for s in old_subscriptions: s.state = 'none' old_subs.add(s) if len(old_subs) > 0: yield psaff.makeSubscriptions( sender=sender, node=name, subscriptions=old_subs, xs=xs) new_subs = set() for s in subs: new_subs.add(ps.Subscription( nodeIdentifier=None, subscriber=s, state='subscribed' )) if len(new_subs) > 0: yield psaff.makeSubscriptions( sender=sender, node=name, subscriptions=new_subs, xs=xs)
def cb(new_node): # need some way of identifying these nodes if APIMixin gets restarted # e.g. use pubsub node tree and have an API folder? self.clients[jid] = new_node ds = [] ds.append(psaff.makeSubscriptions( self.jid, new_node, set([ps.Subscription( nodeIdentifier=None, subscriber=jid, state='subscribed' )]), self.psclient.xmlstream )) ds.append(psaff.makeAffiliations( self.jid, new_node, dict({jid.full(): 'publisher'}), self.psclient.xmlstream )) def inner(data): return new_node def eb(err): return self.api_unregister(jid) l = defer.DeferredList(ds) l.addCallbacks(inner, eb) return l