diff src/plugins/plugin_misc_groupblog.py @ 944:e1842ebcb2f3

core, plugin XEP-0115: discovery refactoring: - hashing algorithm of XEP-0115 has been including in core - our own hash is still calculated by XEP-0115 and can be regenerated with XEP_0115.recalculateHash - old discovery methods have been removed. Now the following methods are used: - hasFeature: tell if a feature is available for an entity - getDiscoInfos: self explaining - getDiscoItems: self explaining - findServiceEntities: return all available items of an entity which given (category, type) - findFeaturesSet: search for a set of features in entity + entity's items all these methods are asynchronous, and manage cache automatically - XEP-0115 manage in a better way hashes, and now use a trigger for presence instead of monkey patch - new FeatureNotFound exception, when we want to do something which is not available - refactored client initialisation sequence, removed client.initialized Deferred - added constant APP_URL - test_plugin_xep_0033.py has been temporarly deactivated, the time to adapt it - lot of cleaning
author Goffi <goffi@goffi.org>
date Fri, 28 Mar 2014 18:07:22 +0100
parents c6d8fc63b1db
children 301b342c697a
line wrap: on
line diff
--- a/src/plugins/plugin_misc_groupblog.py	Fri Mar 28 18:07:17 2014 +0100
+++ b/src/plugins/plugin_misc_groupblog.py	Fri Mar 28 18:07:22 2014 +0100
@@ -154,26 +154,18 @@
             raise exceptions.ProfileUnknownError
 
         client = self.host.getClient(profile)
-        yield client.client_initialized  # we want to be sure that the client is initialized
 
         #we first check that we have a item-access pubsub server
         if not hasattr(client, "item_access_pubsub"):
-            debug(_('Looking for item-access power pubsub server'))
+            debug(_('Looking for item-access powered pubsub server'))
             #we don't have any pubsub server featuring item access yet
-            client.item_access_pubsub = None
-            client._item_access_pubsub_pending = defer.Deferred()
-            for entity in self.host.memory.getServerServiceEntities("pubsub", "service", profile=profile):
-                _disco = yield client.disco.requestInfo(entity)
-                #if set([NS_PUBSUB_ITEM_ACCESS, NS_PUBSUB_AUTO_CREATE, NS_PUBSUB_CREATOR_JID_CHECK]).issubset(_disco.features):
-                if set([NS_PUBSUB_AUTO_CREATE, NS_PUBSUB_CREATOR_JID_CHECK]).issubset(_disco.features):
-                    info(_("item-access powered pubsub service found: [%s]") % entity.full())
-                    client.item_access_pubsub = entity
-            client._item_access_pubsub_pending.callback(None)
-
-        if hasattr(client, "_item_access_pubsub_pending"):
-            #XXX: we need to wait for item access pubsub service check
-            yield client._item_access_pubsub_pending
-            del client._item_access_pubsub_pending
+            item_access_pubsubs = yield self.host.findFeaturesSet((NS_PUBSUB_AUTO_CREATE, NS_PUBSUB_CREATOR_JID_CHECK), "pubsub", "service", profile_key=profile)
+            # item_access_pubsubs = yield self.host.findFeaturesSet((NS_PUBSUB_ITEM_ACCESS, NS_PUBSUB_AUTO_CREATE, NS_PUBSUB_CREATOR_JID_CHECK), "pubsub", "service", profile_key=profile)
+            try:
+                client.item_access_pubsub = item_access_pubsubs.pop()
+                info(_("item-access powered pubsub service found: [%s]") % client.item_access_pubsub.full())
+            except KeyError:
+                client.item_access_pubsub = None
 
         if not client.item_access_pubsub:
             error(_("No item-access powered pubsub server found, can't use group blog"))