Mercurial > libervia-backend
comparison sat/plugins/plugin_xep_0060.py @ 2760:3480d4fdf83a
plugins XEP-0060, XEP-0313: implemented Order-By protoXEP:
new "order_by" key can be used in extra data, value can be, for now, "creation" or "modification".
author | Goffi <goffi@goffi.org> |
---|---|
date | Sun, 06 Jan 2019 17:36:51 +0100 |
parents | f4070693814a |
children | 9282b289b964 |
comparison
equal
deleted
inserted
replaced
2759:607cfc79e40f | 2760:3480d4fdf83a |
---|---|
80 ID_SINGLETON = "current" | 80 ID_SINGLETON = "current" |
81 | 81 |
82 def __init__(self, host): | 82 def __init__(self, host): |
83 log.info(_(u"PubSub plugin initialization")) | 83 log.info(_(u"PubSub plugin initialization")) |
84 self.host = host | 84 self.host = host |
85 self._rsm = host.plugins.get("XEP-0059") | 85 self._rsm = host.plugins.get(u"XEP-0059") |
86 self._mam = host.plugins.get("XEP-0313") | 86 self._mam = host.plugins.get(u"XEP-0313") |
87 self._node_cb = {} # dictionnary of callbacks for node (key: node, value: list of callbacks) | 87 self._node_cb = {} # dictionnary of callbacks for node (key: node, value: list of callbacks) |
88 self.rt_sessions = sat_defer.RTDeferredSessions() | 88 self.rt_sessions = sat_defer.RTDeferredSessions() |
89 host.bridge.addMethod( | 89 host.bridge.addMethod( |
90 "psNodeCreate", | 90 "psNodeCreate", |
91 ".plugin", | 91 ".plugin", |
319 """ | 319 """ |
320 if extra is None: | 320 if extra is None: |
321 rsm_request = None | 321 rsm_request = None |
322 extra = {} | 322 extra = {} |
323 else: | 323 else: |
324 # order-by | |
325 if C.KEY_ORDER_BY in extra: | |
326 # FIXME: we temporarily manage only one level of ordering | |
327 # we need to switch to a fully serialised extra data | |
328 # to be able to encode a whole ordered list | |
329 extra[C.KEY_ORDER_BY] = [extra.pop(C.KEY_ORDER_BY)] | |
330 | |
324 # rsm | 331 # rsm |
325 if self._rsm is None: | 332 if self._rsm is None: |
326 rsm_request = None | 333 rsm_request = None |
327 else: | 334 else: |
328 rsm_request = self._rsm.parseExtra(extra) | 335 rsm_request = self._rsm.parseExtra(extra) |
334 mam_request = self._mam.parseExtra(extra, with_rsm=False) | 341 mam_request = self._mam.parseExtra(extra, with_rsm=False) |
335 | 342 |
336 if mam_request is not None: | 343 if mam_request is not None: |
337 assert u"mam" not in extra | 344 assert u"mam" not in extra |
338 extra[u"mam"] = mam_request | 345 extra[u"mam"] = mam_request |
346 | |
339 return Extra(rsm_request, extra) | 347 return Extra(rsm_request, extra) |
340 | 348 |
341 def addManagedNode(self, node, **kwargs): | 349 def addManagedNode(self, node, **kwargs): |
342 """Add a handler for a node | 350 """Add a handler for a node |
343 | 351 |
535 extra = {} | 543 extra = {} |
536 try: | 544 try: |
537 mam_query = extra["mam"] | 545 mam_query = extra["mam"] |
538 except KeyError: | 546 except KeyError: |
539 d = client.pubsub_client.items( | 547 d = client.pubsub_client.items( |
540 service, node, max_items, item_ids, sub_id, None, rsm_request | 548 service = service, |
549 nodeIdentifier = node, | |
550 maxItems = max_items, | |
551 subscriptionIdentifier = sub_id, | |
552 sender = None, | |
553 itemIdentifiers = item_ids, | |
554 orderBy = extra.get(C.KEY_ORDER_BY), | |
555 rsm_request = rsm_request | |
541 ) | 556 ) |
542 # we have no MAM data here, so we add None | 557 # we have no MAM data here, so we add None |
543 d.addCallback(lambda data: data + (None,)) | 558 d.addCallback(lambda data: data + (None,)) |
544 else: | 559 else: |
545 # if mam is requested, we have to do a totally different query | 560 # if mam is requested, we have to do a totally different query |
575 u"Could not subscribe to node {} on service {}: {}".format( | 590 u"Could not subscribe to node {} on service {}: {}".format( |
576 node, unicode(service), unicode(failure.value) | 591 node, unicode(service), unicode(failure.value) |
577 ) | 592 ) |
578 ) | 593 ) |
579 | 594 |
580 def doSubscribe(items): | 595 def doSubscribe(data): |
581 self.subscribe(service, node, profile_key=client.profile).addErrback( | 596 self.subscribe(service, node, profile_key=client.profile).addErrback( |
582 subscribeEb, service, node | 597 subscribeEb, service, node |
583 ) | 598 ) |
584 return items | 599 return data |
585 | 600 |
586 if subscribe: | 601 if subscribe: |
587 d.addCallback(doSubscribe) | 602 d.addCallback(doSubscribe) |
588 | 603 |
589 def addMetadata(result): | 604 def addMetadata(result): |
1322 for callback in callbacks_dict[event]: | 1337 for callback in callbacks_dict[event]: |
1323 yield callback | 1338 yield callback |
1324 except KeyError: | 1339 except KeyError: |
1325 continue | 1340 continue |
1326 | 1341 |
1342 | |
1327 def itemsReceived(self, event): | 1343 def itemsReceived(self, event): |
1328 log.debug(u"Pubsub items received") | 1344 log.debug(u"Pubsub items received") |
1329 for callback in self._getNodeCallbacks(event.nodeIdentifier, C.PS_ITEMS): | 1345 for callback in self._getNodeCallbacks(event.nodeIdentifier, C.PS_ITEMS): |
1330 callback(self.parent, event) | 1346 callback(self.parent, event) |
1331 client = self.parent | 1347 client = self.parent |