Mercurial > libervia-backend
annotate sat/plugins/plugin_xep_0055.py @ 2691:1ecceac3df96
plugin XEP-0198: Stream Management implementation:
- hooks can now be set in stream onElement and send methods
- xmllog refactored to use new hooks
- client.isConnected now uses transport.connected method
- fixed reconnection, SàT will now try to reconnect indefinitely until it success, unresolvable failure happen (e.g. invalid certificate), or explicit disconnection is requested (or a plugin change this behaviour)
- new triggers: "stream_hooks", "disconnecting", "disconnected", and "xml_init" (replace "XML Initialized")
author | Goffi <goffi@goffi.org> |
---|---|
date | Sun, 18 Nov 2018 15:49:46 +0100 |
parents | 56f94936df1e |
children | 378188abe941 |
rev | line source |
---|---|
1934
2daf7b4c6756
use of /usr/bin/env instead of /usr/bin/python in shebang
Goffi <goffi@goffi.org>
parents:
1810
diff
changeset
|
1 #!/usr/bin/env python2 |
631
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) |
2483 | 5 # Copyright (C) 2009-2018 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 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
22 |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
867
diff
changeset
|
23 log = getLogger(__name__) |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
24 |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
25 from twisted.words.protocols.jabber.xmlstream import IQ |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
26 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
|
27 from twisted.internet import defer |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
28 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
|
29 from sat.core.constants import Const as C |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
30 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
|
31 from sat.tools import xml_tools |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
32 |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
33 from wokkel import disco, iwokkel |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
34 |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
35 try: |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
36 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
|
37 except ImportError: |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
38 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
|
39 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
|
40 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
41 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
42 NS_SEARCH = "jabber:iq:search" |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
43 |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
44 PLUGIN_INFO = { |
2145
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
45 C.PI_NAME: "Jabber Search", |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
46 C.PI_IMPORT_NAME: "XEP-0055", |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
47 C.PI_TYPE: "XEP", |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
48 C.PI_PROTOCOLS: ["XEP-0055"], |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
49 C.PI_DEPENDENCIES: [], |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
50 C.PI_RECOMMENDATIONS: ["XEP-0059"], |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
51 C.PI_MAIN: "XEP_0055", |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
52 C.PI_HANDLER: "no", |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
53 C.PI_DESCRIPTION: _("""Implementation of Jabber Search"""), |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
54 } |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
55 |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
56 # config file parameters |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
57 CONFIG_SECTION = "plugin search" |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
58 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
|
59 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
60 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
|
61 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
62 FIELD_SINGLE = "field_single" # single text field for the simple search |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
63 FIELD_CURRENT_SERVICE = ( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
64 "current_service_jid" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
65 ) # read-only text field for the advanced search |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
66 |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
67 |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
68 class XEP_0055(object): |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
69 def __init__(self, host): |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
867
diff
changeset
|
70 log.info(_("Jabber search plugin initialization")) |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
71 self.host = host |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
72 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
73 # default search services (config file + hard-coded lists) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
74 self.services = [ |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
75 jid.JID(entry) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
76 for entry in host.memory.getConfig( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
77 CONFIG_SECTION, CONFIG_SERVICE_LIST, DEFAULT_SERVICE_LIST |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
78 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
79 ] |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
80 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
81 host.bridge.addMethod( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
82 "searchGetFieldsUI", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
83 ".plugin", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
84 in_sign="ss", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
85 out_sign="s", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
86 method=self._getFieldsUI, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
87 async=True, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
88 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
89 host.bridge.addMethod( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
90 "searchRequest", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
91 ".plugin", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
92 in_sign="sa{ss}s", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
93 out_sign="s", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
94 method=self._searchRequest, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
95 async=True, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
96 ) |
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
|
97 |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
98 self.__search_menu_id = host.registerCallback(self._getMainUI, with_data=True) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
99 host.importMenu( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
100 (D_("Contacts"), D_("Search directory")), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
101 self._getMainUI, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
102 security_limit=1, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
103 help_string=D_("Search user directory"), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
104 ) |
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 |
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 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
|
107 """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
|
108 |
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
|
109 @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
|
110 @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
|
111 """ |
2148
a543eda2c923
core (memory/disco): getInfos now handle node + use client instead of profile in many methods
Goffi <goffi@goffi.org>
parents:
2145
diff
changeset
|
112 client = self.host.getClient(profile) |
a543eda2c923
core (memory/disco): getInfos now handle node + use client instead of profile in many methods
Goffi <goffi@goffi.org>
parents:
2145
diff
changeset
|
113 d = self.host.findFeaturesSet(client, [NS_SEARCH]) |
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
|
114 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
|
115 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
116 ## 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
|
117 |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
118 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
|
119 """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
|
120 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
121 @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
|
122 @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
|
123 @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
|
124 """ |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
125 # 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
|
126 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
|
127 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
|
128 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
129 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
|
130 """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
|
131 |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
132 @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
|
133 @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
|
134 @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
|
135 @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
|
136 """ |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
137 # 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
|
138 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
|
139 data = xml_tools.XMLUIResult2DataFormResult(raw_data) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
140 main_ui = xml_tools.XMLUI( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
141 C.XMLUI_WINDOW, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
142 container="tabs", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
143 title=_("Search users"), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
144 submit_id=self.__search_menu_id, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
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 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
147 d = self._addSimpleSearchUI(services, main_ui, data, profile) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
148 d.addCallback( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
149 lambda dummy: self._addAdvancedSearchUI(services, main_ui, data, profile) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
150 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
151 return d.addCallback(lambda dummy: {"xmlui": main_ui.toXml()}) |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
152 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
153 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
|
154 """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
|
155 |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
156 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
|
157 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
158 @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
|
159 @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
|
160 @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
|
161 @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
|
162 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
163 @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
|
164 """ |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
165 service_jid = services[ |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
166 0 |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
167 ] # TODO: search on all the given services, not only the first one |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
168 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
169 form = data_form.Form("form", formNamespace=NS_SEARCH) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
170 form.addField( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
171 data_form.Field( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
172 "text-single", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
173 FIELD_SINGLE, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
174 label=_("Search for"), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
175 value=data.get(FIELD_SINGLE, ""), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
176 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
177 ) |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
178 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
179 sub_cont = main_ui.main_container.addTab( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
180 "simple_search", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
181 label=_("Simple search"), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
182 container=xml_tools.VerticalContainer, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
183 ) |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
184 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
|
185 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
|
186 |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
187 # FIXME: add colspan attribute to divider? (we are in a PairsContainer) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
188 main_ui.addDivider("blank") |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
189 main_ui.addDivider("blank") # here we added a blank line before the button |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
190 main_ui.addDivider("blank") |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
191 main_ui.addButton(self.__search_menu_id, _("Search"), (FIELD_SINGLE,)) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
192 main_ui.addDivider("blank") |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
193 main_ui.addDivider("blank") # a blank line again after the button |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
194 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
195 simple_data = { |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
196 key: value for key, value in data.iteritems() if key in (FIELD_SINGLE,) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
197 } |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
198 if simple_data: |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
199 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
|
200 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
|
201 main_ui.changeContainer(sub_cont.append(xml_tools.VerticalContainer(main_ui))) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
202 main_ui.addDivider("dash") |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
203 d = self.searchRequest(service_jid, simple_data, profile) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
204 d.addCallbacks( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
205 lambda elt: self._displaySearchResult(main_ui, elt), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
206 lambda failure: main_ui.addText(failure.getErrorMessage()), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
207 ) |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
208 return d |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
209 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
210 return defer.succeed(None) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
211 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
212 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
|
213 """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
|
214 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
215 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
|
216 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
217 @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
|
218 @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
|
219 @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
|
220 @param profile (unicode): %(doc_profile)s |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
221 |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
222 @return: a dummy Deferred |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
223 """ |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
224 sub_cont = main_ui.main_container.addTab( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
225 "advanced_search", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
226 label=_("Advanced search"), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
227 container=xml_tools.VerticalContainer, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
228 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
229 service_selection_fields = ["service_jid", "service_jid_extra"] |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
230 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
231 if "service_jid_extra" in data: |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
232 # 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
|
233 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
|
234 # get the selected service |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
235 service_jid_s = data.get("service_jid_extra", "") |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
236 if not service_jid_s: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
237 service_jid_s = data.get("service_jid", unicode(services[0])) |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
238 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
|
239 else: |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
240 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
|
241 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
|
242 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
|
243 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
|
244 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
245 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
|
246 main_ui.addLabel(_("Search on")) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
247 main_ui.addList("service_jid", options=services_s, selected=service_jid_s) |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
248 main_ui.addLabel(_("Other service")) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
249 main_ui.addString(name="service_jid_extra") |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
250 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
251 # FIXME: add colspan attribute to divider? (we are in a PairsContainer) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
252 main_ui.addDivider("blank") |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
253 main_ui.addDivider("blank") # here we added a blank line before the button |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
254 main_ui.addDivider("blank") |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
255 main_ui.addButton( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
256 self.__search_menu_id, _("Refresh fields"), service_selection_fields |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
257 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
258 main_ui.addDivider("blank") |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
259 main_ui.addDivider("blank") # a blank line again after the button |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
260 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
|
261 main_ui.addString(name=FIELD_CURRENT_SERVICE, value=service_jid_s, read_only=True) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
262 main_ui.addDivider("dash") |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
263 main_ui.addDivider("dash") |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
264 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
265 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
|
266 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
|
267 d = self.getFieldsUI(service_jid, profile) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
268 d.addCallbacks( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
269 self._addAdvancedForm, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
270 lambda failure: main_ui.addText(failure.getErrorMessage()), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
271 [service_jid, main_ui, sub_cont, data, profile], |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
272 ) |
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
|
273 return d |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
274 |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
275 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
|
276 """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
|
277 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
278 @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
|
279 @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
|
280 @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
|
281 @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
|
282 @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
|
283 @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
|
284 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
285 @return: a dummy Deferred |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
286 """ |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
287 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
|
288 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
|
289 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
|
290 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
291 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
|
292 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
293 # refill the submitted values |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
294 # 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
|
295 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
|
296 name = widget.getAttribute("name") |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
297 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
|
298 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
|
299 |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
300 # FIXME: add colspan attribute to divider? (we are in a PairsContainer) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
301 main_ui.addDivider("blank") |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
302 main_ui.addDivider("blank") # here we added a blank line before the button |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
303 main_ui.addDivider("blank") |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
304 main_ui.addButton( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
305 self.__search_menu_id, _("Search"), adv_fields + [FIELD_CURRENT_SERVICE] |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
306 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
307 main_ui.addDivider("blank") |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
308 main_ui.addDivider("blank") # a blank line again after the button |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
309 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
310 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
|
311 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
|
312 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
|
313 main_ui.changeContainer(sub_cont.append(xml_tools.VerticalContainer(main_ui))) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
314 main_ui.addDivider("dash") |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
315 d = self.searchRequest(service_jid, adv_data, profile) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
316 d.addCallbacks( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
317 lambda elt: self._displaySearchResult(main_ui, elt), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
318 lambda failure: main_ui.addText(failure.getErrorMessage()), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
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 return d |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
321 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
322 return defer.succeed(None) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
323 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
324 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
|
325 """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
|
326 |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
327 @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
|
328 @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
|
329 """ |
1552
e0bde0d0b321
core (disco): use of “profile” instead of “profile_key” in several disco methods
Goffi <goffi@goffi.org>
parents:
1509
diff
changeset
|
330 if [child for child in elt.children if child.name == "item"]: |
2364
918e38622a48
core (xmlui): added method to convert data form result to XMLUI:
Goffi <goffi@goffi.org>
parents:
2148
diff
changeset
|
331 headers, xmlui_data = xml_tools.dataFormEltResult2XMLUIData(elt) |
1508
ec60682a9d17
plugin XEP-0055: display the search results using XMLUI JidsListWidget
souliane <souliane@mailoo.org>
parents:
1506
diff
changeset
|
332 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
|
333 values = {} |
ec60682a9d17
plugin XEP-0055: display the search results using XMLUI JidsListWidget
souliane <souliane@mailoo.org>
parents:
1506
diff
changeset
|
334 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
|
335 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
|
336 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
|
337 value = widget_args[0] |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
338 values.setdefault(header, []).append( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
339 jid.JID(value) if header == "jid" else value |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
340 ) |
1508
ec60682a9d17
plugin XEP-0055: display the search results using XMLUI JidsListWidget
souliane <souliane@mailoo.org>
parents:
1506
diff
changeset
|
341 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
|
342 # 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
|
343 else: |
ec60682a9d17
plugin XEP-0055: display the search results using XMLUI JidsListWidget
souliane <souliane@mailoo.org>
parents:
1506
diff
changeset
|
344 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
|
345 else: |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
346 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
|
347 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
348 ## Retrieve the search fields ## |
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 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
|
351 """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
|
352 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
353 @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
|
354 @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
|
355 @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
|
356 """ |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
357 d = self.getFieldsUI(jid.JID(to_jid_s), profile_key) |
2364
918e38622a48
core (xmlui): added method to convert data form result to XMLUI:
Goffi <goffi@goffi.org>
parents:
2148
diff
changeset
|
358 d.addCallback(lambda form: xml_tools.dataFormEltResult2XMLUI(form).toXml()) |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
359 return d |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
360 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
361 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
|
362 """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
|
363 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
364 @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
|
365 @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
|
366 @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
|
367 """ |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
368 client = self.host.getClient(profile_key) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
369 fields_request = IQ(client.xmlstream, "get") |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
370 fields_request["from"] = client.jid.full() |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
371 fields_request["to"] = to_jid.full() |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
372 fields_request.addElement("query", NS_SEARCH) |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
373 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
|
374 d.addCallbacks(self._getFieldsUICb, self._getFieldsUIEb) |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
375 return d |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
376 |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
377 def _getFieldsUICb(self, answer): |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
378 """Callback for self.getFieldsUI. |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
379 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
380 @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
|
381 @return: domish.Element |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
382 """ |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
383 try: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
384 query_elts = answer.elements("jabber:iq:search", "query").next() |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
385 except StopIteration: |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
867
diff
changeset
|
386 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
|
387 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
|
388 try: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
389 form_elt = query_elts.elements(data_form.NS_X_DATA, "x").next() |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
390 except StopIteration: |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
867
diff
changeset
|
391 log.info(_("No data form found")) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
392 raise NotImplementedError( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
393 "Only search through data form is implemented so far" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
394 ) |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
395 return form_elt |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
396 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
397 def _getFieldsUIEb(self, failure): |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
398 """Errback to self.getFieldsUI. |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
399 |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
400 @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
|
401 @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
|
402 """ |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
403 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
|
404 raise failure |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
405 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
406 ## Do the search ## |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
407 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
408 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
|
409 """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
|
410 |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
411 @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
|
412 @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
|
413 @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
|
414 @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
|
415 """ |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
416 d = self.searchRequest(jid.JID(to_jid_s), search_data, profile_key) |
2364
918e38622a48
core (xmlui): added method to convert data form result to XMLUI:
Goffi <goffi@goffi.org>
parents:
2148
diff
changeset
|
417 d.addCallback(lambda form: xml_tools.dataFormEltResult2XMLUI(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
|
418 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
|
419 |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
420 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
|
421 """Actually do a search, according to filled data. |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
422 |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
423 @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
|
424 @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
|
425 @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
|
426 @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
|
427 """ |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
428 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
|
429 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
|
430 d = self.getFieldsUI(to_jid, profile_key) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
431 d.addCallback( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
432 lambda elt: self.searchRequestMulti(to_jid, value, elt, profile_key) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
433 ) |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
434 return d |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
435 |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
436 client = self.host.getClient(profile_key) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
437 search_request = IQ(client.xmlstream, "set") |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
438 search_request["from"] = client.jid.full() |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
439 search_request["to"] = to_jid.full() |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
440 query_elt = search_request.addElement("query", NS_SEARCH) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
441 x_form = data_form.Form("submit", formNamespace=NS_SEARCH) |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
442 x_form.makeFields(search_data) |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
443 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
|
444 # 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
|
445 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
|
446 d.addCallbacks(self._searchOk, self._searchErr) |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
447 return d |
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
448 |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
449 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
|
450 """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
|
451 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
452 @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
|
453 @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
|
454 @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
|
455 @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
|
456 @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
|
457 """ |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
458 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
|
459 d_list = [] |
1506
8405d622bde0
plugin XEP-0055: remove a "debug" break that has been forgotten here
souliane <souliane@mailoo.org>
parents:
1498
diff
changeset
|
460 |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
461 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
|
462 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
|
463 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
464 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
|
465 result_elt = None |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
466 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
|
467 if not success: |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
468 continue |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
469 if ( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
470 result_elt is None |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
471 ): # the result element is built over the first answer |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
472 result_elt = form_elt |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
473 continue |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
474 for item_elt in form_elt.elements("jabber:x:data", "item"): |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
475 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
|
476 if result_elt is None: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
477 raise defer.failure.Failure( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
478 DataError(_("The search could not be performed")) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
479 ) |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
480 return result_elt |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
481 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
482 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
|
483 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
484 def _searchOk(self, answer): |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
485 """Callback for self.searchRequest. |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
486 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
487 @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
|
488 @return: domish.Element |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
489 """ |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
490 try: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
491 query_elts = answer.elements("jabber:iq:search", "query").next() |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
492 except StopIteration: |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
867
diff
changeset
|
493 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
|
494 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
|
495 try: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
496 form_elt = query_elts.elements(data_form.NS_X_DATA, "x").next() |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
497 except StopIteration: |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
867
diff
changeset
|
498 log.info(_("No data form found")) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
499 raise NotImplementedError( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
500 "Only search through data form is implemented so far" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
501 ) |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
502 return form_elt |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
503 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
504 def _searchErr(self, failure): |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
505 """Errback to self.searchRequest. |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
506 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
507 @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
|
508 @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
|
509 """ |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
510 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
|
511 raise failure |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
512 |
631
694f118d0cd5
plugin XEP-0055: implementation of Jabber Search
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
513 |
1810
25c3569abb71
plugin XEP-0055, tmp_directory_subscription: move directory subscription to a new temporary plugin
souliane <souliane@mailoo.org>
parents:
1766
diff
changeset
|
514 class XEP_0055_handler(XMPPHandler): |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
515 implements(iwokkel.IDisco) |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
516 |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
517 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
|
518 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
|
519 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
|
520 self.profile = profile |
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
521 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
522 def getDiscoInfo(self, requestor, target, nodeIdentifier=""): |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
523 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
|
524 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
525 def getDiscoItems(self, requestor, target, nodeIdentifier=""): |
1498
e3330ce65285
plugin XEP-0055: add "simple" and "advanced" modes to Jabber search:
souliane <souliane@mailoo.org>
parents:
1409
diff
changeset
|
526 return [] |