Mercurial > libervia-backend
annotate sat/plugins/plugin_xep_0055.py @ 2816:114cdde9ff96
plugin XEP-0280: priority and "sent" fixes:
- carbon prioriy must be bigger than ones of encryption plugins, because the carbon copied messages must be unwrapped to be decrypted, this patch fixes it
- "sent" carbon elements was only stored and notified to frontends, it is now unwrapped and injected in normal traffic, this way other plugin can manage it, in particular encrypted elements can be decrypted
author | Goffi <goffi@goffi.org> |
---|---|
date | Thu, 28 Feb 2019 18:57:06 +0100 |
parents | 003b8b4b56a7 |
children | ab2696e34d29 |
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) |
2771 | 5 # Copyright (C) 2009-2019 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( |
2765
378188abe941
misc: replaced all "dummy" by the more conventional and readable "__" ("_" being used for gettext)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
149 lambda __: self._addAdvancedSearchUI(services, main_ui, data, profile) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
150 ) |
2765
378188abe941
misc: replaced all "dummy" by the more conventional and readable "__" ("_" being used for gettext)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
151 return d.addCallback(lambda __: {"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 |
2765
378188abe941
misc: replaced all "dummy" by the more conventional and readable "__" ("_" being used for gettext)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
163 @return: a __ 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 |
2765
378188abe941
misc: replaced all "dummy" by the more conventional and readable "__" ("_" being used for gettext)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
222 @return: a __ Deferred |
1498
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 |
2765
378188abe941
misc: replaced all "dummy" by the more conventional and readable "__" ("_" being used for gettext)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
285 @return: a __ Deferred |
1498
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 [] |