Mercurial > libervia-backend
annotate sat/plugins/plugin_xep_0059.py @ 3913:944f51f9c2b4
core (xmpp): make `send` a blocking method, fix `sendMessageData` calls:
original `send` method is blocking, and it is used as such by Wokkel and thus can't be
changed to an async method easily. However, an Async method is necessary to have an async
trigger at the very end of the send workflow for end-to-end encryption. To workaround
that, `send` is an async method which call `a_send`, an async method which actually does
the sending. This way legacy method can still call `send` while `a_send` can be await
otherwise.
Fix calls to `sendMessageData`: the method now being an `async` one, `ensureDeferred` had
to be used in some calls.
author | Goffi <goffi@goffi.org> |
---|---|
date | Sat, 24 Sep 2022 16:31:39 +0200 |
parents | ffa8c8c78115 |
children | 524856bd7b19 |
rev | line source |
---|---|
3028 | 1 #!/usr/bin/env python3 |
3137 | 2 |
3592
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
3 # Result Set Management (XEP-0059) |
3479 | 4 # Copyright (C) 2009-2021 Jérôme Poisson (goffi@goffi.org) |
1766 | 5 # Copyright (C) 2013-2016 Adrien Cossa (souliane@mailoo.org) |
1219
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
6 |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
7 # This program is free software: you can redistribute it and/or modify |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
8 # it under the terms of the GNU Affero General Public License as published by |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
9 # the Free Software Foundation, either version 3 of the License, or |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
10 # (at your option) any later version. |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
11 |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
12 # This program is distributed in the hope that it will be useful, |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
15 # GNU Affero General Public License for more details. |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
16 |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
17 # You should have received a copy of the GNU Affero General Public License |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
19 |
3592
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
20 from typing import Optional |
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
21 from zope.interface import implementer |
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
22 from twisted.words.protocols.jabber import xmlstream |
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
23 from wokkel import disco |
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
24 from wokkel import iwokkel |
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
25 from wokkel import rsm |
1219
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
26 from sat.core.i18n import _ |
2145
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
27 from sat.core.constants import Const as C |
1219
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
28 from sat.core.log import getLogger |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
29 |
3592
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
30 |
1219
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
31 log = getLogger(__name__) |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
32 |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
33 |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
34 PLUGIN_INFO = { |
3028 | 35 C.PI_NAME: "Result Set Management", |
36 C.PI_IMPORT_NAME: "XEP-0059", | |
37 C.PI_TYPE: "XEP", | |
3738
ffa8c8c78115
plugin XEP-0059, cache: allow those plugins to work in component mode
Goffi <goffi@goffi.org>
parents:
3617
diff
changeset
|
38 C.PI_MODES: C.PLUG_MODE_BOTH, |
3028 | 39 C.PI_PROTOCOLS: ["XEP-0059"], |
40 C.PI_MAIN: "XEP_0059", | |
41 C.PI_HANDLER: "yes", | |
42 C.PI_DESCRIPTION: _("""Implementation of Result Set Management"""), | |
1219
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
43 } |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
44 |
3028 | 45 RSM_PREFIX = "rsm_" |
2700
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
46 |
1219
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
47 |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
48 class XEP_0059(object): |
1267
ea692d51a0ee
plugins XEP-0059, XEP-0060: leave internal wokkel extensions to sat.tmp.wokkel
souliane <souliane@mailoo.org>
parents:
1219
diff
changeset
|
49 # XXX: RSM management is done directly in Wokkel. |
1219
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
50 |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
51 def __init__(self, host): |
3028 | 52 log.info(_("Result Set Management plugin initialization")) |
1219
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
53 |
2144
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
54 def getHandler(self, client): |
1465
cbf38047ca60
plugin XEP-0059: fixed bad disco handling
Goffi <goffi@goffi.org>
parents:
1396
diff
changeset
|
55 return XEP_0059_handler() |
cbf38047ca60
plugin XEP-0059: fixed bad disco handling
Goffi <goffi@goffi.org>
parents:
1396
diff
changeset
|
56 |
2700
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
57 def parseExtra(self, extra): |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
58 """Parse extra dictionnary to retrieve RSM arguments |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
59 |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
60 @param extra(dict): data for parse |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
61 @return (rsm.RSMRequest, None): request with parsed arguments |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
62 or None if no RSM arguments have been found |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
63 """ |
3028 | 64 if int(extra.get(RSM_PREFIX + 'max', 0)) < 0: |
65 raise ValueError(_("rsm_max can't be negative")) | |
2763 | 66 |
2700
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
67 rsm_args = {} |
3028 | 68 for arg in ("max", "after", "before", "index"): |
2700
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
69 try: |
3028 | 70 argname = "max_" if arg == "max" else arg |
2700
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
71 rsm_args[argname] = extra.pop(RSM_PREFIX + arg) |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
72 except KeyError: |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
73 continue |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
74 |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
75 if rsm_args: |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
76 return rsm.RSMRequest(**rsm_args) |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
77 else: |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
78 return None |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
79 |
3308
384283adcce1
plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
80 def response2dict(self, rsm_response, data=None): |
384283adcce1
plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
81 """Return a dict with RSM response |
2717
e3f6de6ce320
plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents:
2700
diff
changeset
|
82 |
e3f6de6ce320
plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents:
2700
diff
changeset
|
83 Key set in data can be: |
e3f6de6ce320
plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents:
2700
diff
changeset
|
84 - rsm_first: first item id in the page |
e3f6de6ce320
plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents:
2700
diff
changeset
|
85 - rsm_last: last item id in the page |
e3f6de6ce320
plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents:
2700
diff
changeset
|
86 - rsm_index: position of the first item in the full set (may be approximate) |
e3f6de6ce320
plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents:
2700
diff
changeset
|
87 - rsm_count: total number of items in the full set (may be approximage) |
e3f6de6ce320
plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents:
2700
diff
changeset
|
88 If a value doesn't exists, it's not set. |
e3f6de6ce320
plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents:
2700
diff
changeset
|
89 All values are set as strings. |
3308
384283adcce1
plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
90 @param rsm_response(rsm.RSMResponse): response to parse |
2717
e3f6de6ce320
plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents:
2700
diff
changeset
|
91 @param data(dict, None): dict to update with rsm_* data. |
e3f6de6ce320
plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents:
2700
diff
changeset
|
92 If None, a new dict is created |
e3f6de6ce320
plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents:
2700
diff
changeset
|
93 @return (dict): data dict |
e3f6de6ce320
plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents:
2700
diff
changeset
|
94 """ |
e3f6de6ce320
plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents:
2700
diff
changeset
|
95 if data is None: |
e3f6de6ce320
plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents:
2700
diff
changeset
|
96 data = {} |
e3f6de6ce320
plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents:
2700
diff
changeset
|
97 if rsm_response.first is not None: |
3308
384283adcce1
plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
98 data["first"] = rsm_response.first |
2717
e3f6de6ce320
plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents:
2700
diff
changeset
|
99 if rsm_response.last is not None: |
3308
384283adcce1
plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
100 data["last"] = rsm_response.last |
2717
e3f6de6ce320
plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents:
2700
diff
changeset
|
101 if rsm_response.index is not None: |
3308
384283adcce1
plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
102 data["index"] = rsm_response.index |
2717
e3f6de6ce320
plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents:
2700
diff
changeset
|
103 return data |
e3f6de6ce320
plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents:
2700
diff
changeset
|
104 |
3592
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
105 def getNextRequest( |
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
106 self, |
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
107 rsm_request: rsm.RSMRequest, |
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
108 rsm_response: rsm.RSMResponse, |
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
109 log_progress: bool = True, |
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
110 ) -> Optional[rsm.RSMRequest]: |
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
111 """Generate next request to paginate through all items |
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
112 |
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
113 Page will be retrieved forward |
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
114 @param rsm_request: last request used |
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
115 @param rsm_response: response from the last request |
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
116 @return: request to retrive next page, or None if we are at the end |
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
117 or if pagination is not possible |
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
118 """ |
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
119 if rsm_request.max == 0: |
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
120 log.warning("Can't do pagination if max is 0") |
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
121 return None |
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
122 if rsm_response is None: |
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
123 # may happen if result set it empty, or we are at the end |
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
124 return None |
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
125 if ( |
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
126 rsm_response.count is not None |
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
127 and rsm_response.index is not None |
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
128 ): |
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
129 next_index = rsm_response.index + rsm_request.max |
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
130 if next_index >= rsm_response.count: |
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
131 # we have reached the last page |
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
132 return None |
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
133 |
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
134 if log_progress: |
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
135 log.debug( |
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
136 f"retrieving items {next_index} to " |
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
137 f"{min(next_index+rsm_request.max, rsm_response.count)} on " |
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
138 f"{rsm_response.count} ({next_index/rsm_response.count*100:.2f}%)" |
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
139 ) |
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
140 |
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
141 if rsm_response.last is None: |
3617
766729ac4146
plugin XEP-0059: don't show warning message when <last> is missing if there is not message
Goffi <goffi@goffi.org>
parents:
3592
diff
changeset
|
142 if rsm_response.count: |
766729ac4146
plugin XEP-0059: don't show warning message when <last> is missing if there is not message
Goffi <goffi@goffi.org>
parents:
3592
diff
changeset
|
143 log.warning("Can't do pagination, no \"last\" received") |
3592
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
144 return None |
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
145 |
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
146 return rsm.RSMRequest( |
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
147 max_=rsm_request.max, |
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
148 after=rsm_response.last |
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
149 ) |
ef144aaea2bb
plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
150 |
1219
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
151 |
3028 | 152 @implementer(iwokkel.IDisco) |
1769 | 153 class XEP_0059_handler(xmlstream.XMPPHandler): |
1219
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
154 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
155 def getDiscoInfo(self, requestor, target, nodeIdentifier=""): |
1769 | 156 return [disco.DiscoFeature(rsm.NS_RSM)] |
1219
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
157 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
158 def getDiscoItems(self, requestor, target, nodeIdentifier=""): |
1219
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
159 return [] |