plugin groupblog: groupblog compatible pubsub service is checked in profileConected + getFeatures implementation

This commit is contained in:
Goffi 2015-08-21 19:23:14 +02:00
commit fe5cc0ac0a

View file

@ -42,10 +42,10 @@ NS_NODE_PREFIX = 'urn:xmpp:groupblog:'
#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
@ -142,6 +142,33 @@ class GroupBlog(object):
def getHandler(self, profile):
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