Mercurial > libervia-backend
annotate src/plugins/plugin_xep_0055.py @ 1596:b7ee113183fc
jp: better profile commands:
- new "profile/default" command
- info doesn't show password anymore by default, need to be explicitly requested
- info and modify don't need to connect anymore
- modify can now set default profile. As use_profile is set, at least a profile session need to be started when it would not be mandatory technicaly (if just setting the profile as default is needed). But this option should not be used often, and it's not a big side effect, so I don't feel the need to create a new dedicated command, or to do complicated checks to avoid the session start.
author | Goffi <goffi@goffi.org> |
---|---|
date | Sat, 14 Nov 2015 19:18:10 +0100 |
parents | e0bde0d0b321 |
children | 94c450972346 |
rev | line source |
---|---|
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1 #!/usr/bin/python |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2 # -*- coding: utf-8 -*- |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
3 |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
4 # SAT plugin for Jabber Search (xep-0055) |
1396 | 5 # Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015 Jérôme Poisson (goffi@goffi.org) |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
6 |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
7 # This program is free software: you can redistribute it and/or modify |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
8 # it under the terms of the GNU Affero General Public License as published by |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
9 # the Free Software Foundation, either version 3 of the License, or |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
10 # (at your option) any later version. |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
11 |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
12 # This program is distributed in the hope that it will be useful, |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
15 # GNU Affero General Public License for more details. |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
16 |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
17 # You should have received a copy of the GNU Affero General Public License |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
19 |
799
7f2082b192ed
plugin XEP-0055, Primitivus: Directory search dialogs are now entirely done in plugin XEP-0055, specific code in frontend is not needed anymore
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
20 from sat.core.i18n import _, D_ |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
867
diff
changeset
|
21 from sat.core.log import getLogger |
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
867
diff
changeset
|
22 log = getLogger(__name__) |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
23 |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
24 from twisted.words.protocols.jabber.xmlstream import IQ |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
25 from twisted.words.protocols.jabber import jid |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
867
diff
changeset
|
26 from twisted.internet import defer |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
27 from wokkel import data_form |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
28 from sat.core.constants import Const as C |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
29 from sat.core.exceptions import DataError |
799
7f2082b192ed
plugin XEP-0055, Primitivus: Directory search dialogs are now entirely done in plugin XEP-0055, specific code in frontend is not needed anymore
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
30 from sat.tools import xml_tools |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
31 |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
32 from wokkel import disco, iwokkel |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
33 try: |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
34 from twisted.words.protocols.xmlstream import XMPPHandler |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
35 except ImportError: |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
36 from wokkel.subprotocols import XMPPHandler |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
37 from zope.interface import implements |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
38 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
39 |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
40 NS_SEARCH = 'jabber:iq:search' |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
41 |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
42 PLUGIN_INFO = { |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
43 "name": "Jabber Search", |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
44 "import_name": "XEP-0055", |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
45 "type": "XEP", |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
46 "protocols": ["XEP-0055"], |
1219
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
47 "dependencies": [], |
1509
72e6ee3fdf53
plugin XEP-0055: add "Directory subscription" menu + use the category "Service" for this plugin's menus instead of "Communication"
souliane <souliane@mailoo.org>
parents:
1508
diff
changeset
|
48 "recommendations": ["XEP-0050", "XEP-0059"], |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
49 "main": "XEP_0055", |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
50 "handler": "no", |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
51 "description": _("""Implementation of Jabber Search""") |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
52 } |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
53 |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
54 # config file parameters |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
55 CONFIG_SECTION = "plugin search" |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
56 CONFIG_SERVICE_LIST = "service_list" |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
57 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
58 DEFAULT_SERVICE_LIST = ["salut.libervia.org"] |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
59 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
60 FIELD_SINGLE = "field_single" # single text field for the simple search |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
61 FIELD_CURRENT_SERVICE = "current_service_jid" # read-only text field for the advanced search |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
62 |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
63 class XEP_0055(object): |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
64 |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
65 def __init__(self, host): |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
867
diff
changeset
|
66 log.info(_("Jabber search plugin initialization")) |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
67 self.host = host |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
68 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
69 # default search services (config file + hard-coded lists) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
70 self.services = [jid.JID(entry) for entry in host.memory.getConfig(CONFIG_SECTION, CONFIG_SERVICE_LIST, DEFAULT_SERVICE_LIST)] |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
71 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
72 host.bridge.addMethod("searchGetFieldsUI", ".plugin", in_sign='ss', out_sign='s', |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
73 method=self._getFieldsUI, |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
74 async=True) |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
75 host.bridge.addMethod("searchRequest", ".plugin", in_sign='sa{ss}s', out_sign='s', |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
76 method=self._searchRequest, |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
77 async=True) |
799
7f2082b192ed
plugin XEP-0055, Primitivus: Directory search dialogs are now entirely done in plugin XEP-0055, specific code in frontend is not needed anymore
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
78 |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
79 self.__search_menu_id = host.registerCallback(self._getMainUI, with_data=True) |
1509
72e6ee3fdf53
plugin XEP-0055: add "Directory subscription" menu + use the category "Service" for this plugin's menus instead of "Communication"
souliane <souliane@mailoo.org>
parents:
1508
diff
changeset
|
80 host.importMenu((D_("Service"), D_("Search directory")), self._getMainUI, security_limit=1, help_string=D_("Search user directory")) |
72e6ee3fdf53
plugin XEP-0055: add "Directory subscription" menu + use the category "Service" for this plugin's menus instead of "Communication"
souliane <souliane@mailoo.org>
parents:
1508
diff
changeset
|
81 if "XEP-0050" in host.plugins: |
72e6ee3fdf53
plugin XEP-0055: add "Directory subscription" menu + use the category "Service" for this plugin's menus instead of "Communication"
souliane <souliane@mailoo.org>
parents:
1508
diff
changeset
|
82 host.importMenu((D_("Service"), D_("Directory subscription")), self.subscribe, security_limit=1, help_string=D_("User directory subscription")) |
72e6ee3fdf53
plugin XEP-0055: add "Directory subscription" menu + use the category "Service" for this plugin's menus instead of "Communication"
souliane <souliane@mailoo.org>
parents:
1508
diff
changeset
|
83 |
72e6ee3fdf53
plugin XEP-0055: add "Directory subscription" menu + use the category "Service" for this plugin's menus instead of "Communication"
souliane <souliane@mailoo.org>
parents:
1508
diff
changeset
|
84 def _getHostServices(self, profile): |
72e6ee3fdf53
plugin XEP-0055: add "Directory subscription" menu + use the category "Service" for this plugin's menus instead of "Communication"
souliane <souliane@mailoo.org>
parents:
1508
diff
changeset
|
85 """Return the jabber search services associated to the user host. |
1552
e0bde0d0b321
core (disco): use of “profile” instead of “profile_key” in several disco methods
Goffi <goffi@goffi.org>
parents:
1509
diff
changeset
|
86 |
1509
72e6ee3fdf53
plugin XEP-0055: add "Directory subscription" menu + use the category "Service" for this plugin's menus instead of "Communication"
souliane <souliane@mailoo.org>
parents:
1508
diff
changeset
|
87 @param profile (unicode): %(doc_profile)s |
72e6ee3fdf53
plugin XEP-0055: add "Directory subscription" menu + use the category "Service" for this plugin's menus instead of "Communication"
souliane <souliane@mailoo.org>
parents:
1508
diff
changeset
|
88 @return: list[jid.JID] |
72e6ee3fdf53
plugin XEP-0055: add "Directory subscription" menu + use the category "Service" for this plugin's menus instead of "Communication"
souliane <souliane@mailoo.org>
parents:
1508
diff
changeset
|
89 """ |
1552
e0bde0d0b321
core (disco): use of “profile” instead of “profile_key” in several disco methods
Goffi <goffi@goffi.org>
parents:
1509
diff
changeset
|
90 d = self.host.findFeaturesSet([NS_SEARCH], profile=profile) |
1509
72e6ee3fdf53
plugin XEP-0055: add "Directory subscription" menu + use the category "Service" for this plugin's menus instead of "Communication"
souliane <souliane@mailoo.org>
parents:
1508
diff
changeset
|
91 return d.addCallback(lambda set_: list(set_)) |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
92 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
93 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
94 ## Main search UI (menu item callback) ## |
799
7f2082b192ed
plugin XEP-0055, Primitivus: Directory search dialogs are now entirely done in plugin XEP-0055, specific code in frontend is not needed anymore
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
95 |
7f2082b192ed
plugin XEP-0055, Primitivus: Directory search dialogs are now entirely done in plugin XEP-0055, specific code in frontend is not needed anymore
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
96 |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
97 def _getMainUI(self, raw_data, profile): |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
98 """Get the XMLUI for selecting a service and searching the directory. |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
99 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
100 @param raw_data (dict): data received from the frontend |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
101 @param profile (unicode): %(doc_profile)s |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
102 @return: a deferred XMLUI string representation |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
103 """ |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
104 # check if the user's server offers some search services |
1509
72e6ee3fdf53
plugin XEP-0055: add "Directory subscription" menu + use the category "Service" for this plugin's menus instead of "Communication"
souliane <souliane@mailoo.org>
parents:
1508
diff
changeset
|
105 d = self._getHostServices(profile) |
72e6ee3fdf53
plugin XEP-0055: add "Directory subscription" menu + use the category "Service" for this plugin's menus instead of "Communication"
souliane <souliane@mailoo.org>
parents:
1508
diff
changeset
|
106 return d.addCallback(lambda services: self.getMainUI(services, raw_data, profile)) |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
107 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
108 def getMainUI(self, services, raw_data, profile): |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
109 """Get the XMLUI for selecting a service and searching the directory. |
799
7f2082b192ed
plugin XEP-0055, Primitivus: Directory search dialogs are now entirely done in plugin XEP-0055, specific code in frontend is not needed anymore
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
110 |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
111 @param services (list[jid.JID]): search services offered by the user server |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
112 @param raw_data (dict): data received from the frontend |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
113 @param profile (unicode): %(doc_profile)s |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
114 @return: a deferred XMLUI string representation |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
115 """ |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
116 # extend services offered by user's server with the default services |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
117 services.extend([service for service in self.services if service not in services]) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
118 data = xml_tools.XMLUIResult2DataFormResult(raw_data) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
119 main_ui = xml_tools.XMLUI(C.XMLUI_WINDOW, container="tabs", title=_("Search users"), submit_id=self.__search_menu_id) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
120 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
121 d = self._addSimpleSearchUI(services, main_ui, data, profile) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
122 d.addCallback(lambda dummy: self._addAdvancedSearchUI(services, main_ui, data, profile)) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
123 return d.addCallback(lambda dummy: {'xmlui': main_ui.toXml()}) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
124 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
125 def _addSimpleSearchUI(self, services, main_ui, data, profile): |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
126 """Add to the main UI a tab for the simple search. |
1552
e0bde0d0b321
core (disco): use of “profile” instead of “profile_key” in several disco methods
Goffi <goffi@goffi.org>
parents:
1509
diff
changeset
|
127 |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
128 Display a single input field and search on the main service (it actually does one search per search field and then compile the results). |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
129 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
130 @param services (list[jid.JID]): search services offered by the user server |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
131 @param main_ui (XMLUI): the main XMLUI instance |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
132 @param data (dict): form data without SAT_FORM_PREFIX |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
133 @param profile (unicode): %(doc_profile)s |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
134 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
135 @return: a dummy Deferred |
799
7f2082b192ed
plugin XEP-0055, Primitivus: Directory search dialogs are now entirely done in plugin XEP-0055, specific code in frontend is not needed anymore
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
136 """ |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
137 service_jid = services[0] # TODO: search on all the given services, not only the first one |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
138 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
139 form = data_form.Form('form', formNamespace=NS_SEARCH) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
140 form.addField(data_form.Field('text-single', FIELD_SINGLE, label=_('Search for'), value=data.get(FIELD_SINGLE, ''))) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
141 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
142 sub_cont = main_ui.main_container.addTab("simple_search", label=_("Simple search"), container=xml_tools.VerticalContainer) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
143 main_ui.changeContainer(sub_cont.append(xml_tools.PairsContainer(main_ui))) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
144 xml_tools.dataForm2Widgets(main_ui, form) |
1552
e0bde0d0b321
core (disco): use of “profile” instead of “profile_key” in several disco methods
Goffi <goffi@goffi.org>
parents:
1509
diff
changeset
|
145 |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
146 # FIXME: add colspan attribute to divider? (we are in a PairsContainer) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
147 main_ui.addDivider('blank') |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
148 main_ui.addDivider('blank') # here we added a blank line before the button |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
149 main_ui.addDivider('blank') |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
150 main_ui.addButton(self.__search_menu_id, _("Search"), (FIELD_SINGLE,)) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
151 main_ui.addDivider('blank') |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
152 main_ui.addDivider('blank') # a blank line again after the button |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
153 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
154 simple_data = {key: value for key, value in data.iteritems() if key in (FIELD_SINGLE,)} |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
155 if simple_data: |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
156 log.debug("Simple search with %s on %s" % (simple_data, service_jid)) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
157 sub_cont.parent.setSelected(True) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
158 main_ui.changeContainer(sub_cont.append(xml_tools.VerticalContainer(main_ui))) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
159 main_ui.addDivider('dash') |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
160 d = self.searchRequest(service_jid, simple_data, profile) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
161 d.addCallbacks(lambda elt: self._displaySearchResult(main_ui, elt), |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
162 lambda failure: main_ui.addText(failure.getErrorMessage())) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
163 return d |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
164 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
165 return defer.succeed(None) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
166 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
167 def _addAdvancedSearchUI(self, services, main_ui, data, profile): |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
168 """Add to the main UI a tab for the advanced search. |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
169 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
170 Display a service selector and allow to search on all the fields that are implemented by the selected service. |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
171 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
172 @param services (list[jid.JID]): search services offered by the user server |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
173 @param main_ui (XMLUI): the main XMLUI instance |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
174 @param data (dict): form data without SAT_FORM_PREFIX |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
175 @param profile (unicode): %(doc_profile)s |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
176 |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
177 @return: a dummy Deferred |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
178 """ |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
179 sub_cont = main_ui.main_container.addTab("advanced_search", label=_("Advanced search"), container=xml_tools.VerticalContainer) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
180 service_selection_fields = ['service_jid', 'service_jid_extra'] |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
181 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
182 if 'service_jid_extra' in data: |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
183 # refresh button has been pushed, select the tab |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
184 sub_cont.parent.setSelected(True) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
185 # get the selected service |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
186 service_jid_s = data.get('service_jid_extra', '') |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
187 if not service_jid_s: |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
188 service_jid_s = data.get('service_jid', unicode(services[0])) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
189 log.debug("Refreshing search fields for %s" % service_jid_s) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
190 else: |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
191 service_jid_s = data.get(FIELD_CURRENT_SERVICE, unicode(services[0])) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
192 services_s = [unicode(service) for service in services] |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
193 if service_jid_s not in services_s: |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
194 services_s.append(service_jid_s) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
195 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
196 main_ui.changeContainer(sub_cont.append(xml_tools.PairsContainer(main_ui))) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
197 main_ui.addLabel(_("Search on")) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
198 main_ui.addList('service_jid', options=services_s, selected=service_jid_s) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
199 main_ui.addLabel(_("Other service")) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
200 main_ui.addString(name='service_jid_extra') |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
201 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
202 # FIXME: add colspan attribute to divider? (we are in a PairsContainer) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
203 main_ui.addDivider('blank') |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
204 main_ui.addDivider('blank') # here we added a blank line before the button |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
205 main_ui.addDivider('blank') |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
206 main_ui.addButton(self.__search_menu_id, _("Refresh fields"), service_selection_fields) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
207 main_ui.addDivider('blank') |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
208 main_ui.addDivider('blank') # a blank line again after the button |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
209 main_ui.addLabel(_("Displaying the search form for")) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
210 main_ui.addString(name=FIELD_CURRENT_SERVICE, value=service_jid_s, read_only=True) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
211 main_ui.addDivider('dash') |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
212 main_ui.addDivider('dash') |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
213 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
214 main_ui.changeContainer(sub_cont.append(xml_tools.VerticalContainer(main_ui))) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
215 service_jid = jid.JID(service_jid_s) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
216 d = self.getFieldsUI(service_jid, profile) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
217 d.addCallbacks(self._addAdvancedForm, lambda failure: main_ui.addText(failure.getErrorMessage()), |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
218 [service_jid, main_ui, sub_cont, data, profile]) |
799
7f2082b192ed
plugin XEP-0055, Primitivus: Directory search dialogs are now entirely done in plugin XEP-0055, specific code in frontend is not needed anymore
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
219 return d |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
220 |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
221 def _addAdvancedForm(self, form_elt, service_jid, main_ui, sub_cont, data, profile): |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
222 """Add the search form and the search results (if there is some to display). |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
223 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
224 @param form_elt (domish.Element): form element listing the fields |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
225 @param service_jid (jid.JID): current search service |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
226 @param main_ui (XMLUI): the main XMLUI instance |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
227 @param sub_cont (Container): the container of the current tab |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
228 @param data (dict): form data without SAT_FORM_PREFIX |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
229 @param profile (unicode): %(doc_profile)s |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
230 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
231 @return: a dummy Deferred |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
232 """ |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
233 field_list = data_form.Form.fromElement(form_elt).fieldList |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
234 adv_fields = [field.var for field in field_list if field.var] |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
235 adv_data = {key: value for key, value in data.iteritems() if key in adv_fields} |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
236 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
237 xml_tools.dataForm2Widgets(main_ui, data_form.Form.fromElement(form_elt)) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
238 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
239 # refill the submitted values |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
240 # FIXME: wokkel's data_form.Form.fromElement doesn't parse the values, so we do it directly in XMLUI for now |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
241 for widget in main_ui.current_container.elem.childNodes: |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
242 name = widget.getAttribute("name") |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
243 if adv_data.get(name): |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
244 widget.setAttribute("value", adv_data[name]) |
1552
e0bde0d0b321
core (disco): use of “profile” instead of “profile_key” in several disco methods
Goffi <goffi@goffi.org>
parents:
1509
diff
changeset
|
245 |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
246 # FIXME: add colspan attribute to divider? (we are in a PairsContainer) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
247 main_ui.addDivider('blank') |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
248 main_ui.addDivider('blank') # here we added a blank line before the button |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
249 main_ui.addDivider('blank') |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
250 main_ui.addButton(self.__search_menu_id, _("Search"), adv_fields + [FIELD_CURRENT_SERVICE]) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
251 main_ui.addDivider('blank') |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
252 main_ui.addDivider('blank') # a blank line again after the button |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
253 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
254 if adv_data: # display the search results |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
255 log.debug("Advanced search with %s on %s" % (adv_data, service_jid)) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
256 sub_cont.parent.setSelected(True) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
257 main_ui.changeContainer(sub_cont.append(xml_tools.VerticalContainer(main_ui))) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
258 main_ui.addDivider('dash') |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
259 d = self.searchRequest(service_jid, adv_data, profile) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
260 d.addCallbacks(lambda elt: self._displaySearchResult(main_ui, elt), |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
261 lambda failure: main_ui.addText(failure.getErrorMessage())) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
262 return d |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
263 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
264 return defer.succeed(None) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
265 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
266 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
267 def _displaySearchResult(self, main_ui, elt): |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
268 """Display the search results. |
1552
e0bde0d0b321
core (disco): use of “profile” instead of “profile_key” in several disco methods
Goffi <goffi@goffi.org>
parents:
1509
diff
changeset
|
269 |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
270 @param main_ui (XMLUI): the main XMLUI instance |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
271 @param elt (domish.Element): form result element |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
272 """ |
1552
e0bde0d0b321
core (disco): use of “profile” instead of “profile_key” in several disco methods
Goffi <goffi@goffi.org>
parents:
1509
diff
changeset
|
273 if [child for child in elt.children if child.name == "item"]: |
1508
ec60682a9d17
plugin XEP-0055: display the search results using XMLUI JidsListWidget
souliane <souliane@mailoo.org>
parents:
1506
diff
changeset
|
274 headers, xmlui_data = xml_tools.dataFormResult2XMLUIData(elt) |
ec60682a9d17
plugin XEP-0055: display the search results using XMLUI JidsListWidget
souliane <souliane@mailoo.org>
parents:
1506
diff
changeset
|
275 if "jid" in headers: # use XMLUI JidsListWidget to display the results |
ec60682a9d17
plugin XEP-0055: display the search results using XMLUI JidsListWidget
souliane <souliane@mailoo.org>
parents:
1506
diff
changeset
|
276 values = {} |
ec60682a9d17
plugin XEP-0055: display the search results using XMLUI JidsListWidget
souliane <souliane@mailoo.org>
parents:
1506
diff
changeset
|
277 for i in range(len(xmlui_data)): |
ec60682a9d17
plugin XEP-0055: display the search results using XMLUI JidsListWidget
souliane <souliane@mailoo.org>
parents:
1506
diff
changeset
|
278 header = headers.keys()[i % len(headers)] |
ec60682a9d17
plugin XEP-0055: display the search results using XMLUI JidsListWidget
souliane <souliane@mailoo.org>
parents:
1506
diff
changeset
|
279 widget_type, widget_args, widget_kwargs = xmlui_data[i] |
ec60682a9d17
plugin XEP-0055: display the search results using XMLUI JidsListWidget
souliane <souliane@mailoo.org>
parents:
1506
diff
changeset
|
280 value = widget_args[0] |
ec60682a9d17
plugin XEP-0055: display the search results using XMLUI JidsListWidget
souliane <souliane@mailoo.org>
parents:
1506
diff
changeset
|
281 values.setdefault(header, []).append(jid.JID(value) if header == "jid" else value) |
ec60682a9d17
plugin XEP-0055: display the search results using XMLUI JidsListWidget
souliane <souliane@mailoo.org>
parents:
1506
diff
changeset
|
282 main_ui.addJidsList(jids=values["jid"], name=D_(u"Search results")) |
ec60682a9d17
plugin XEP-0055: display the search results using XMLUI JidsListWidget
souliane <souliane@mailoo.org>
parents:
1506
diff
changeset
|
283 # TODO: also display the values other than JID |
ec60682a9d17
plugin XEP-0055: display the search results using XMLUI JidsListWidget
souliane <souliane@mailoo.org>
parents:
1506
diff
changeset
|
284 else: |
ec60682a9d17
plugin XEP-0055: display the search results using XMLUI JidsListWidget
souliane <souliane@mailoo.org>
parents:
1506
diff
changeset
|
285 xml_tools.XMLUIData2AdvancedList(main_ui, headers, xmlui_data) |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
286 else: |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
287 main_ui.addText(D_("The search gave no result")) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
288 |
1506
8405d622bde0
plugin XEP-0055: remove a "debug" break that has been forgotten here
souliane <souliane@mailoo.org>
parents:
1498
diff
changeset
|
289 |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
290 ## Retrieve the search fields ## |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
291 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
292 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
293 def _getFieldsUI(self, to_jid_s, profile_key): |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
294 """Ask a service to send us the list of the form fields it manages. |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
295 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
296 @param to_jid_s (unicode): XEP-0055 compliant search entity |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
297 @param profile_key (unicode): %(doc_profile_key)s |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
298 @return: a deferred XMLUI instance |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
299 """ |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
300 d = self.getFieldsUI(jid.JID(to_jid_s), profile_key) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
301 d.addCallback(lambda form: xml_tools.dataFormResult2XMLUI(form).toXml()) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
302 return d |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
303 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
304 def getFieldsUI(self, to_jid, profile_key): |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
305 """Ask a service to send us the list of the form fields it manages. |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
306 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
307 @param to_jid (jid.JID): XEP-0055 compliant search entity |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
308 @param profile_key (unicode): %(doc_profile_key)s |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
309 @return: a deferred domish.Element |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
310 """ |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
311 client = self.host.getClient(profile_key) |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
312 fields_request = IQ(client.xmlstream, 'get') |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
313 fields_request["from"] = client.jid.full() |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
314 fields_request["to"] = to_jid.full() |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
315 fields_request.addElement('query', NS_SEARCH) |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
316 d = fields_request.send(to_jid.full()) |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
317 d.addCallbacks(self._getFieldsUICb, self._getFieldsUIEb) |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
318 return d |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
319 |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
320 def _getFieldsUICb(self, answer): |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
321 """Callback for self.getFieldsUI. |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
322 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
323 @param answer (domish.Element): search query element |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
324 @return: domish.Element |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
325 """ |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
326 try: |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
327 query_elts = answer.elements('jabber:iq:search', 'query').next() |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
328 except StopIteration: |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
867
diff
changeset
|
329 log.info(_("No query element found")) |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
330 raise DataError # FIXME: StanzaError is probably more appropriate, check the RFC |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
331 try: |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
332 form_elt = query_elts.elements(data_form.NS_X_DATA, 'x').next() |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
333 except StopIteration: |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
867
diff
changeset
|
334 log.info(_("No data form found")) |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
335 raise NotImplementedError("Only search through data form is implemented so far") |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
336 return form_elt |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
337 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
338 def _getFieldsUIEb(self, failure): |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
339 """Errback to self.getFieldsUI. |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
340 |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
341 @param failure (defer.failure.Failure): twisted failure |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
342 @raise: the unchanged defer.failure.Failure |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
343 """ |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
344 log.info(_("Fields request failure: %s") % unicode(failure.getErrorMessage())) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
345 raise failure |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
346 |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
347 |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
348 ## Do the search ## |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
349 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
350 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
351 def _searchRequest(self, to_jid_s, search_data, profile_key): |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
352 """Actually do a search, according to filled data. |
799
7f2082b192ed
plugin XEP-0055, Primitivus: Directory search dialogs are now entirely done in plugin XEP-0055, specific code in frontend is not needed anymore
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
353 |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
354 @param to_jid_s (unicode): XEP-0055 compliant search entity |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
355 @param search_data (dict): filled data, corresponding to the form obtained in getFieldsUI |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
356 @param profile_key (unicode): %(doc_profile_key)s |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
357 @return: a deferred XMLUI string representation |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
358 """ |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
359 d = self.searchRequest(jid.JID(to_jid_s), search_data, profile_key) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
360 d.addCallback(lambda form: xml_tools.dataFormResult2XMLUI(form).toXml()) |
799
7f2082b192ed
plugin XEP-0055, Primitivus: Directory search dialogs are now entirely done in plugin XEP-0055, specific code in frontend is not needed anymore
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
361 return d |
7f2082b192ed
plugin XEP-0055, Primitivus: Directory search dialogs are now entirely done in plugin XEP-0055, specific code in frontend is not needed anymore
Goffi <goffi@goffi.org>
parents:
771
diff
changeset
|
362 |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
363 def searchRequest(self, to_jid, search_data, profile_key): |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
364 """Actually do a search, according to filled data. |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
365 |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
366 @param to_jid (jid.JID): XEP-0055 compliant search entity |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
367 @param search_data (dict): filled data, corresponding to the form obtained in getFieldsUI |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
368 @param profile_key (unicode): %(doc_profile_key)s |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
369 @return: a deferred domish.Element |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
370 """ |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
371 if FIELD_SINGLE in search_data: |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
372 value = search_data[FIELD_SINGLE] |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
373 d = self.getFieldsUI(to_jid, profile_key) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
374 d.addCallback(lambda elt: self.searchRequestMulti(to_jid, value, elt, profile_key)) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
375 return d |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
376 |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
377 client = self.host.getClient(profile_key) |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
378 search_request = IQ(client.xmlstream, 'set') |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
379 search_request["from"] = client.jid.full() |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
380 search_request["to"] = to_jid.full() |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
381 query_elt = search_request.addElement('query', NS_SEARCH) |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
382 x_form = data_form.Form('submit', formNamespace=NS_SEARCH) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
383 x_form.makeFields(search_data) |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
384 query_elt.addChild(x_form.toElement()) |
1219
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
385 # TODO: XEP-0059 could be used here (with the needed new method attributes) |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
386 d = search_request.send(to_jid.full()) |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
387 d.addCallbacks(self._searchOk, self._searchErr) |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
388 return d |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
389 |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
390 def searchRequestMulti(self, to_jid, value, form_elt, profile_key): |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
391 """Search for a value simultaneously in all fields, returns the results compilation. |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
392 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
393 @param to_jid (jid.JID): XEP-0055 compliant search entity |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
394 @param value (unicode): value to search |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
395 @param form_elt (domish.Element): form element listing the fields |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
396 @param profile_key (unicode): %(doc_profile_key)s |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
397 @return: a deferred domish.Element |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
398 """ |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
399 form = data_form.Form.fromElement(form_elt) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
400 d_list = [] |
1506
8405d622bde0
plugin XEP-0055: remove a "debug" break that has been forgotten here
souliane <souliane@mailoo.org>
parents:
1498
diff
changeset
|
401 |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
402 for field in [field.var for field in form.fieldList if field.var]: |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
403 d_list.append(self.searchRequest(to_jid, {field: value}, profile_key)) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
404 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
405 def cb(result): # return the results compiled in one domish element |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
406 result_elt = None |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
407 for success, form_elt in result: |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
408 if not success: |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
409 continue |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
410 if result_elt is None: # the result element is built over the first answer |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
411 result_elt = form_elt |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
412 continue |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
413 for item_elt in form_elt.elements('jabber:x:data', 'item'): |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
414 result_elt.addChild(item_elt) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
415 if result_elt is None: |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
416 raise defer.failure.Failure(DataError(_("The search could not be performed"))) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
417 return result_elt |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
418 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
419 return defer.DeferredList(d_list).addCallback(cb) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
420 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
421 def _searchOk(self, answer): |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
422 """Callback for self.searchRequest. |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
423 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
424 @param answer (domish.Element): search query element |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
425 @return: domish.Element |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
426 """ |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
427 try: |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
428 query_elts = answer.elements('jabber:iq:search', 'query').next() |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
429 except StopIteration: |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
867
diff
changeset
|
430 log.info(_("No query element found")) |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
431 raise DataError # FIXME: StanzaError is probably more appropriate, check the RFC |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
432 try: |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
433 form_elt = query_elts.elements(data_form.NS_X_DATA, 'x').next() |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
434 except StopIteration: |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
867
diff
changeset
|
435 log.info(_("No data form found")) |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
436 raise NotImplementedError("Only search through data form is implemented so far") |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
437 return form_elt |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
438 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
439 def _searchErr(self, failure): |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
440 """Errback to self.searchRequest. |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
441 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
442 @param failure (defer.failure.Failure): twisted failure |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
443 @raise: the unchanged defer.failure.Failure |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
444 """ |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
445 log.info(_("Search request failure: %s") % unicode(failure.getErrorMessage())) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
446 raise failure |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
447 |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
448 |
1509
72e6ee3fdf53
plugin XEP-0055: add "Directory subscription" menu + use the category "Service" for this plugin's menus instead of "Communication"
souliane <souliane@mailoo.org>
parents:
1508
diff
changeset
|
449 ## Subscription ## |
72e6ee3fdf53
plugin XEP-0055: add "Directory subscription" menu + use the category "Service" for this plugin's menus instead of "Communication"
souliane <souliane@mailoo.org>
parents:
1508
diff
changeset
|
450 |
72e6ee3fdf53
plugin XEP-0055: add "Directory subscription" menu + use the category "Service" for this plugin's menus instead of "Communication"
souliane <souliane@mailoo.org>
parents:
1508
diff
changeset
|
451 |
72e6ee3fdf53
plugin XEP-0055: add "Directory subscription" menu + use the category "Service" for this plugin's menus instead of "Communication"
souliane <souliane@mailoo.org>
parents:
1508
diff
changeset
|
452 def subscribe(self, raw_data, profile): |
72e6ee3fdf53
plugin XEP-0055: add "Directory subscription" menu + use the category "Service" for this plugin's menus instead of "Communication"
souliane <souliane@mailoo.org>
parents:
1508
diff
changeset
|
453 """Request available commands on the jabber search service associated to profile's host. |
72e6ee3fdf53
plugin XEP-0055: add "Directory subscription" menu + use the category "Service" for this plugin's menus instead of "Communication"
souliane <souliane@mailoo.org>
parents:
1508
diff
changeset
|
454 |
72e6ee3fdf53
plugin XEP-0055: add "Directory subscription" menu + use the category "Service" for this plugin's menus instead of "Communication"
souliane <souliane@mailoo.org>
parents:
1508
diff
changeset
|
455 @param raw_data (dict): data received from the frontend |
72e6ee3fdf53
plugin XEP-0055: add "Directory subscription" menu + use the category "Service" for this plugin's menus instead of "Communication"
souliane <souliane@mailoo.org>
parents:
1508
diff
changeset
|
456 @param profile (unicode): %(doc_profile)s |
72e6ee3fdf53
plugin XEP-0055: add "Directory subscription" menu + use the category "Service" for this plugin's menus instead of "Communication"
souliane <souliane@mailoo.org>
parents:
1508
diff
changeset
|
457 @return: a deferred dict{unicode: unicode} |
72e6ee3fdf53
plugin XEP-0055: add "Directory subscription" menu + use the category "Service" for this plugin's menus instead of "Communication"
souliane <souliane@mailoo.org>
parents:
1508
diff
changeset
|
458 """ |
72e6ee3fdf53
plugin XEP-0055: add "Directory subscription" menu + use the category "Service" for this plugin's menus instead of "Communication"
souliane <souliane@mailoo.org>
parents:
1508
diff
changeset
|
459 d = self._getHostServices(profile) |
1552
e0bde0d0b321
core (disco): use of “profile” instead of “profile_key” in several disco methods
Goffi <goffi@goffi.org>
parents:
1509
diff
changeset
|
460 |
1509
72e6ee3fdf53
plugin XEP-0055: add "Directory subscription" menu + use the category "Service" for this plugin's menus instead of "Communication"
souliane <souliane@mailoo.org>
parents:
1508
diff
changeset
|
461 def got_services(services): |
72e6ee3fdf53
plugin XEP-0055: add "Directory subscription" menu + use the category "Service" for this plugin's menus instead of "Communication"
souliane <souliane@mailoo.org>
parents:
1508
diff
changeset
|
462 service_jid = services[0] |
72e6ee3fdf53
plugin XEP-0055: add "Directory subscription" menu + use the category "Service" for this plugin's menus instead of "Communication"
souliane <souliane@mailoo.org>
parents:
1508
diff
changeset
|
463 d = self.host.plugins["XEP-0050"].requestCommandsList(service_jid, profile) |
72e6ee3fdf53
plugin XEP-0055: add "Directory subscription" menu + use the category "Service" for this plugin's menus instead of "Communication"
souliane <souliane@mailoo.org>
parents:
1508
diff
changeset
|
464 return d.addCallback(got_commands, service_jid) |
72e6ee3fdf53
plugin XEP-0055: add "Directory subscription" menu + use the category "Service" for this plugin's menus instead of "Communication"
souliane <souliane@mailoo.org>
parents:
1508
diff
changeset
|
465 |
72e6ee3fdf53
plugin XEP-0055: add "Directory subscription" menu + use the category "Service" for this plugin's menus instead of "Communication"
souliane <souliane@mailoo.org>
parents:
1508
diff
changeset
|
466 def got_commands(form_ui, service_jid): |
72e6ee3fdf53
plugin XEP-0055: add "Directory subscription" menu + use the category "Service" for this plugin's menus instead of "Communication"
souliane <souliane@mailoo.org>
parents:
1508
diff
changeset
|
467 session_id, session_data = self.host.plugins["XEP-0050"].requesting.newSession(profile=profile) |
72e6ee3fdf53
plugin XEP-0055: add "Directory subscription" menu + use the category "Service" for this plugin's menus instead of "Communication"
souliane <souliane@mailoo.org>
parents:
1508
diff
changeset
|
468 session_data["jid"] = service_jid |
72e6ee3fdf53
plugin XEP-0055: add "Directory subscription" menu + use the category "Service" for this plugin's menus instead of "Communication"
souliane <souliane@mailoo.org>
parents:
1508
diff
changeset
|
469 form_ui.session_id = session_id |
72e6ee3fdf53
plugin XEP-0055: add "Directory subscription" menu + use the category "Service" for this plugin's menus instead of "Communication"
souliane <souliane@mailoo.org>
parents:
1508
diff
changeset
|
470 return {'xmlui': form_ui.toXml()} |
72e6ee3fdf53
plugin XEP-0055: add "Directory subscription" menu + use the category "Service" for this plugin's menus instead of "Communication"
souliane <souliane@mailoo.org>
parents:
1508
diff
changeset
|
471 |
72e6ee3fdf53
plugin XEP-0055: add "Directory subscription" menu + use the category "Service" for this plugin's menus instead of "Communication"
souliane <souliane@mailoo.org>
parents:
1508
diff
changeset
|
472 return d.addCallback(got_services) |
72e6ee3fdf53
plugin XEP-0055: add "Directory subscription" menu + use the category "Service" for this plugin's menus instead of "Communication"
souliane <souliane@mailoo.org>
parents:
1508
diff
changeset
|
473 |
72e6ee3fdf53
plugin XEP-0055: add "Directory subscription" menu + use the category "Service" for this plugin's menus instead of "Communication"
souliane <souliane@mailoo.org>
parents:
1508
diff
changeset
|
474 |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
475 class XEP_0059_handler(XMPPHandler): |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
476 implements(iwokkel.IDisco) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
477 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
478 def __init__(self, plugin_parent, profile): |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
479 self.plugin_parent = plugin_parent |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
480 self.host = plugin_parent.host |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
481 self.profile = profile |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
482 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
483 def getDiscoInfo(self, requestor, target, nodeIdentifier=''): |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
484 return [disco.DiscoFeature(NS_SEARCH)] |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
485 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
486 def getDiscoItems(self, requestor, target, nodeIdentifier=''): |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
487 return [] |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
488 |