plugin groupblog, D-Bus frontend: added getLastGroupBlogs and getMassiveLastGroupBlogs

This commit is contained in:
Goffi 2012-04-01 19:48:31 +02:00
commit 723b468fcc

View file

@ -167,7 +167,7 @@ class GroupBlog():
def getLastGroupBlogs(self, pub_jid, max_items=10, profile_key='@DEFAULT@', callback=None, errback=None):
def getLastGroupBlogs(self, pub_jid, max_items=10, profile_key='@DEFAULT@'):
"""Get the last published microblogs
@param pub_jid: jid of the publisher
@param max_items: how many microblogs we want to get
@ -180,20 +180,17 @@ class GroupBlog():
profile, client = result
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)
d.addCallback(lambda items: map(self.host.plugins["XEP-0277"].item2mbdata, items))
assert(callback)
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):
def getMassiveLastGroupBlogs(self, publishers_type, publishers, max_items=10, profile_key='@DEFAULT@'):
"""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"""
@ -205,31 +202,27 @@ class GroupBlog():
source_jid, data = value
ret[source_jid] = data
callback(ret)
return 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)
dlist.addCallback(sendResult)
return dlist
return defer.fail("Unknown type")
#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")