Mercurial > libervia-backend
annotate sat/plugins/plugin_xep_0313.py @ 3728:b15644cae50d
component AP gateway: JID/node ⟺ AP outbox conversion:
- convert a combination of JID and optional pubsub node to AP actor handle (see
`getJIDAndNode` for details) and vice versa
- the gateway now provides a Pubsub service
- retrieve pubsub node and convert it to AP collection, AP pagination is converted to RSM
- do the opposite: convert AP collection to pubsub and handle RSM request. Due to
ActivityStream collection pagination limitations, some RSM request produce inefficient
requests, but caching should be used most of the time in the future and avoid the
problem.
- set specific name to HTTP Server
- new `local_only` setting (`True` by default) to indicate if the gateway can request or
not XMPP Pubsub nodes from other servers
- disco info now specifies important features such as Pubsub RSM, and nodes metadata
ticket 363
author | Goffi <goffi@goffi.org> |
---|---|
date | Tue, 25 Jan 2022 17:54:06 +0100 |
parents | 813595f88612 |
children | 5245b675f7ad |
rev | line source |
---|---|
3028 | 1 #!/usr/bin/env python3 |
3137 | 2 |
1277 | 3 |
4 # SAT plugin for Message Archive Management (XEP-0313) | |
3479 | 5 # Copyright (C) 2009-2021 Jérôme Poisson (goffi@goffi.org) |
1766 | 6 # Copyright (C) 2013-2016 Adrien Cossa (souliane@mailoo.org) |
1277 | 7 |
8 # This program is free software: you can redistribute it and/or modify | |
9 # it under the terms of the GNU Affero General Public License as published by | |
10 # the Free Software Foundation, either version 3 of the License, or | |
11 # (at your option) any later version. | |
12 | |
13 # This program is distributed in the hope that it will be useful, | |
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
16 # GNU Affero General Public License for more details. | |
17 | |
18 # You should have received a copy of the GNU Affero General Public License | |
19 # along with this program. If not, see <http://www.gnu.org/licenses/>. | |
20 | |
21 from sat.core.constants import Const as C | |
22 from sat.core.i18n import _ | |
23 from sat.core.log import getLogger | |
1776
4fc1bf1af48f
plugin XEP-0313: cleaning and improvments:
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
24 from sat.core import exceptions |
2701
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
25 from sat.tools.common import data_format |
1284
41ffe2c2dddc
plugin XEP-0313: update (still draft)
souliane <souliane@mailoo.org>
parents:
1277
diff
changeset
|
26 from twisted.words.protocols.jabber import jid |
2701
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
27 from twisted.internet import defer |
3028 | 28 from zope.interface import implementer |
2701
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
29 from datetime import datetime |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
30 from dateutil import tz |
1776
4fc1bf1af48f
plugin XEP-0313: cleaning and improvments:
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
31 from wokkel import disco |
2701
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
32 from wokkel import data_form |
1776
4fc1bf1af48f
plugin XEP-0313: cleaning and improvments:
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
33 import uuid |
1277 | 34 |
2413
70399d1acb47
tmp: removed sat.tmp hierarchy and fixed references to it as it is now an independant sat_tmp repository
Goffi <goffi@goffi.org>
parents:
2145
diff
changeset
|
35 # XXX: mam and rsm come from sat_tmp.wokkel |
1776
4fc1bf1af48f
plugin XEP-0313: cleaning and improvments:
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
36 from wokkel import rsm |
4fc1bf1af48f
plugin XEP-0313: cleaning and improvments:
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
37 from wokkel import mam |
1285
ed2c718bfe03
tmp, plugins: fixes the imports fron sat.tmp
souliane <souliane@mailoo.org>
parents:
1284
diff
changeset
|
38 |
1277 | 39 |
2701
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
40 log = getLogger(__name__) |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
41 |
1277 | 42 PLUGIN_INFO = { |
3028 | 43 C.PI_NAME: "Message Archive Management", |
44 C.PI_IMPORT_NAME: "XEP-0313", | |
45 C.PI_TYPE: "XEP", | |
3447
c3f07c0cb2de
plugin XEP-0431: Fulltext Search for MAM implementation
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
46 # XEP-0431 only defines a namespace, so we register it here |
c3f07c0cb2de
plugin XEP-0431: Fulltext Search for MAM implementation
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
47 C.PI_PROTOCOLS: ["XEP-0313", "XEP-0431"], |
3028 | 48 C.PI_DEPENDENCIES: ["XEP-0059", "XEP-0359"], |
49 C.PI_MAIN: "XEP_0313", | |
50 C.PI_HANDLER: "yes", | |
51 C.PI_DESCRIPTION: _("""Implementation of Message Archive Management"""), | |
1277 | 52 } |
53 | |
3028 | 54 MAM_PREFIX = "mam_" |
2701
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
55 FILTER_PREFIX = MAM_PREFIX + "filter_" |
3028 | 56 KEY_LAST_STANZA_ID = "last_stanza_id" |
2930
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
57 MESSAGE_RESULT = "/message/result[@xmlns='{mam_ns}' and @queryid='{query_id}']" |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
58 MESSAGE_STANZA_ID = '/message/stanza-id[@xmlns="{ns_stanza_id}"]' |
3447
c3f07c0cb2de
plugin XEP-0431: Fulltext Search for MAM implementation
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
59 NS_FTS = "urn:xmpp:fulltext:0" |
2701
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
60 |
1277 | 61 |
62 class XEP_0313(object): | |
63 def __init__(self, host): | |
64 log.info(_("Message Archive Management plugin initialization")) | |
65 self.host = host | |
3028 | 66 self.host.registerNamespace("mam", mam.NS_MAM) |
3447
c3f07c0cb2de
plugin XEP-0431: Fulltext Search for MAM implementation
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
67 host.registerNamespace("fulltextmam", NS_FTS) |
3028 | 68 self._rsm = host.plugins["XEP-0059"] |
69 self._sid = host.plugins["XEP-0359"] | |
2930
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
70 # Deferred used to store last stanza id in order of reception |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
71 self._last_stanza_id_d = defer.Deferred() |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
72 self._last_stanza_id_d.callback(None) |
2701
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
73 host.bridge.addMethod( |
2718
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2713
diff
changeset
|
74 "MAMGet", ".plugin", in_sign='sss', |
3356
569f4cf7183b
plugin XEP-0313: fixed `MAMGet` signature
Goffi <goffi@goffi.org>
parents:
3308
diff
changeset
|
75 out_sign='(a(sdssa{ss}a{ss}ss)ss)', method=self._getArchives, |
3028 | 76 async_=True) |
2701
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
77 |
3541
888109774673
core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
78 async def resume(self, client): |
3011
93da7c6f8e0c
plugin XEP-0198: retrieve missing messages + send buffered ones on hot reconnection:
Goffi <goffi@goffi.org>
parents:
2930
diff
changeset
|
79 """Retrieve one2one messages received since the last we have in local storage""" |
3541
888109774673
core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
80 stanza_id_data = await self.host.memory.storage.getPrivates( |
2930
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
81 mam.NS_MAM, [KEY_LAST_STANZA_ID], profile=client.profile) |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
82 stanza_id = stanza_id_data.get(KEY_LAST_STANZA_ID) |
3561
4dad134a82c6
plugin XEP-0313: on cold start (without known archive) we only request 50 last messages
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
83 rsm_req = None |
2930
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
84 if stanza_id is None: |
3028 | 85 log.info("can't retrieve last stanza ID, checking history") |
3541
888109774673
core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
86 last_mess = await self.host.memory.historyGet( |
3028 | 87 None, None, limit=1, filters={'not_types': C.MESS_TYPE_GROUPCHAT, |
88 'last_stanza_id': True}, | |
2930
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
89 profile=client.profile) |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
90 if not last_mess: |
3028 | 91 log.info(_("It seems that we have no MAM history yet")) |
3357
40794e658d68
plugin XEP-0313: fix getting MAM archive when history is empty
Goffi <goffi@goffi.org>
parents:
3356
diff
changeset
|
92 stanza_id = None |
3561
4dad134a82c6
plugin XEP-0313: on cold start (without known archive) we only request 50 last messages
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
93 rsm_req = rsm.RSMRequest(max_=50, before="") |
3357
40794e658d68
plugin XEP-0313: fix getting MAM archive when history is empty
Goffi <goffi@goffi.org>
parents:
3356
diff
changeset
|
94 else: |
40794e658d68
plugin XEP-0313: fix getting MAM archive when history is empty
Goffi <goffi@goffi.org>
parents:
3356
diff
changeset
|
95 stanza_id = last_mess[0][-1]['stanza_id'] |
3561
4dad134a82c6
plugin XEP-0313: on cold start (without known archive) we only request 50 last messages
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
96 if rsm_req is None: |
4dad134a82c6
plugin XEP-0313: on cold start (without known archive) we only request 50 last messages
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
97 rsm_req = rsm.RSMRequest(max_=100, after=stanza_id) |
2701
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
98 mam_req = mam.MAMRequest(rsm_=rsm_req) |
2718
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2713
diff
changeset
|
99 complete = False |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2713
diff
changeset
|
100 count = 0 |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2713
diff
changeset
|
101 while not complete: |
3541
888109774673
core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
102 mam_data = await self.getArchives(client, mam_req, |
2718
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2713
diff
changeset
|
103 service=client.jid.userhostJID()) |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2713
diff
changeset
|
104 elt_list, rsm_response, mam_response = mam_data |
3028 | 105 complete = mam_response["complete"] |
2718
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2713
diff
changeset
|
106 # we update MAM request for next iteration |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2713
diff
changeset
|
107 mam_req.rsm.after = rsm_response.last |
3561
4dad134a82c6
plugin XEP-0313: on cold start (without known archive) we only request 50 last messages
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
108 # before may be set if we had no previous history |
4dad134a82c6
plugin XEP-0313: on cold start (without known archive) we only request 50 last messages
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
109 mam_req.rsm.before = None |
2718
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2713
diff
changeset
|
110 if not elt_list: |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2713
diff
changeset
|
111 break |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2713
diff
changeset
|
112 else: |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2713
diff
changeset
|
113 count += len(elt_list) |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2713
diff
changeset
|
114 |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2713
diff
changeset
|
115 for mess_elt in elt_list: |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2713
diff
changeset
|
116 try: |
2930
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
117 fwd_message_elt = self.getMessageFromResult( |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
118 client, mess_elt, mam_req) |
2718
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2713
diff
changeset
|
119 except exceptions.DataError: |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2713
diff
changeset
|
120 continue |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2713
diff
changeset
|
121 |
2930
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
122 try: |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
123 destinee = jid.JID(fwd_message_elt['to']) |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
124 except KeyError: |
3028 | 125 log.warning(_('missing "to" attribute in forwarded message')) |
2930
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
126 destinee = client.jid |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
127 if destinee.userhostJID() == client.jid.userhostJID(): |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
128 # message to use, we insert the forwarded message in the normal |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
129 # workflow |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
130 client.xmlstream.dispatch(fwd_message_elt) |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
131 else: |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
132 # this message should be from us, we just add it to history |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
133 try: |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
134 from_jid = jid.JID(fwd_message_elt['from']) |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
135 except KeyError: |
3028 | 136 log.warning(_('missing "from" attribute in forwarded message')) |
2930
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
137 from_jid = client.jid |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
138 if from_jid.userhostJID() != client.jid.userhostJID(): |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
139 log.warning(_( |
3028 | 140 'was expecting a message sent by our jid, but this one if ' |
141 'from {from_jid}, ignoring\n{xml}').format( | |
2930
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
142 from_jid=from_jid.full(), xml=mess_elt.toXml())) |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
143 continue |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
144 # adding message to history |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
145 mess_data = client.messageProt.parseMessage(fwd_message_elt) |
3023
1f74cd0f22c3
plugin XEP-0313: log issues in addToHistory instead of raising error
Goffi <goffi@goffi.org>
parents:
3011
diff
changeset
|
146 try: |
3541
888109774673
core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
147 await client.messageProt.addToHistory(mess_data) |
3023
1f74cd0f22c3
plugin XEP-0313: log issues in addToHistory instead of raising error
Goffi <goffi@goffi.org>
parents:
3011
diff
changeset
|
148 except exceptions.CancelError as e: |
1f74cd0f22c3
plugin XEP-0313: log issues in addToHistory instead of raising error
Goffi <goffi@goffi.org>
parents:
3011
diff
changeset
|
149 log.warning( |
3028 | 150 "message has not been added to history: {e}".format(e=e)) |
3023
1f74cd0f22c3
plugin XEP-0313: log issues in addToHistory instead of raising error
Goffi <goffi@goffi.org>
parents:
3011
diff
changeset
|
151 except Exception as e: |
1f74cd0f22c3
plugin XEP-0313: log issues in addToHistory instead of raising error
Goffi <goffi@goffi.org>
parents:
3011
diff
changeset
|
152 log.error( |
3028 | 153 "can't add message to history: {e}\n{xml}" |
3023
1f74cd0f22c3
plugin XEP-0313: log issues in addToHistory instead of raising error
Goffi <goffi@goffi.org>
parents:
3011
diff
changeset
|
154 .format(e=e, xml=mess_elt.toXml())) |
2718
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2713
diff
changeset
|
155 |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2713
diff
changeset
|
156 if not count: |
3028 | 157 log.info(_("We have received no message while offline")) |
2701
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
158 else: |
3028 | 159 log.info(_("We have received {num_mess} message(s) while offline.") |
2718
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2713
diff
changeset
|
160 .format(num_mess=count)) |
1277 | 161 |
3541
888109774673
core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
162 async def profileConnected(self, client): |
888109774673
core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
163 await self.resume(client) |
3011
93da7c6f8e0c
plugin XEP-0198: retrieve missing messages + send buffered ones on hot reconnection:
Goffi <goffi@goffi.org>
parents:
2930
diff
changeset
|
164 |
2144
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
165 def getHandler(self, client): |
2930
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
166 mam_client = client._mam = SatMAMClient(self) |
1776
4fc1bf1af48f
plugin XEP-0313: cleaning and improvments:
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
167 return mam_client |
1277 | 168 |
2701
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
169 def parseExtra(self, extra, with_rsm=True): |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
170 """Parse extra dictionnary to retrieve MAM arguments |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
171 |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
172 @param extra(dict): data for parse |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
173 @param with_rsm(bool): if True, RSM data will be parsed too |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
174 @return (data_form, None): request with parsed arguments |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
175 or None if no MAM arguments have been found |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
176 """ |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
177 mam_args = {} |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
178 form_args = {} |
3028 | 179 for arg in ("start", "end"): |
2701
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
180 try: |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
181 value = extra.pop(MAM_PREFIX + arg) |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
182 form_args[arg] = datetime.fromtimestamp(float(value), tz.tzutc()) |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
183 except (TypeError, ValueError): |
3028 | 184 log.warning("Bad value for {arg} filter ({value}), ignoring".format( |
2701
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
185 arg=arg, value=value)) |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
186 except KeyError: |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
187 continue |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
188 |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
189 try: |
3028 | 190 form_args["with_jid"] = jid.JID(extra.pop( |
191 MAM_PREFIX + "with")) | |
2701
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
192 except (jid.InvalidFormat): |
3028 | 193 log.warning("Bad value for jid filter") |
2701
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
194 except KeyError: |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
195 pass |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
196 |
3028 | 197 for name, value in extra.items(): |
2701
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
198 if name.startswith(FILTER_PREFIX): |
2763 | 199 var = name[len(FILTER_PREFIX):] |
3028 | 200 extra_fields = form_args.setdefault("extra_fields", []) |
2701
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
201 extra_fields.append(data_form.Field(var=var, value=value)) |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
202 |
3028 | 203 for arg in ("node", "query_id"): |
2701
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
204 try: |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
205 value = extra.pop(MAM_PREFIX + arg) |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
206 mam_args[arg] = value |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
207 except KeyError: |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
208 continue |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
209 |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
210 if with_rsm: |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
211 rsm_request = self._rsm.parseExtra(extra) |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
212 if rsm_request is not None: |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
213 mam_args["rsm_"] = rsm_request |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
214 |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
215 if form_args: |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
216 mam_args["form"] = mam.buildForm(**form_args) |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
217 |
2760
3480d4fdf83a
plugins XEP-0060, XEP-0313: implemented Order-By protoXEP:
Goffi <goffi@goffi.org>
parents:
2718
diff
changeset
|
218 # we only set orderBy if we have other MAM args |
3480d4fdf83a
plugins XEP-0060, XEP-0313: implemented Order-By protoXEP:
Goffi <goffi@goffi.org>
parents:
2718
diff
changeset
|
219 # else we would make a MAM query while it's not expected |
3028 | 220 if "order_by" in extra and mam_args: |
221 order_by = extra.pop("order_by") | |
2760
3480d4fdf83a
plugins XEP-0060, XEP-0313: implemented Order-By protoXEP:
Goffi <goffi@goffi.org>
parents:
2718
diff
changeset
|
222 assert isinstance(order_by, list) |
3480d4fdf83a
plugins XEP-0060, XEP-0313: implemented Order-By protoXEP:
Goffi <goffi@goffi.org>
parents:
2718
diff
changeset
|
223 mam_args["orderBy"] = order_by |
3480d4fdf83a
plugins XEP-0060, XEP-0313: implemented Order-By protoXEP:
Goffi <goffi@goffi.org>
parents:
2718
diff
changeset
|
224 |
2701
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
225 return mam.MAMRequest(**mam_args) if mam_args else None |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
226 |
2713
19000c506d0c
plugin XEP-0313: improvments to prepare MUC MAM:
Goffi <goffi@goffi.org>
parents:
2701
diff
changeset
|
227 def getMessageFromResult(self, client, mess_elt, mam_req, service=None): |
2701
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
228 """Extract usable <message/> from MAM query result |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
229 |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
230 The message will be validated, and stanza-id/delay will be added if necessary. |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
231 @param mess_elt(domish.Element): result <message/> element wrapping the message |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
232 to retrieve |
2718
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2713
diff
changeset
|
233 @param mam_req(mam.MAMRequest): request used (needed to get query_id) |
2713
19000c506d0c
plugin XEP-0313: improvments to prepare MUC MAM:
Goffi <goffi@goffi.org>
parents:
2701
diff
changeset
|
234 @param service(jid.JID, None): MAM service where the request has been sent |
19000c506d0c
plugin XEP-0313: improvments to prepare MUC MAM:
Goffi <goffi@goffi.org>
parents:
2701
diff
changeset
|
235 None if it's user server |
2930
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
236 @return domish.Element): <message/> that can be used directly with onMessage |
2701
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
237 """ |
3028 | 238 if mess_elt.name != "message": |
239 log.warning("unexpected stanza in archive: {xml}".format( | |
2701
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
240 xml=mess_elt.toXml())) |
3028 | 241 raise exceptions.DataError("Invalid element") |
2713
19000c506d0c
plugin XEP-0313: improvments to prepare MUC MAM:
Goffi <goffi@goffi.org>
parents:
2701
diff
changeset
|
242 service_jid = client.jid.userhostJID() if service is None else service |
3028 | 243 mess_from = mess_elt["from"] |
2713
19000c506d0c
plugin XEP-0313: improvments to prepare MUC MAM:
Goffi <goffi@goffi.org>
parents:
2701
diff
changeset
|
244 # we check that the message has been sent by the right service |
19000c506d0c
plugin XEP-0313: improvments to prepare MUC MAM:
Goffi <goffi@goffi.org>
parents:
2701
diff
changeset
|
245 # if service is None (i.e. message expected from our own server) |
19000c506d0c
plugin XEP-0313: improvments to prepare MUC MAM:
Goffi <goffi@goffi.org>
parents:
2701
diff
changeset
|
246 # from can be server jid or user's bare jid |
19000c506d0c
plugin XEP-0313: improvments to prepare MUC MAM:
Goffi <goffi@goffi.org>
parents:
2701
diff
changeset
|
247 if (mess_from != service_jid.full() |
19000c506d0c
plugin XEP-0313: improvments to prepare MUC MAM:
Goffi <goffi@goffi.org>
parents:
2701
diff
changeset
|
248 and not (service is None and mess_from == client.jid.host)): |
3028 | 249 log.error("Message is not from our server, something went wrong: " |
250 "{xml}".format(xml=mess_elt.toXml())) | |
251 raise exceptions.DataError("Invalid element") | |
2701
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
252 try: |
3028 | 253 result_elt = next(mess_elt.elements(mam.NS_MAM, "result")) |
254 forwarded_elt = next(result_elt.elements(C.NS_FORWARD, "forwarded")) | |
2701
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
255 try: |
3028 | 256 delay_elt = next(forwarded_elt.elements(C.NS_DELAY, "delay")) |
2701
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
257 except StopIteration: |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
258 # delay_elt is not mandatory |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
259 delay_elt = None |
3028 | 260 fwd_message_elt = next(forwarded_elt.elements(C.NS_CLIENT, "message")) |
2701
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
261 except StopIteration: |
3028 | 262 log.warning("Invalid message received from MAM: {xml}".format( |
2701
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
263 xml=mess_elt.toXml())) |
3028 | 264 raise exceptions.DataError("Invalid element") |
2701
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
265 else: |
3028 | 266 if not result_elt["queryid"] == mam_req.query_id: |
267 log.error("Unexpected query id (was expecting {query_id}): {xml}" | |
2701
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
268 .format(query_id=mam.query_id, xml=mess_elt.toXml())) |
3028 | 269 raise exceptions.DataError("Invalid element") |
2701
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
270 stanza_id = self._sid.getStanzaId(fwd_message_elt, |
2713
19000c506d0c
plugin XEP-0313: improvments to prepare MUC MAM:
Goffi <goffi@goffi.org>
parents:
2701
diff
changeset
|
271 service_jid) |
2701
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
272 if stanza_id is None: |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
273 # not stanza-id element is present, we add one so message |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
274 # will be archived with it, and we won't request several times |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
275 # the same MAM achive |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
276 try: |
3028 | 277 stanza_id = result_elt["id"] |
2701
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
278 except AttributeError: |
3028 | 279 log.warning('Invalid MAM result: missing "id" attribute: {xml}' |
2701
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
280 .format(xml=result_elt.toXml())) |
3028 | 281 raise exceptions.DataError("Invalid element") |
2713
19000c506d0c
plugin XEP-0313: improvments to prepare MUC MAM:
Goffi <goffi@goffi.org>
parents:
2701
diff
changeset
|
282 self._sid.addStanzaId(client, fwd_message_elt, stanza_id, by=service_jid) |
2701
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
283 |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
284 if delay_elt is not None: |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
285 fwd_message_elt.addChild(delay_elt) |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
286 |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
287 return fwd_message_elt |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
288 |
1776
4fc1bf1af48f
plugin XEP-0313: cleaning and improvments:
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
289 def queryFields(self, client, service=None): |
4fc1bf1af48f
plugin XEP-0313: cleaning and improvments:
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
290 """Ask the server about supported fields. |
1284
41ffe2c2dddc
plugin XEP-0313: update (still draft)
souliane <souliane@mailoo.org>
parents:
1277
diff
changeset
|
291 |
41ffe2c2dddc
plugin XEP-0313: update (still draft)
souliane <souliane@mailoo.org>
parents:
1277
diff
changeset
|
292 @param service: entity offering the MAM service (None for user archives) |
1776
4fc1bf1af48f
plugin XEP-0313: cleaning and improvments:
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
293 @return (D(data_form.Form)): form with the implemented fields (cf XEP-0313 §4.1.5) |
1277 | 294 """ |
1776
4fc1bf1af48f
plugin XEP-0313: cleaning and improvments:
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
295 return client._mam.queryFields(service) |
1277 | 296 |
2701
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
297 def queryArchive(self, client, mam_req, service=None): |
1284
41ffe2c2dddc
plugin XEP-0313: update (still draft)
souliane <souliane@mailoo.org>
parents:
1277
diff
changeset
|
298 """Query a user, MUC or pubsub archive. |
41ffe2c2dddc
plugin XEP-0313: update (still draft)
souliane <souliane@mailoo.org>
parents:
1277
diff
changeset
|
299 |
2701
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
300 @param mam_req(mam.MAMRequest): MAM query instance |
1776
4fc1bf1af48f
plugin XEP-0313: cleaning and improvments:
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
301 @param service(jid.JID, None): entity offering the MAM service |
4fc1bf1af48f
plugin XEP-0313: cleaning and improvments:
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
302 None for user server |
4fc1bf1af48f
plugin XEP-0313: cleaning and improvments:
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
303 @return (D(domish.Element)): <IQ/> result |
1277 | 304 """ |
2701
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
305 return client._mam.queryArchive(mam_req, service) |
1776
4fc1bf1af48f
plugin XEP-0313: cleaning and improvments:
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
306 |
4fc1bf1af48f
plugin XEP-0313: cleaning and improvments:
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
307 def _appendMessage(self, elt_list, message_cb, message_elt): |
4fc1bf1af48f
plugin XEP-0313: cleaning and improvments:
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
308 if message_cb is not None: |
4fc1bf1af48f
plugin XEP-0313: cleaning and improvments:
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
309 elt_list.append(message_cb(message_elt)) |
4fc1bf1af48f
plugin XEP-0313: cleaning and improvments:
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
310 else: |
4fc1bf1af48f
plugin XEP-0313: cleaning and improvments:
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
311 elt_list.append(message_elt) |
4fc1bf1af48f
plugin XEP-0313: cleaning and improvments:
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
312 |
4fc1bf1af48f
plugin XEP-0313: cleaning and improvments:
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
313 def _queryFinished(self, iq_result, client, elt_list, event): |
4fc1bf1af48f
plugin XEP-0313: cleaning and improvments:
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
314 client.xmlstream.removeObserver(event, self._appendMessage) |
4fc1bf1af48f
plugin XEP-0313: cleaning and improvments:
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
315 try: |
3028 | 316 fin_elt = next(iq_result.elements(mam.NS_MAM, "fin")) |
1776
4fc1bf1af48f
plugin XEP-0313: cleaning and improvments:
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
317 except StopIteration: |
3028 | 318 raise exceptions.DataError("Invalid MAM result") |
1277 | 319 |
3028 | 320 mam_response = {"complete": C.bool(fin_elt.getAttribute("complete", C.BOOL_FALSE)), |
321 "stable": C.bool(fin_elt.getAttribute("stable", C.BOOL_TRUE))} | |
2718
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2713
diff
changeset
|
322 |
1776
4fc1bf1af48f
plugin XEP-0313: cleaning and improvments:
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
323 try: |
4fc1bf1af48f
plugin XEP-0313: cleaning and improvments:
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
324 rsm_response = rsm.RSMResponse.fromElement(fin_elt) |
4fc1bf1af48f
plugin XEP-0313: cleaning and improvments:
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
325 except rsm.RSMNotFoundError: |
4fc1bf1af48f
plugin XEP-0313: cleaning and improvments:
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
326 rsm_response = None |
4fc1bf1af48f
plugin XEP-0313: cleaning and improvments:
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
327 |
2718
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2713
diff
changeset
|
328 return (elt_list, rsm_response, mam_response) |
1776
4fc1bf1af48f
plugin XEP-0313: cleaning and improvments:
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
329 |
2713
19000c506d0c
plugin XEP-0313: improvments to prepare MUC MAM:
Goffi <goffi@goffi.org>
parents:
2701
diff
changeset
|
330 def serializeArchiveResult(self, data, client, mam_req, service): |
2718
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2713
diff
changeset
|
331 elt_list, rsm_response, mam_response = data |
2701
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
332 mess_list = [] |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
333 for elt in elt_list: |
2713
19000c506d0c
plugin XEP-0313: improvments to prepare MUC MAM:
Goffi <goffi@goffi.org>
parents:
2701
diff
changeset
|
334 fwd_message_elt = self.getMessageFromResult(client, elt, mam_req, |
19000c506d0c
plugin XEP-0313: improvments to prepare MUC MAM:
Goffi <goffi@goffi.org>
parents:
2701
diff
changeset
|
335 service=service) |
2701
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
336 mess_data = client.messageProt.parseMessage(fwd_message_elt) |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
337 mess_list.append(client.messageGetBridgeArgs(mess_data)) |
3308
384283adcce1
plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
338 metadata = { |
384283adcce1
plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
339 'rsm': self._rsm.response2dict(rsm_response), |
384283adcce1
plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
340 'mam': mam_response |
384283adcce1
plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
341 } |
3356
569f4cf7183b
plugin XEP-0313: fixed `MAMGet` signature
Goffi <goffi@goffi.org>
parents:
3308
diff
changeset
|
342 return mess_list, data_format.serialise(metadata), client.profile |
2701
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
343 |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
344 def _getArchives(self, service, extra_ser, profile_key): |
2718
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2713
diff
changeset
|
345 """ |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2713
diff
changeset
|
346 @return: tuple with: |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2713
diff
changeset
|
347 - list of message with same data as in bridge.messageNew |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2713
diff
changeset
|
348 - response metadata with: |
3308
384283adcce1
plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
349 - rsm data (first, last, count, index) |
384283adcce1
plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
350 - mam data (complete, stable) |
2718
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2713
diff
changeset
|
351 - profile |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2713
diff
changeset
|
352 """ |
2701
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
353 client = self.host.getClient(profile_key) |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
354 service = jid.JID(service) if service else None |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
355 extra = data_format.deserialise(extra_ser, {}) |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
356 mam_req = self.parseExtra(extra) |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
357 |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
358 d = self.getArchives(client, mam_req, service=service) |
2713
19000c506d0c
plugin XEP-0313: improvments to prepare MUC MAM:
Goffi <goffi@goffi.org>
parents:
2701
diff
changeset
|
359 d.addCallback(self.serializeArchiveResult, client, mam_req, service) |
2701
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
360 return d |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
361 |
1776
4fc1bf1af48f
plugin XEP-0313: cleaning and improvments:
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
362 def getArchives(self, client, query, service=None, message_cb=None): |
2718
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2713
diff
changeset
|
363 """Query archive and gather page result |
1277 | 364 |
2718
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2713
diff
changeset
|
365 @param query(mam.MAMRequest): MAM request |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2713
diff
changeset
|
366 @param service(jid.JID, None): MAM service to use |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2713
diff
changeset
|
367 None to use our own server |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2713
diff
changeset
|
368 @param message_cb(callable, None): callback to use on each message |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2713
diff
changeset
|
369 this method can be used to unwrap messages |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2713
diff
changeset
|
370 @return (tuple[list[domish.Element], rsm.RSMResponse, dict): result data with: |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2713
diff
changeset
|
371 - list of found elements |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2713
diff
changeset
|
372 - RSM response |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2713
diff
changeset
|
373 - MAM response, which is a dict with following value: |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2713
diff
changeset
|
374 - complete: a boolean which is True if all items have been received |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2713
diff
changeset
|
375 - stable: a boolean which is False if items order may be changed |
1776
4fc1bf1af48f
plugin XEP-0313: cleaning and improvments:
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
376 """ |
4fc1bf1af48f
plugin XEP-0313: cleaning and improvments:
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
377 if query.query_id is None: |
3028 | 378 query.query_id = str(uuid.uuid4()) |
1776
4fc1bf1af48f
plugin XEP-0313: cleaning and improvments:
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
379 elt_list = [] |
4fc1bf1af48f
plugin XEP-0313: cleaning and improvments:
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
380 event = MESSAGE_RESULT.format(mam_ns=mam.NS_MAM, query_id=query.query_id) |
4fc1bf1af48f
plugin XEP-0313: cleaning and improvments:
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
381 client.xmlstream.addObserver(event, self._appendMessage, 0, elt_list, message_cb) |
4fc1bf1af48f
plugin XEP-0313: cleaning and improvments:
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
382 d = self.queryArchive(client, query, service) |
4fc1bf1af48f
plugin XEP-0313: cleaning and improvments:
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
383 d.addCallback(self._queryFinished, client, elt_list, event) |
4fc1bf1af48f
plugin XEP-0313: cleaning and improvments:
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
384 return d |
1284
41ffe2c2dddc
plugin XEP-0313: update (still draft)
souliane <souliane@mailoo.org>
parents:
1277
diff
changeset
|
385 |
1776
4fc1bf1af48f
plugin XEP-0313: cleaning and improvments:
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
386 def getPrefs(self, client, service=None): |
1277 | 387 """Retrieve the current user preferences. |
388 | |
1284
41ffe2c2dddc
plugin XEP-0313: update (still draft)
souliane <souliane@mailoo.org>
parents:
1277
diff
changeset
|
389 @param service: entity offering the MAM service (None for user archives) |
1277 | 390 @return: the server response as a Deferred domish.Element |
391 """ | |
392 # http://xmpp.org/extensions/xep-0313.html#prefs | |
1776
4fc1bf1af48f
plugin XEP-0313: cleaning and improvments:
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
393 return client._mam.queryPrefs(service) |
1277 | 394 |
2701
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
395 def _setPrefs(self, service_s=None, default="roster", always=None, never=None, |
2ea2369ae7de
plugin XEP-0313: implementation of MAM for messages:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
396 profile_key=C.PROF_KEY_NONE): |
1284
41ffe2c2dddc
plugin XEP-0313: update (still draft)
souliane <souliane@mailoo.org>
parents:
1277
diff
changeset
|
397 service = jid.JID(service_s) if service_s else None |
41ffe2c2dddc
plugin XEP-0313: update (still draft)
souliane <souliane@mailoo.org>
parents:
1277
diff
changeset
|
398 always_jid = [jid.JID(entity) for entity in always] |
41ffe2c2dddc
plugin XEP-0313: update (still draft)
souliane <souliane@mailoo.org>
parents:
1277
diff
changeset
|
399 never_jid = [jid.JID(entity) for entity in never] |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
400 # TODO: why not build here a MAMPrefs object instead of passing the args separately? |
1284
41ffe2c2dddc
plugin XEP-0313: update (still draft)
souliane <souliane@mailoo.org>
parents:
1277
diff
changeset
|
401 return self.setPrefs(service, default, always_jid, never_jid, profile_key) |
41ffe2c2dddc
plugin XEP-0313: update (still draft)
souliane <souliane@mailoo.org>
parents:
1277
diff
changeset
|
402 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
403 def setPrefs(self, client, service=None, default="roster", always=None, never=None): |
1277 | 404 """Set news user preferences. |
405 | |
1284
41ffe2c2dddc
plugin XEP-0313: update (still draft)
souliane <souliane@mailoo.org>
parents:
1277
diff
changeset
|
406 @param service: entity offering the MAM service (None for user archives) |
1277 | 407 @param default (unicode): a value in ('always', 'never', 'roster') |
408 @param always (list): a list of JID instances | |
409 @param never (list): a list of JID instances | |
410 @param profile_key (unicode): %(doc_profile_key)s | |
411 @return: the server response as a Deferred domish.Element | |
412 """ | |
413 # http://xmpp.org/extensions/xep-0313.html#prefs | |
1776
4fc1bf1af48f
plugin XEP-0313: cleaning and improvments:
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
414 return client._mam.setPrefs(service, default, always, never) |
1277 | 415 |
2930
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
416 def onMessageStanzaId(self, message_elt, client): |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
417 """Called when a message with a stanza-id is received |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
418 |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
419 the messages' stanza ids are stored when received, so the last one can be used |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
420 to retrieve missing history on next connection |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
421 @param message_elt(domish.Element): <message> with a stanza-id |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
422 """ |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
423 service_jid = client.jid.userhostJID() |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
424 stanza_id = self._sid.getStanzaId(message_elt, service_jid) |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
425 if stanza_id is None: |
3028 | 426 log.debug("Ignoring <message>, stanza id is not from our server") |
2930
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
427 else: |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
428 # we use self._last_stanza_id_d do be sure that last_stanza_id is stored in |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
429 # the order of reception |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
430 self._last_stanza_id_d.addCallback( |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
431 lambda __: self.host.memory.storage.setPrivateValue( |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
432 namespace=mam.NS_MAM, |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
433 key=KEY_LAST_STANZA_ID, |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
434 value=stanza_id, |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
435 profile=client.profile)) |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
436 |
1277 | 437 |
3028 | 438 @implementer(disco.IDisco) |
1284
41ffe2c2dddc
plugin XEP-0313: update (still draft)
souliane <souliane@mailoo.org>
parents:
1277
diff
changeset
|
439 class SatMAMClient(mam.MAMClient): |
1277 | 440 |
2930
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
441 def __init__(self, plugin_parent): |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
442 self.plugin_parent = plugin_parent |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
443 |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
444 @property |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
445 def host(self): |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
446 return self.parent.host_app |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
447 |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
448 def connectionInitialized(self): |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
449 observer_xpath = MESSAGE_STANZA_ID.format( |
3028 | 450 ns_stanza_id=self.host.ns_map['stanza_id']) |
2930
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
451 self.xmlstream.addObserver( |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
452 observer_xpath, self.plugin_parent.onMessageStanzaId, client=self.parent |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
453 ) |
32b6893240e0
plugin XEP-0313: fixed archive retrieval on connection:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
454 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
455 def getDiscoInfo(self, requestor, target, nodeIdentifier=""): |
1776
4fc1bf1af48f
plugin XEP-0313: cleaning and improvments:
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
456 return [disco.DiscoFeature(mam.NS_MAM)] |
1277 | 457 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
458 def getDiscoItems(self, requestor, target, nodeIdentifier=""): |
1277 | 459 return [] |