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".
This commit is contained in:
parent
677eebd553
commit
3e63d54e3d
5 changed files with 44 additions and 52 deletions
|
|
@ -396,6 +396,12 @@ class Const(object):
|
|||
KEY_THUMBNAILS = u"thumbnails"
|
||||
KEY_PROGRESS_ID = u"progress_id"
|
||||
|
||||
## Common extra keys/values ##
|
||||
KEY_ORDER_BY = u"order_by"
|
||||
|
||||
ORDER_BY_CREATION = u'creation'
|
||||
ORDER_BY_MODIFICATION = u'modification'
|
||||
|
||||
# internationalisation
|
||||
DEFAULT_LOCALE = u"en_GB"
|
||||
|
||||
|
|
|
|||
|
|
@ -272,21 +272,9 @@ class PubsubSchema(object):
|
|||
return d
|
||||
|
||||
@defer.inlineCallbacks
|
||||
def getDataFormItems(
|
||||
self,
|
||||
client,
|
||||
service,
|
||||
nodeIdentifier,
|
||||
schema=None,
|
||||
max_items=None,
|
||||
item_ids=None,
|
||||
sub_id=None,
|
||||
rsm_request=None,
|
||||
extra=None,
|
||||
default_node=None,
|
||||
form_ns=None,
|
||||
filters=None,
|
||||
):
|
||||
def getDataFormItems(self, client, service, nodeIdentifier, schema=None,
|
||||
max_items=None, item_ids=None, sub_id=None, rsm_request=None,
|
||||
extra=None, default_node=None, form_ns=None, filters=None):
|
||||
"""Get items known as being data forms, and convert them to XMLUI
|
||||
|
||||
@param schema(domish.Element, data_form.Form, None): schema of the node if known
|
||||
|
|
@ -499,19 +487,9 @@ class PubsubSchema(object):
|
|||
|
||||
return client, service, node, max_items, extra, sub_id
|
||||
|
||||
def _get(
|
||||
self,
|
||||
service="",
|
||||
node="",
|
||||
max_items=10,
|
||||
item_ids=None,
|
||||
sub_id=None,
|
||||
extra=None,
|
||||
default_node=None,
|
||||
form_ns=None,
|
||||
filters=None,
|
||||
profile_key=C.PROF_KEY_NONE,
|
||||
):
|
||||
def _get(self, service="", node="", max_items=10, item_ids=None, sub_id=None,
|
||||
extra=None, default_node=None, form_ns=None, filters=None,
|
||||
profile_key=C.PROF_KEY_NONE):
|
||||
"""Bridge method to retrieve data from node with schema
|
||||
|
||||
this method is a helper so dependant plugins can use it directly
|
||||
|
|
|
|||
|
|
@ -82,8 +82,8 @@ class XEP_0060(object):
|
|||
def __init__(self, host):
|
||||
log.info(_(u"PubSub plugin initialization"))
|
||||
self.host = host
|
||||
self._rsm = host.plugins.get("XEP-0059")
|
||||
self._mam = host.plugins.get("XEP-0313")
|
||||
self._rsm = host.plugins.get(u"XEP-0059")
|
||||
self._mam = host.plugins.get(u"XEP-0313")
|
||||
self._node_cb = {} # dictionnary of callbacks for node (key: node, value: list of callbacks)
|
||||
self.rt_sessions = sat_defer.RTDeferredSessions()
|
||||
host.bridge.addMethod(
|
||||
|
|
@ -321,6 +321,13 @@ class XEP_0060(object):
|
|||
rsm_request = None
|
||||
extra = {}
|
||||
else:
|
||||
# order-by
|
||||
if C.KEY_ORDER_BY in extra:
|
||||
# FIXME: we temporarily manage only one level of ordering
|
||||
# we need to switch to a fully serialised extra data
|
||||
# to be able to encode a whole ordered list
|
||||
extra[C.KEY_ORDER_BY] = [extra.pop(C.KEY_ORDER_BY)]
|
||||
|
||||
# rsm
|
||||
if self._rsm is None:
|
||||
rsm_request = None
|
||||
|
|
@ -336,6 +343,7 @@ class XEP_0060(object):
|
|||
if mam_request is not None:
|
||||
assert u"mam" not in extra
|
||||
extra[u"mam"] = mam_request
|
||||
|
||||
return Extra(rsm_request, extra)
|
||||
|
||||
def addManagedNode(self, node, **kwargs):
|
||||
|
|
@ -537,7 +545,14 @@ class XEP_0060(object):
|
|||
mam_query = extra["mam"]
|
||||
except KeyError:
|
||||
d = client.pubsub_client.items(
|
||||
service, node, max_items, item_ids, sub_id, None, rsm_request
|
||||
service = service,
|
||||
nodeIdentifier = node,
|
||||
maxItems = max_items,
|
||||
subscriptionIdentifier = sub_id,
|
||||
sender = None,
|
||||
itemIdentifiers = item_ids,
|
||||
orderBy = extra.get(C.KEY_ORDER_BY),
|
||||
rsm_request = rsm_request
|
||||
)
|
||||
# we have no MAM data here, so we add None
|
||||
d.addCallback(lambda data: data + (None,))
|
||||
|
|
@ -577,11 +592,11 @@ class XEP_0060(object):
|
|||
)
|
||||
)
|
||||
|
||||
def doSubscribe(items):
|
||||
def doSubscribe(data):
|
||||
self.subscribe(service, node, profile_key=client.profile).addErrback(
|
||||
subscribeEb, service, node
|
||||
)
|
||||
return items
|
||||
return data
|
||||
|
||||
if subscribe:
|
||||
d.addCallback(doSubscribe)
|
||||
|
|
@ -1324,6 +1339,7 @@ class SatPubSubClient(rsm.PubSubClient):
|
|||
except KeyError:
|
||||
continue
|
||||
|
||||
|
||||
def itemsReceived(self, event):
|
||||
log.debug(u"Pubsub items received")
|
||||
for callback in self._getNodeCallbacks(event.nodeIdentifier, C.PS_ITEMS):
|
||||
|
|
|
|||
|
|
@ -788,15 +788,8 @@ class XEP_0277(object):
|
|||
|
||||
## get ##
|
||||
|
||||
def _mbGet(
|
||||
self,
|
||||
service="",
|
||||
node="",
|
||||
max_items=10,
|
||||
item_ids=None,
|
||||
extra_dict=None,
|
||||
profile_key=C.PROF_KEY_NONE,
|
||||
):
|
||||
def _mbGet(self, service="", node="", max_items=10, item_ids=None, extra_dict=None,
|
||||
profile_key=C.PROF_KEY_NONE):
|
||||
"""
|
||||
@param max_items(int): maximum number of item to get, C.NO_LIMIT for no limit
|
||||
@param item_ids (list[unicode]): list of item IDs
|
||||
|
|
@ -816,16 +809,8 @@ class XEP_0277(object):
|
|||
)
|
||||
|
||||
@defer.inlineCallbacks
|
||||
def mbGet(
|
||||
self,
|
||||
client,
|
||||
service=None,
|
||||
node=None,
|
||||
max_items=10,
|
||||
item_ids=None,
|
||||
rsm_request=None,
|
||||
extra=None,
|
||||
):
|
||||
def mbGet(self, client, service=None, node=None, max_items=10, item_ids=None,
|
||||
rsm_request=None, extra=None):
|
||||
"""Get some microblogs
|
||||
|
||||
@param service(jid.JID, None): jid of the publisher
|
||||
|
|
|
|||
|
|
@ -162,6 +162,13 @@ class XEP_0313(object):
|
|||
if form_args:
|
||||
mam_args["form"] = mam.buildForm(**form_args)
|
||||
|
||||
# we only set orderBy if we have other MAM args
|
||||
# else we would make a MAM query while it's not expected
|
||||
if u"order_by" in extra and mam_args:
|
||||
order_by = extra.pop(u"order_by")
|
||||
assert isinstance(order_by, list)
|
||||
mam_args["orderBy"] = order_by
|
||||
|
||||
return mam.MAMRequest(**mam_args) if mam_args else None
|
||||
|
||||
def serialise(self, mam_response, data=None):
|
||||
|
|
|
|||
Loading…
Reference in a new issue