annotate sat/plugins/plugin_xep_0059.py @ 3732:0fac164ff2d8

tools (xml_tools): fix `widget_args` modification in `_dataFormField2XMLUIData`: in `textbox` widget, the first arg was modified with all values, lettings other ones unchanger, resulting in invalid number of arguments. This has been fixed by replacing all args with the new value.
author Goffi <goffi@goffi.org>
date Mon, 31 Jan 2022 18:35:52 +0100
parents 766729ac4146
children ffa8c8c78115
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
1 #!/usr/bin/env python3
3137
559a625a236b fixed shebangs
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
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
be6d91572633 date update
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
4 # Copyright (C) 2009-2021 Jérôme Poisson (goffi@goffi.org)
1766
d17772b0fe22 copyright update
Goffi <goffi@goffi.org>
parents: 1465
diff changeset
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
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
35 C.PI_NAME: "Result Set Management",
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
36 C.PI_IMPORT_NAME: "XEP-0059",
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
37 C.PI_TYPE: "XEP",
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
38 C.PI_PROTOCOLS: ["XEP-0059"],
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
39 C.PI_MAIN: "XEP_0059",
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
40 C.PI_HANDLER: "yes",
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
41 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
42 }
16484ebb695b plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff changeset
43
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
44 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
45
1219
16484ebb695b plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff changeset
46
16484ebb695b plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff changeset
47 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
48 # 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
49
16484ebb695b plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff changeset
50 def __init__(self, host):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
51 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
52
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
53 def getHandler(self, client):
1465
cbf38047ca60 plugin XEP-0059: fixed bad disco handling
Goffi <goffi@goffi.org>
parents: 1396
diff changeset
54 return XEP_0059_handler()
cbf38047ca60 plugin XEP-0059: fixed bad disco handling
Goffi <goffi@goffi.org>
parents: 1396
diff changeset
55
2700
035901dc946d plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
56 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
57 """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
58
035901dc946d plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
59 @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
60 @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
61 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
62 """
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
63 if int(extra.get(RSM_PREFIX + 'max', 0)) < 0:
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
64 raise ValueError(_("rsm_max can't be negative"))
2763
c4190d5340ab XEP-0059: max value check:
Goffi <goffi@goffi.org>
parents: 2717
diff changeset
65
2700
035901dc946d plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
66 rsm_args = {}
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
67 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
68 try:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
69 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
70 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
71 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
72 continue
035901dc946d plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
73
035901dc946d plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
74 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
75 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
76 else:
035901dc946d plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
77 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
78
3308
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
79 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
80 """Return a dict with RSM response
2717
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
81
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
82 Key set in data can be:
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
83 - rsm_first: first item id in the page
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
84 - rsm_last: last item id in the page
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
85 - 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
86 - 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
87 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
88 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
89 @param rsm_response(rsm.RSMResponse): response to parse
2717
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
90 @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
91 If None, a new dict is created
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
92 @return (dict): data dict
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
93 """
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
94 if data is None:
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
95 data = {}
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
96 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
97 data["first"] = rsm_response.first
2717
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
98 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
99 data["last"] = rsm_response.last
2717
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
100 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
101 data["index"] = rsm_response.index
2717
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
102 return data
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
103
3592
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
104 def getNextRequest(
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
105 self,
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
106 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
107 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
108 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
109 ) -> 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
110 """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
111
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
112 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
113 @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
114 @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
115 @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
116 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
117 """
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
118 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
119 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
120 return None
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
121 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
122 # 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
123 return None
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
124 if (
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
125 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
126 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
127 ):
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
128 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
129 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
130 # 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
131 return None
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
132
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
133 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
134 log.debug(
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
135 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
136 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
137 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
138 )
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 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
141 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
142 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
143 return None
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
144
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
145 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
146 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
147 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
148 )
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
149
1219
16484ebb695b plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff changeset
150
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
151 @implementer(iwokkel.IDisco)
1769
1fc6a380f4db plugin xep-0059: minor cleaning
Goffi <goffi@goffi.org>
parents: 1766
diff changeset
152 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
153
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
154 def getDiscoInfo(self, requestor, target, nodeIdentifier=""):
1769
1fc6a380f4db plugin xep-0059: minor cleaning
Goffi <goffi@goffi.org>
parents: 1766
diff changeset
155 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
156
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
157 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
158 return []