plugin group blog: getMassiveGroupBlog first draft
This commit is contained in:
parent
972b4c2555
commit
8d8b0d54a8
1 changed files with 64 additions and 2 deletions
|
|
@ -87,6 +87,12 @@ class GroupBlog():
|
|||
'param_2':'%(doc_profile)s',
|
||||
'return':'list of microblog data (dict)'
|
||||
})
|
||||
|
||||
host.bridge.addMethod("getMassiveLastGroupBlogs", ".plugin",
|
||||
in_sign='sasis', out_sign='a{saa{ss}}',
|
||||
method=self.getMassiveLastGroupBlogs,
|
||||
async = True)
|
||||
|
||||
|
||||
@defer.inlineCallbacks
|
||||
def initialise(self, profile_key):
|
||||
|
|
@ -117,7 +123,7 @@ class GroupBlog():
|
|||
client.item_access_pubsub = entity
|
||||
|
||||
if not client.item_access_pubsub:
|
||||
error(_("No item-access powered pubsub server found, can't post group blog"))
|
||||
error(_("No item-access powered pubsub server found, can't use group blog"))
|
||||
raise NoCompatiblePubSubServerFound
|
||||
|
||||
defer.returnValue((profile, client))
|
||||
|
|
@ -180,3 +186,55 @@ class GroupBlog():
|
|||
self.initialise(profile_key).addCallback(initialised)
|
||||
#TODO: we need to use the server corresponding the the host of the jid
|
||||
|
||||
def getMassiveLastGroupBlogs(self, publishers_type, publishers, max_items=10, profile_key='@DEFAULT@', callback=None, errback=None):
|
||||
"""Get the last published microblogs for a list of groups or jids
|
||||
@param publishers_type: type of the list of publishers (one of "GROUP" or "JID" or "ALL")
|
||||
@param publishers: list of publishers, according to "publishers_type" (list of groups or list of jids)
|
||||
@param max_items: how many microblogs we want to get
|
||||
@param profile_key: profile key
|
||||
@param callback: used for the async answer
|
||||
@param errback: used for the async answer
|
||||
"""
|
||||
def sendResult(result):
|
||||
"""send result of DeferredList (list of microblogs to the calling method"""
|
||||
|
||||
ret = {}
|
||||
|
||||
for (success, value) in result:
|
||||
if success:
|
||||
source_jid, data = value
|
||||
ret[source_jid] = data
|
||||
|
||||
callback(ret)
|
||||
|
||||
def initialised(result):
|
||||
profile, client = result
|
||||
|
||||
if publishers_type == "ALL":
|
||||
contacts = client.roster.getItems()
|
||||
print "contacts:", contacts
|
||||
jids = [contact.jid.userhost() for contact in contacts]
|
||||
print "jids:", jids
|
||||
mblogs = []
|
||||
for _jid in jids:
|
||||
d = self.host.plugins["XEP-0060"].getItems(client.item_access_pubsub, jid.JID(_jid).userhost(),
|
||||
max_items=max_items, profile_key=profile_key)
|
||||
#TODO: check empty result (nothing published so far)
|
||||
d.addCallback(lambda items, source_jid: (source_jid, map(self.host.plugins["XEP-0277"].item2mbdata, items)), _jid)
|
||||
mblogs.append(d)
|
||||
dlist = defer.DeferredList(mblogs)
|
||||
dlist.addCallback(sendResult)
|
||||
|
||||
#d = self.host.plugins["XEP-0060"].getItems(client.item_access_pubsub, jid.JID(pub_jid).userhost(),
|
||||
# max_items=max_items, profile_key=profile_key)
|
||||
#d.addCallbacks(lambda items: callback(map(self.host.plugins["XEP-0277"].item2mbdata, items)), errback)
|
||||
|
||||
assert(callback)
|
||||
#TODO: custom exception
|
||||
if publishers_type not in ["GROUP", "JID", "ALL"]:
|
||||
raise Exception("Bad call, unknown publishers_type")
|
||||
if publishers_type=="ALL" and publishers:
|
||||
raise Exception("Publishers list must be empty when getting microblogs for all contacts")
|
||||
return self.initialise(profile_key).addCallback(initialised)
|
||||
#TODO: we need to use the server corresponding the the host of the jid
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue