# HG changeset patch # User Goffi # Date 1440177794 -7200 # Node ID 9fcc16ef163a1611cfd0e3bbfe119482c4ec474e # Parent 05b821a0ff5a3443f81727e9e35352966f857f5b plugin groupblog: groupblog compatible pubsub service is checked in profileConected + getFeatures implementation diff -r 05b821a0ff5a -r 9fcc16ef163a src/plugins/plugin_misc_groupblog.py --- a/src/plugins/plugin_misc_groupblog.py Fri Aug 21 19:23:13 2015 +0200 +++ b/src/plugins/plugin_misc_groupblog.py Fri Aug 21 19:23:14 2015 +0200 @@ -42,10 +42,10 @@ #NS_PUBSUB_EXP = 'http://goffi.org/protocol/pubsub' #for non official features NS_PUBSUB_EXP = NS_PUBSUB # XXX: we can't use custom namespace as Wokkel's PubSubService use official NS NS_PUBSUB_ITEM_ACCESS = NS_PUBSUB_EXP + "#item-access" +NS_PUBSUB_GROUPBLOG = NS_PUBSUB_EXP + "#groupblog" NS_PUBSUB_CREATOR_JID_CHECK = NS_PUBSUB_EXP + "#creator-jid-check" NS_PUBSUB_ITEM_CONFIG = NS_PUBSUB_EXP + "#item-config" NS_PUBSUB_AUTO_CREATE = NS_PUBSUB + "#auto-create" -TYPE_COLLECTION = 'collection' ACCESS_TYPE_MAP = { 'PUBLIC': 'open', 'GROUP': 'roster', 'JID': None, #JID is not yet managed @@ -143,6 +143,33 @@ return GroupBlog_handler() @defer.inlineCallbacks + def profileConnected(self, profile): + client = self.host.getClient(profile) + groupblog_services = yield self.host.findFeaturesSet((NS_PUBSUB_GROUPBLOG, NS_PUBSUB_AUTO_CREATE), "pubsub", "service", profile_key=profile) + if groupblog_services: + # we use one of the found services as our default pubsub service + client.groupblog_service = groupblog_services.pop() + log.info(_(u"item-access powered pubsub service found: {}").format(client.groupblog_service.full())) + else: + client.groupblog_service = None + log.warning(_(u"No item-access powered pubsub server found, can't use group blog")) + + def getFeatures(self, profile): + try: + client = self.host.getClient(profile) + except exceptions.ProfileNotSetError: + return {} + try: + return {'service': client.groupblog_service.full() if client.groupblog_service is not None else ''} + except AttributeError: + if self.host.isConnected(profile): + log.debug("Profile is not connected, service is not checked yet") + else: + log.error("Service should be available !") + return {} + + + @defer.inlineCallbacks def _initialise(self, profile_key): """Check that the data for this profile are initialised, and do it else @param profile_key: %(doc_profile)s"""