Mercurial > libervia-backend
diff src/plugins/plugin_misc_groupblog.py @ 310:53adec87d1d7
plugin group blog: group blog subscription
author | Goffi <goffi@goffi.org> |
---|---|
date | Mon, 11 Apr 2011 12:47:35 +0200 |
parents | ce3607b7198d |
children | 0aa6ca6cdbdd |
line wrap: on
line diff
--- a/src/plugins/plugin_misc_groupblog.py Sat Apr 09 13:17:31 2011 +0200 +++ b/src/plugins/plugin_misc_groupblog.py Mon Apr 11 12:47:35 2011 +0200 @@ -34,10 +34,12 @@ MBLOG_COLLECTION = 'MBLOGCOLLECTION' CONFIG_NODE = 'CONFIG' -NS_ACCESS_MODEL = 'pubsub#access_model' -NS_PERSIST_ITEMS = 'pubsub#persist_items' -NS_MAX_ITEMS = 'pubsub#max_items' -NS_NODE_TYPE = 'pubsub#node_type' +OPT_ACCESS_MODEL = 'pubsub#access_model' +OPT_PERSIST_ITEMS = 'pubsub#persist_items' +OPT_MAX_ITEMS = 'pubsub#max_items' +OPT_NODE_TYPE = 'pubsub#node_type' +OPT_SUBSCRIPTION_TYPE = 'pubsub#subscription_type' +OPT_SUBSCRIPTION_DEPTH = 'pubsub#subscription_depth' TYPE_COLLECTION = 'collection' PLUGIN_INFO = { @@ -85,6 +87,13 @@ 'param_1':'text to send', 'param_2':'%(doc_profile)s' }) + + host.bridge.addMethod("subscribeGroupBlog", ".communication", in_sign='ss', out_sign='', + method=self.subscribeGroupBlog, + doc = { 'summary':"Subscribe to the group blog of somebody", + 'param_0':'jid of the group node published', + 'param_1':'%(doc_profile)s' + }) def _getRootNode(self, entity): return "%(entity)s_%(root_suff)s" % {'entity':entity.userhost(), 'root_suff':MBLOG_COLLECTION} @@ -105,14 +114,14 @@ def _configNodeFail(self, failure, errback): import pdb pdb.set_trace() - errback() #FIXME + errback("") #FIXME def _configNodeErr(self, failure, user_jid, pubsub_ent, callback, errback, profile): if failure.value.condition == 'item-not-found': debug(_('Multiblog config node not found, creating it')) - _options = {NS_ACCESS_MODEL:"whitelist", NS_PERSIST_ITEMS:1, NS_MAX_ITEMS:-1} + _options = {OPT_ACCESS_MODEL:"whitelist", OPT_PERSIST_ITEMS:1, OPT_MAX_ITEMS:-1} d = self.host.plugins["XEP-0060"].createNode(pubsub_ent, self._getConfigNode(user_jid), _options, profile_key=profile) - d.addCallback(self._configNodeCb, callback, profile) + d.addCallback(lambda result: self._configNodeCb([] , callback, profile)) d.addErrback(self._configNodeFail, errback) else: self._configNodeFail(failure, errback) @@ -187,7 +196,7 @@ error(msg) raise NodeCreationError(msg) - _options = {NS_NODE_TYPE:TYPE_COLLECTION} + _options = {OPT_NODE_TYPE:TYPE_COLLECTION} d = self.host.plugins["XEP-0060"].createNode(pubsub_ent, self._getRootNode(user_jid), _options, profile_key=profile) d.addCallback(self._createNode, name, user_jid, groups, pubsub_ent, message, profile) d.addErrback(err_creating_root_node) @@ -204,7 +213,7 @@ @param pubsub_ent: publish/subscribe service's entity @param message: message to publish @param profile: profile of the user creating the node""" - _options = {NS_ACCESS_MODEL:"roster", NS_PERSIST_ITEMS:1, NS_MAX_ITEMS:-1, + _options = {OPT_ACCESS_MODEL:"roster", OPT_PERSIST_ITEMS:1, OPT_MAX_ITEMS:-1, 'pubsub#node_type':'leaf', 'pubsub#collection':self._getRootNode(user_jid), 'pubsub#roster_groups_allowed':groups} d = self.host.plugins["XEP-0060"].createNode(pubsub_ent, name, _options, profile_key=profile) @@ -293,3 +302,23 @@ return client.client_initialized.addCallback(after_init) + def subscribeGroupBlog(self, pub_jid, profile_key='@DEFAULT@'): + debug(_('subscribing mblog nodes')) + _pub_jid = jid.JID(pub_jid) + profile = self.host.memory.getProfileName(profile_key) + if not profile: + error(_("Unknown profile")) + return + + def after_init(ignore): + pubsub_ent = self.host.memory.getServerServiceEntity("pubsub", "service", profile) + _options = {OPT_SUBSCRIPTION_TYPE:'items', OPT_SUBSCRIPTION_DEPTH:'1'} + d = self.host.plugins["XEP-0060"].subscribe(pubsub_ent, self._getRootNode(_pub_jid), options = _options, profile_key=profile) + d.addCallback(lambda x: debug(_("%(publisher)s's group node subscribed [%(profile)s]") % {'publisher':_pub_jid.userhost(), 'profile': profile})) + d.addErrback(lambda x: error(_("Can't subscribe group node [%(profile)s]") % {'profile': profile})) + + client = self.host.getClient(profile) + if not client: + error(_('No client for this profile key: %s') % profile_key) + return + client.client_initialized.addCallback(after_init)