changeset 1509:72e6ee3fdf53

plugin XEP-0055: add "Directory subscription" menu + use the category "Service" for this plugin's menus instead of "Communication"
author souliane <souliane@mailoo.org>
date Wed, 02 Sep 2015 14:59:28 +0200
parents ec60682a9d17
children 91631837ce5c
files src/plugins/plugin_xep_0055.py
diffstat 1 files changed, 41 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/plugins/plugin_xep_0055.py	Wed Sep 02 13:57:46 2015 +0200
+++ b/src/plugins/plugin_xep_0055.py	Wed Sep 02 14:59:28 2015 +0200
@@ -46,7 +46,7 @@
     "type": "XEP",
     "protocols": ["XEP-0055"],
     "dependencies": [],
-    "recommendations": ["XEP-0059"],
+    "recommendations": ["XEP-0050", "XEP-0059"],
     "main": "XEP_0055",
     "handler": "no",
     "description": _("""Implementation of Jabber Search""")
@@ -78,7 +78,18 @@
                               async=True)
 
         self.__search_menu_id = host.registerCallback(self._getMainUI, with_data=True)
-        host.importMenu((D_("Communication"), D_("Search directory")), self._getMainUI, security_limit=1, help_string=D_("Search use directory"))
+        host.importMenu((D_("Service"), D_("Search directory")), self._getMainUI, security_limit=1, help_string=D_("Search user directory"))
+        if "XEP-0050" in host.plugins:
+            host.importMenu((D_("Service"), D_("Directory subscription")), self.subscribe, security_limit=1, help_string=D_("User directory subscription"))
+
+    def _getHostServices(self, profile):
+        """Return the jabber search services associated to the user host.
+        
+        @param profile (unicode): %(doc_profile)s
+        @return: list[jid.JID]
+        """
+        d = self.host.findFeaturesSet([NS_SEARCH], profile_key=profile)
+        return d.addCallback(lambda set_: list(set_))
 
 
     ## Main search UI (menu item callback) ##
@@ -92,8 +103,8 @@
         @return: a deferred XMLUI string representation
         """
         # check if the user's server offers some search services
-        d = self.host.findFeaturesSet([NS_SEARCH], profile_key=profile)
-        return d.addCallback(lambda services: self.getMainUI(list(services), raw_data, profile))
+        d = self._getHostServices(profile)
+        return d.addCallback(lambda services: self.getMainUI(services, raw_data, profile))
 
     def getMainUI(self, services, raw_data, profile):
         """Get the XMLUI for selecting a service and searching the directory.
@@ -436,6 +447,32 @@
         raise failure
 
 
+    ## Subscription ##
+
+
+    def subscribe(self, raw_data, profile):
+        """Request available commands on the jabber search service associated to profile's host.
+
+        @param raw_data (dict): data received from the frontend
+        @param profile (unicode): %(doc_profile)s
+        @return: a deferred dict{unicode: unicode}
+        """
+        d = self._getHostServices(profile)
+        
+        def got_services(services):
+            service_jid = services[0]
+            d = self.host.plugins["XEP-0050"].requestCommandsList(service_jid, profile)
+            return d.addCallback(got_commands, service_jid)
+
+        def got_commands(form_ui, service_jid):
+            session_id, session_data = self.host.plugins["XEP-0050"].requesting.newSession(profile=profile)
+            session_data["jid"] = service_jid
+            form_ui.session_id = session_id
+            return {'xmlui': form_ui.toXml()}
+
+        return d.addCallback(got_services)
+
+
 class XEP_0059_handler(XMPPHandler):
     implements(iwokkel.IDisco)