plugin XEP-0055: add "Directory subscription" menu + use the category "Service" for this plugin's menus instead of "Communication"
This commit is contained in:
parent
c00b54a04a
commit
b344feb420
1 changed files with 41 additions and 4 deletions
|
|
@ -46,7 +46,7 @@ PLUGIN_INFO = {
|
|||
"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 @@ class XEP_0055(object):
|
|||
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 @@ class XEP_0055(object):
|
|||
@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 @@ class XEP_0055(object):
|
|||
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)
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue