Mercurial > sat_tmp
annotate sat_tmp/wokkel/mam.py @ 60:938c740d31fe
dates update
author | Goffi <goffi@goffi.org> |
---|---|
date | Wed, 16 Jan 2019 09:09:13 +0100 |
parents | 2f2b2f536008 |
children | 0721b6254c9e |
rev | line source |
---|---|
8 | 1 # -*- coding: utf-8 -*- |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
2 # -*- test-case-name: wokkel.test.test_mam -*- |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
3 # |
6 | 4 # SàT Wokkel extension for Message Archive Management (XEP-0313) |
60 | 5 # Copyright (C) 2015-2019 Jérôme Poisson (goffi@goffi.org) |
6 | 6 # Copyright (C) 2015 Adien Cossa (souliane@mailoo.org) |
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/>. | |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
20 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
21 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
22 XMPP Message Archive Management protocol. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
23 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
24 This protocol is specified in |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
25 U{XEP-0313<http://xmpp.org/extensions/xep-0313.html>}. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
26 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
27 |
24
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
28 from dateutil import tz |
3
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
29 |
24
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
30 from zope.interface import implements |
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
31 from zope.interface import Interface |
3
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
32 |
24
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
33 from twisted.words.protocols.jabber import xmlstream |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
34 from twisted.words.xish import domish |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
35 from twisted.words.protocols.jabber import jid |
29
17ab4fbce513
tmp (wokkel.mam): MAMErrow now inherit from StanzaError so it can be handler properly by services
Goffi <goffi@goffi.org>
parents:
24
diff
changeset
|
36 from twisted.words.protocols.jabber import error |
20 | 37 from twisted.internet import defer |
3
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
38 from twisted.python import log |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
39 |
24
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
40 from wokkel import subprotocols |
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
41 from wokkel import disco |
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
42 from wokkel import data_form |
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
43 from wokkel import delay |
3
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
44 |
2
4369549244e8
tmp, plugins: fixes the imports fron sat.tmp
souliane <souliane@mailoo.org>
parents:
1
diff
changeset
|
45 import rsm |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
46 |
57
a1ae63fe666d
wokkel/mam: updated to urn:xmpp:mam:2 namespace
Goffi <goffi@goffi.org>
parents:
45
diff
changeset
|
47 NS_MAM = 'urn:xmpp:mam:2' |
3
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
48 NS_FORWARD = 'urn:xmpp:forward:0' |
58
f4d569dc8e6b
wokkel/mam, wokkel/pubsub, wokkel/rsm: implemented "order-by" protoXEP (for Pubsub and MAM)
Goffi <goffi@goffi.org>
parents:
57
diff
changeset
|
49 NS_ORDER_BY = u"urn:xmpp:order-by:0" |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
50 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
51 FIELDS_REQUEST = "/iq[@type='get']/query[@xmlns='%s']" % NS_MAM |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
52 ARCHIVE_REQUEST = "/iq[@type='set']/query[@xmlns='%s']" % NS_MAM |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
53 PREFS_GET_REQUEST = "/iq[@type='get']/prefs[@xmlns='%s']" % NS_MAM |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
54 PREFS_SET_REQUEST = "/iq[@type='set']/prefs[@xmlns='%s']" % NS_MAM |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
55 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
56 # TODO: add the tests! |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
57 |
29
17ab4fbce513
tmp (wokkel.mam): MAMErrow now inherit from StanzaError so it can be handler properly by services
Goffi <goffi@goffi.org>
parents:
24
diff
changeset
|
58 |
17ab4fbce513
tmp (wokkel.mam): MAMErrow now inherit from StanzaError so it can be handler properly by services
Goffi <goffi@goffi.org>
parents:
24
diff
changeset
|
59 class MAMError(error.StanzaError): |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
60 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
61 MAM error. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
62 """ |
29
17ab4fbce513
tmp (wokkel.mam): MAMErrow now inherit from StanzaError so it can be handler properly by services
Goffi <goffi@goffi.org>
parents:
24
diff
changeset
|
63 def __init__(self, text=None): |
17ab4fbce513
tmp (wokkel.mam): MAMErrow now inherit from StanzaError so it can be handler properly by services
Goffi <goffi@goffi.org>
parents:
24
diff
changeset
|
64 error.StanzaError.__init__(self, 'bad-request', text=text) |
17ab4fbce513
tmp (wokkel.mam): MAMErrow now inherit from StanzaError so it can be handler properly by services
Goffi <goffi@goffi.org>
parents:
24
diff
changeset
|
65 |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
66 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
67 class Unsupported(MAMError): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
68 def __init__(self, feature, text=None): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
69 self.feature = feature |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
70 MAMError.__init__(self, 'feature-not-implemented', |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
71 'unsupported', |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
72 feature, |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
73 text) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
74 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
75 def __str__(self): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
76 message = MAMError.__str__(self) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
77 message += ', feature %r' % self.feature |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
78 return message |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
79 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
80 |
24
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
81 class MAMRequest(object): |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
82 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
83 A Message Archive Management <query/> request. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
84 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
85 @ivar form: Data Form specifing the filters. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
86 @itype form: L{data_form.Form} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
87 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
88 @ivar rsm: RSM request instance. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
89 @itype rsm: L{rsm.RSMRequest} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
90 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
91 @ivar node: pubsub node id if querying a pubsub node, else None. |
33
c0f71fd5ed6b
tmp (wokkel/mam): restore MAMPrefs being callable without argument when constructing a query:
souliane <souliane@mailoo.org>
parents:
30
diff
changeset
|
92 @itype node: C{unicode} |
20 | 93 |
94 @ivar query_id: id to use to track the query | |
33
c0f71fd5ed6b
tmp (wokkel/mam): restore MAMPrefs being callable without argument when constructing a query:
souliane <souliane@mailoo.org>
parents:
30
diff
changeset
|
95 @itype query_id: C{unicode} |
58
f4d569dc8e6b
wokkel/mam, wokkel/pubsub, wokkel/rsm: implemented "order-by" protoXEP (for Pubsub and MAM)
Goffi <goffi@goffi.org>
parents:
57
diff
changeset
|
96 |
f4d569dc8e6b
wokkel/mam, wokkel/pubsub, wokkel/rsm: implemented "order-by" protoXEP (for Pubsub and MAM)
Goffi <goffi@goffi.org>
parents:
57
diff
changeset
|
97 @param orderBy: Keys to order by |
f4d569dc8e6b
wokkel/mam, wokkel/pubsub, wokkel/rsm: implemented "order-by" protoXEP (for Pubsub and MAM)
Goffi <goffi@goffi.org>
parents:
57
diff
changeset
|
98 @type orderBy: L{list} of L{unicode} |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
99 """ |
30
73465c020455
tmp (wokkel.mam): recipient and sender are handled in MAM Request. TODO: MAMRequest should inherit from generic.Stanza, the same way as for PubSubRequest
Goffi <goffi@goffi.org>
parents:
29
diff
changeset
|
100 # FIXME: should be based on generic.Stanza |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
101 |
58
f4d569dc8e6b
wokkel/mam, wokkel/pubsub, wokkel/rsm: implemented "order-by" protoXEP (for Pubsub and MAM)
Goffi <goffi@goffi.org>
parents:
57
diff
changeset
|
102 def __init__(self, form=None, rsm_=None, node=None, query_id=None, sender=None, |
f4d569dc8e6b
wokkel/mam, wokkel/pubsub, wokkel/rsm: implemented "order-by" protoXEP (for Pubsub and MAM)
Goffi <goffi@goffi.org>
parents:
57
diff
changeset
|
103 recipient=None, orderBy=None): |
3
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
104 if form is not None: |
7
1e21b4e94566
plugin groupblog, tmp (mam, rsm): some style improvments/fixes:
Goffi <goffi@goffi.org>
parents:
6
diff
changeset
|
105 assert form.formType == 'submit' |
20 | 106 assert form.formNamespace == NS_MAM |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
107 self.form = form |
7
1e21b4e94566
plugin groupblog, tmp (mam, rsm): some style improvments/fixes:
Goffi <goffi@goffi.org>
parents:
6
diff
changeset
|
108 self.rsm = rsm_ |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
109 self.node = node |
20 | 110 self.query_id = query_id |
30
73465c020455
tmp (wokkel.mam): recipient and sender are handled in MAM Request. TODO: MAMRequest should inherit from generic.Stanza, the same way as for PubSubRequest
Goffi <goffi@goffi.org>
parents:
29
diff
changeset
|
111 self.sender = sender |
73465c020455
tmp (wokkel.mam): recipient and sender are handled in MAM Request. TODO: MAMRequest should inherit from generic.Stanza, the same way as for PubSubRequest
Goffi <goffi@goffi.org>
parents:
29
diff
changeset
|
112 self.recipient = recipient |
58
f4d569dc8e6b
wokkel/mam, wokkel/pubsub, wokkel/rsm: implemented "order-by" protoXEP (for Pubsub and MAM)
Goffi <goffi@goffi.org>
parents:
57
diff
changeset
|
113 self.orderBy = orderBy |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
114 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
115 @classmethod |
30
73465c020455
tmp (wokkel.mam): recipient and sender are handled in MAM Request. TODO: MAMRequest should inherit from generic.Stanza, the same way as for PubSubRequest
Goffi <goffi@goffi.org>
parents:
29
diff
changeset
|
116 def fromElement(cls, iq): |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
117 """Parse the DOM representation of a MAM <query/> request. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
118 |
30
73465c020455
tmp (wokkel.mam): recipient and sender are handled in MAM Request. TODO: MAMRequest should inherit from generic.Stanza, the same way as for PubSubRequest
Goffi <goffi@goffi.org>
parents:
29
diff
changeset
|
119 @param iq: <iq/> element containing a MAM <query/>. |
73465c020455
tmp (wokkel.mam): recipient and sender are handled in MAM Request. TODO: MAMRequest should inherit from generic.Stanza, the same way as for PubSubRequest
Goffi <goffi@goffi.org>
parents:
29
diff
changeset
|
120 @type iq: L{Element<twisted.words.xish.domish.Element>} |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
121 |
24
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
122 @return: MAMRequest instance. |
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
123 @rtype: L{MAMRequest} |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
124 """ |
30
73465c020455
tmp (wokkel.mam): recipient and sender are handled in MAM Request. TODO: MAMRequest should inherit from generic.Stanza, the same way as for PubSubRequest
Goffi <goffi@goffi.org>
parents:
29
diff
changeset
|
125 sender = jid.JID(iq.getAttribute('from')) |
73465c020455
tmp (wokkel.mam): recipient and sender are handled in MAM Request. TODO: MAMRequest should inherit from generic.Stanza, the same way as for PubSubRequest
Goffi <goffi@goffi.org>
parents:
29
diff
changeset
|
126 recipient = jid.JID(iq.getAttribute('to')) |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
127 try: |
30
73465c020455
tmp (wokkel.mam): recipient and sender are handled in MAM Request. TODO: MAMRequest should inherit from generic.Stanza, the same way as for PubSubRequest
Goffi <goffi@goffi.org>
parents:
29
diff
changeset
|
128 query = iq.elements(NS_MAM, 'query').next() |
24
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
129 except StopIteration: |
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
130 raise MAMError("Can't find MAM <query/> in element") |
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
131 form = data_form.findForm(query, NS_MAM) |
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
132 try: |
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
133 rsm_request = rsm.RSMRequest.fromElement(query) |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
134 except rsm.RSMNotFoundError: |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
135 rsm_request = None |
24
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
136 node = query.getAttribute('node') |
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
137 query_id = query.getAttribute('queryid') |
58
f4d569dc8e6b
wokkel/mam, wokkel/pubsub, wokkel/rsm: implemented "order-by" protoXEP (for Pubsub and MAM)
Goffi <goffi@goffi.org>
parents:
57
diff
changeset
|
138 |
f4d569dc8e6b
wokkel/mam, wokkel/pubsub, wokkel/rsm: implemented "order-by" protoXEP (for Pubsub and MAM)
Goffi <goffi@goffi.org>
parents:
57
diff
changeset
|
139 orderBy = [] |
f4d569dc8e6b
wokkel/mam, wokkel/pubsub, wokkel/rsm: implemented "order-by" protoXEP (for Pubsub and MAM)
Goffi <goffi@goffi.org>
parents:
57
diff
changeset
|
140 for element in query.elements(NS_ORDER_BY, 'order'): |
f4d569dc8e6b
wokkel/mam, wokkel/pubsub, wokkel/rsm: implemented "order-by" protoXEP (for Pubsub and MAM)
Goffi <goffi@goffi.org>
parents:
57
diff
changeset
|
141 orderBy.append(element['by']) |
f4d569dc8e6b
wokkel/mam, wokkel/pubsub, wokkel/rsm: implemented "order-by" protoXEP (for Pubsub and MAM)
Goffi <goffi@goffi.org>
parents:
57
diff
changeset
|
142 |
f4d569dc8e6b
wokkel/mam, wokkel/pubsub, wokkel/rsm: implemented "order-by" protoXEP (for Pubsub and MAM)
Goffi <goffi@goffi.org>
parents:
57
diff
changeset
|
143 return MAMRequest(form, rsm_request, node, query_id, sender, recipient, orderBy) |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
144 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
145 def toElement(self): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
146 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
147 Return the DOM representation of this RSM <query/> request. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
148 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
149 @rtype: L{Element<twisted.words.xish.domish.Element>} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
150 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
151 mam_elt = domish.Element((NS_MAM, 'query')) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
152 if self.node is not None: |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
153 mam_elt['node'] = self.node |
20 | 154 if self.query_id is not None: |
155 mam_elt['queryid'] = self.query_id | |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
156 if self.form is not None: |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
157 mam_elt.addChild(self.form.toElement()) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
158 if self.rsm is not None: |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
159 mam_elt.addChild(self.rsm.toElement()) |
58
f4d569dc8e6b
wokkel/mam, wokkel/pubsub, wokkel/rsm: implemented "order-by" protoXEP (for Pubsub and MAM)
Goffi <goffi@goffi.org>
parents:
57
diff
changeset
|
160 if self.orderBy is not None: |
f4d569dc8e6b
wokkel/mam, wokkel/pubsub, wokkel/rsm: implemented "order-by" protoXEP (for Pubsub and MAM)
Goffi <goffi@goffi.org>
parents:
57
diff
changeset
|
161 for by_attr in self.orderBy: |
f4d569dc8e6b
wokkel/mam, wokkel/pubsub, wokkel/rsm: implemented "order-by" protoXEP (for Pubsub and MAM)
Goffi <goffi@goffi.org>
parents:
57
diff
changeset
|
162 order_elt = mam_elt.addElement((NS_ORDER_BY,'order')) |
f4d569dc8e6b
wokkel/mam, wokkel/pubsub, wokkel/rsm: implemented "order-by" protoXEP (for Pubsub and MAM)
Goffi <goffi@goffi.org>
parents:
57
diff
changeset
|
163 order_elt['by'] = by_attr |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
164 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
165 return mam_elt |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
166 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
167 def render(self, parent): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
168 """Embed the DOM representation of this MAM request in the given element. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
169 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
170 @param parent: parent IQ element. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
171 @type parent: L{Element<twisted.words.xish.domish.Element>} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
172 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
173 @return: MAM request element. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
174 @rtype: L{Element<twisted.words.xish.domish.Element>} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
175 """ |
7
1e21b4e94566
plugin groupblog, tmp (mam, rsm): some style improvments/fixes:
Goffi <goffi@goffi.org>
parents:
6
diff
changeset
|
176 assert parent.name == 'iq' |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
177 mam_elt = self.toElement() |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
178 parent.addChild(mam_elt) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
179 return mam_elt |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
180 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
181 |
24
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
182 class MAMPrefs(object): |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
183 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
184 A Message Archive Management <prefs/> request. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
185 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
186 @param default: A value in ('always', 'never', 'roster'). |
7
1e21b4e94566
plugin groupblog, tmp (mam, rsm): some style improvments/fixes:
Goffi <goffi@goffi.org>
parents:
6
diff
changeset
|
187 @type : C{unicode} or C{None} |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
188 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
189 @param always (list): A list of JID instances. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
190 @type always: C{list} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
191 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
192 @param never (list): A list of JID instances. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
193 @type never: C{list} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
194 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
195 |
33
c0f71fd5ed6b
tmp (wokkel/mam): restore MAMPrefs being callable without argument when constructing a query:
souliane <souliane@mailoo.org>
parents:
30
diff
changeset
|
196 def __init__(self, default=None, always=None, never=None): |
c0f71fd5ed6b
tmp (wokkel/mam): restore MAMPrefs being callable without argument when constructing a query:
souliane <souliane@mailoo.org>
parents:
30
diff
changeset
|
197 if default is not None: |
c0f71fd5ed6b
tmp (wokkel/mam): restore MAMPrefs being callable without argument when constructing a query:
souliane <souliane@mailoo.org>
parents:
30
diff
changeset
|
198 # default must be defined in response, but can be empty in request (see http://xmpp.org/extensions/xep-0313.html#config) |
c0f71fd5ed6b
tmp (wokkel/mam): restore MAMPrefs being callable without argument when constructing a query:
souliane <souliane@mailoo.org>
parents:
30
diff
changeset
|
199 assert default in ('always', 'never', 'roster') |
7
1e21b4e94566
plugin groupblog, tmp (mam, rsm): some style improvments/fixes:
Goffi <goffi@goffi.org>
parents:
6
diff
changeset
|
200 self.default = default |
1e21b4e94566
plugin groupblog, tmp (mam, rsm): some style improvments/fixes:
Goffi <goffi@goffi.org>
parents:
6
diff
changeset
|
201 if always is not None: |
1e21b4e94566
plugin groupblog, tmp (mam, rsm): some style improvments/fixes:
Goffi <goffi@goffi.org>
parents:
6
diff
changeset
|
202 assert isinstance(always, list) |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
203 else: |
7
1e21b4e94566
plugin groupblog, tmp (mam, rsm): some style improvments/fixes:
Goffi <goffi@goffi.org>
parents:
6
diff
changeset
|
204 always = [] |
1e21b4e94566
plugin groupblog, tmp (mam, rsm): some style improvments/fixes:
Goffi <goffi@goffi.org>
parents:
6
diff
changeset
|
205 self.always = always |
1e21b4e94566
plugin groupblog, tmp (mam, rsm): some style improvments/fixes:
Goffi <goffi@goffi.org>
parents:
6
diff
changeset
|
206 if never is not None: |
1e21b4e94566
plugin groupblog, tmp (mam, rsm): some style improvments/fixes:
Goffi <goffi@goffi.org>
parents:
6
diff
changeset
|
207 assert isinstance(never, list) |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
208 else: |
7
1e21b4e94566
plugin groupblog, tmp (mam, rsm): some style improvments/fixes:
Goffi <goffi@goffi.org>
parents:
6
diff
changeset
|
209 never = [] |
1e21b4e94566
plugin groupblog, tmp (mam, rsm): some style improvments/fixes:
Goffi <goffi@goffi.org>
parents:
6
diff
changeset
|
210 self.never = never |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
211 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
212 @classmethod |
24
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
213 def fromElement(cls, prefs_elt): |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
214 """Parse the DOM representation of a MAM <prefs/> request. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
215 |
20 | 216 @param prefs_elt: MAM <prefs/> request element. |
217 @type prefs_elt: L{Element<twisted.words.xish.domish.Element>} | |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
218 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
219 @return: MAMPrefs instance. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
220 @rtype: L{MAMPrefs} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
221 """ |
20 | 222 if prefs_elt.uri != NS_MAM or prefs_elt.name != 'prefs': |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
223 raise MAMError('Element provided is not a MAM <prefs/> request') |
20 | 224 try: |
225 default = prefs_elt['default'] | |
226 except KeyError: | |
227 # FIXME: return proper error here | |
228 raise MAMError('Element provided is not a valid MAM <prefs/> request') | |
229 | |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
230 prefs = {} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
231 for attr in ('always', 'never'): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
232 prefs[attr] = [] |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
233 try: |
20 | 234 pref = prefs_elt.elements(NS_MAM, attr).next() |
235 except StopIteration: | |
236 # FIXME: return proper error here | |
237 raise MAMError('Element provided is not a valid MAM <prefs/> request') | |
238 else: | |
239 for jid_s in pref.elements(NS_MAM, 'jid'): | |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
240 prefs[attr].append(jid.JID(jid_s)) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
241 return MAMPrefs(default, **prefs) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
242 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
243 def toElement(self): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
244 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
245 Return the DOM representation of this RSM <prefs/>request. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
246 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
247 @rtype: L{Element<twisted.words.xish.domish.Element>} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
248 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
249 mam_elt = domish.Element((NS_MAM, 'prefs')) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
250 if self.default: |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
251 mam_elt['default'] = self.default |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
252 for attr in ('always', 'never'): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
253 attr_elt = mam_elt.addElement(attr) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
254 jids = getattr(self, attr) |
4
66a7586e49f8
tmp (mam): fixed name shadowing + getDiscoInfo for mam fix:
Goffi <goffi@goffi.org>
parents:
3
diff
changeset
|
255 for jid_ in jids: |
66a7586e49f8
tmp (mam): fixed name shadowing + getDiscoInfo for mam fix:
Goffi <goffi@goffi.org>
parents:
3
diff
changeset
|
256 attr_elt.addElement('jid', content=jid_.full()) |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
257 return mam_elt |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
258 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
259 def render(self, parent): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
260 """Embed the DOM representation of this MAM request in the given element. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
261 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
262 @param parent: parent IQ element. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
263 @type parent: L{Element<twisted.words.xish.domish.Element>} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
264 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
265 @return: MAM request element. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
266 @rtype: L{Element<twisted.words.xish.domish.Element>} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
267 """ |
7
1e21b4e94566
plugin groupblog, tmp (mam, rsm): some style improvments/fixes:
Goffi <goffi@goffi.org>
parents:
6
diff
changeset
|
268 assert parent.name == 'iq' |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
269 mam_elt = self.toElement() |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
270 parent.addChild(mam_elt) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
271 return mam_elt |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
272 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
273 |
24
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
274 class MAMClient(subprotocols.XMPPHandler): |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
275 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
276 MAM client. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
277 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
278 This handler implements the protocol for sending out MAM requests. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
279 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
280 |
24
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
281 def queryArchive(self, mam_query, service=None, sender=None): |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
282 """Query a user, MUC or pubsub archive. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
283 |
24
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
284 @param mam_query: query to use |
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
285 @type form: L{MAMRequest} |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
286 |
24
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
287 @param service: Entity offering the MAM service (None for user server). |
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
288 @type service: L{JID<twisted.words.protocols.jabber.jid.JID>} |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
289 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
290 @param sender: Optional sender address. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
291 @type sender: L{JID<twisted.words.protocols.jabber.jid.JID>} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
292 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
293 @return: A deferred that fires upon receiving a response. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
294 @rtype: L{Deferred<twisted.internet.defer.Deferred>} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
295 """ |
24
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
296 iq = xmlstream.IQ(self.xmlstream, 'set') |
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
297 mam_query.render(iq) |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
298 if sender is not None: |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
299 iq['from'] = unicode(sender) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
300 return iq.send(to=service.full() if service else None) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
301 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
302 def queryFields(self, service=None, sender=None): |
24
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
303 """Ask the server about supported fields. |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
304 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
305 @param service: Entity offering the MAM service (None for user archives). |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
306 @type service: L{JID<twisted.words.protocols.jabber.jid.JID>} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
307 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
308 @param sender: Optional sender address. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
309 @type sender: L{JID<twisted.words.protocols.jabber.jid.JID>} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
310 |
20 | 311 @return: data Form with the fields, or None if not found |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
312 @rtype: L{Deferred<twisted.internet.defer.Deferred>} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
313 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
314 # http://xmpp.org/extensions/xep-0313.html#query-form |
24
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
315 iq = xmlstream.IQ(self.xmlstream, 'get') |
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
316 MAMRequest().render(iq) |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
317 if sender is not None: |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
318 iq['from'] = unicode(sender) |
20 | 319 d = iq.send(to=service.full() if service else None) |
320 d.addCallback(lambda iq_result: iq_result.elements(NS_MAM, 'query').next()) | |
321 d.addCallback(data_form.findForm, NS_MAM) | |
322 return d | |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
323 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
324 def queryPrefs(self, service=None, sender=None): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
325 """Retrieve the current user preferences. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
326 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
327 @param service: Entity offering the MAM service (None for user archives). |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
328 @type service: L{JID<twisted.words.protocols.jabber.jid.JID>} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
329 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
330 @param sender: Optional sender address. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
331 @type sender: L{JID<twisted.words.protocols.jabber.jid.JID>} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
332 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
333 @return: A deferred that fires upon receiving a response. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
334 @rtype: L{Deferred<twisted.internet.defer.Deferred>} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
335 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
336 # http://xmpp.org/extensions/xep-0313.html#prefs |
24
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
337 iq = xmlstream.IQ(self.xmlstream, 'get') |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
338 MAMPrefs().render(iq) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
339 if sender is not None: |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
340 iq['from'] = unicode(sender) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
341 return iq.send(to=service.full() if service else None) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
342 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
343 def setPrefs(self, service=None, default='roster', always=None, never=None, sender=None): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
344 """Set new user preferences. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
345 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
346 @param service: Entity offering the MAM service (None for user archives). |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
347 @type service: L{JID<twisted.words.protocols.jabber.jid.JID>} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
348 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
349 @param default: A value in ('always', 'never', 'roster'). |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
350 @type : C{unicode} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
351 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
352 @param always (list): A list of JID instances. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
353 @type always: C{list} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
354 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
355 @param never (list): A list of JID instances. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
356 @type never: C{list} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
357 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
358 @param sender: Optional sender address. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
359 @type sender: L{JID<twisted.words.protocols.jabber.jid.JID>} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
360 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
361 @return: A deferred that fires upon receiving a response. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
362 @rtype: L{Deferred<twisted.internet.defer.Deferred>} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
363 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
364 # http://xmpp.org/extensions/xep-0313.html#prefs |
7
1e21b4e94566
plugin groupblog, tmp (mam, rsm): some style improvments/fixes:
Goffi <goffi@goffi.org>
parents:
6
diff
changeset
|
365 assert default is not None |
24
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
366 iq = xmlstream.IQ(self.xmlstream, 'set') |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
367 MAMPrefs(default, always, never).render(iq) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
368 if sender is not None: |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
369 iq['from'] = unicode(sender) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
370 return iq.send(to=service.full() if service else None) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
371 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
372 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
373 class IMAMResource(Interface): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
374 |
30
73465c020455
tmp (wokkel.mam): recipient and sender are handled in MAM Request. TODO: MAMRequest should inherit from generic.Stanza, the same way as for PubSubRequest
Goffi <goffi@goffi.org>
parents:
29
diff
changeset
|
375 def onArchiveRequest(self, mam): |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
376 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
377 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
378 @param mam: The MAM <query/> request. |
57
a1ae63fe666d
wokkel/mam: updated to urn:xmpp:mam:2 namespace
Goffi <goffi@goffi.org>
parents:
45
diff
changeset
|
379 @type mam: L{MAMRequest<wokkel.mam.MAMRequest>} |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
380 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
381 @return: The RSM answer. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
382 @rtype: L{RSMResponse<wokkel.rsm.RSMResponse>} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
383 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
384 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
385 def onPrefsGetRequest(self, requestor): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
386 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
387 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
388 @param requestor: JID of the requestor. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
389 @type requestor: L{JID<twisted.words.protocols.jabber.jid.JID>} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
390 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
391 @return: The current settings. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
392 @rtype: L{wokkel.mam.MAMPrefs} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
393 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
394 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
395 def onPrefsSetRequest(self, prefs, requestor): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
396 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
397 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
398 @param prefs: The new settings to set. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
399 @type prefs: L{wokkel.mam.MAMPrefs} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
400 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
401 @param requestor: JID of the requestor. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
402 @type requestor: L{JID<twisted.words.protocols.jabber.jid.JID>} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
403 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
404 @return: The new current settings. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
405 @rtype: L{wokkel.mam.MAMPrefs} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
406 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
407 |
24
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
408 class IMAMService(Interface): |
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
409 """ |
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
410 Interface for XMPP MAM service. |
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
411 """ |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
412 |
24
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
413 def addFilter(self, field): |
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
414 """ |
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
415 Add a new filter for querying MAM archive. |
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
416 |
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
417 @param field: data form field of the filter |
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
418 @type field: L{Form<wokkel.data_form.Field>} |
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
419 """ |
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
420 |
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
421 |
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
422 class MAMService(subprotocols.XMPPHandler, subprotocols.IQHandlerMixin): |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
423 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
424 Protocol implementation for a MAM service. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
425 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
426 This handler waits for XMPP Ping requests and sends a response. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
427 """ |
24
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
428 implements(IMAMService, disco.IDisco) |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
429 |
24
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
430 _request_class = MAMRequest |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
431 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
432 iqHandlers = {FIELDS_REQUEST: '_onFieldsRequest', |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
433 ARCHIVE_REQUEST: '_onArchiveRequest', |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
434 PREFS_GET_REQUEST: '_onPrefsGetRequest', |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
435 PREFS_SET_REQUEST: '_onPrefsSetRequest' |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
436 } |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
437 |
57
a1ae63fe666d
wokkel/mam: updated to urn:xmpp:mam:2 namespace
Goffi <goffi@goffi.org>
parents:
45
diff
changeset
|
438 _mainFilters = {'start': {'fieldType': 'text-single', |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
439 'var': 'start', |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
440 'label': 'Starting time', |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
441 'desc': 'Starting time a the result period.', |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
442 }, |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
443 'end': {'fieldType': 'text-single', |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
444 'var': 'end', |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
445 'label': 'Ending time', |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
446 'desc': 'Ending time of the result period.', |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
447 }, |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
448 'with': {'fieldType': 'jid-single', |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
449 'var': 'with', |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
450 'label': 'Entity', |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
451 'desc': 'Entity against which to match message.', |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
452 }, |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
453 } |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
454 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
455 def __init__(self, resource): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
456 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
457 @param resource: instance implementing IMAMResource |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
458 @type resource: L{object} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
459 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
460 self.resource = resource |
20 | 461 self.extra_fields = {} |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
462 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
463 def connectionInitialized(self): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
464 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
465 Called when the XML stream has been initialized. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
466 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
467 This sets up an observer for incoming ping requests. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
468 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
469 self.xmlstream.addObserver(FIELDS_REQUEST, self.handleRequest) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
470 self.xmlstream.addObserver(ARCHIVE_REQUEST, self.handleRequest) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
471 self.xmlstream.addObserver(PREFS_GET_REQUEST, self.handleRequest) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
472 self.xmlstream.addObserver(PREFS_SET_REQUEST, self.handleRequest) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
473 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
474 def addFilter(self, field): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
475 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
476 Add a new filter for querying MAM archive. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
477 |
20 | 478 @param field: data form field of the filter |
479 @type field: L{Form<wokkel.data_form.Field>} | |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
480 """ |
20 | 481 self.extra_fields[field.var] = field |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
482 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
483 def _onFieldsRequest(self, iq): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
484 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
485 Called when a fields request has been received. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
486 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
487 This immediately replies with a result response. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
488 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
489 iq.handled = True |
24
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
490 query = domish.Element((NS_MAM, 'query')) |
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
491 query.addChild(buildForm(extra_fields=self.extra_fields).toElement(), formType='form') |
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
492 return query |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
493 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
494 def _onArchiveRequest(self, iq): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
495 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
496 Called when a message archive request has been received. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
497 |
59
2f2b2f536008
wokkel/mam: added "attributes" dict in onArchiveRequest return value, so <fin/> attributes can be specified
Goffi <goffi@goffi.org>
parents:
58
diff
changeset
|
498 This will send the list of archived message and return MAM <fin> element |
2f2b2f536008
wokkel/mam: added "attributes" dict in onArchiveRequest return value, so <fin/> attributes can be specified
Goffi <goffi@goffi.org>
parents:
58
diff
changeset
|
499 @return: The MAM <fin> element |
2f2b2f536008
wokkel/mam: added "attributes" dict in onArchiveRequest return value, so <fin/> attributes can be specified
Goffi <goffi@goffi.org>
parents:
58
diff
changeset
|
500 @rtype: L{Element<twisted.words.xish.domish.Element>} |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
501 """ |
24
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
502 iq.handled = True |
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
503 mam_ = self._request_class.fromElement(iq) |
3
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
504 |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
505 # remove unsupported filters |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
506 unsupported_fields = [] |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
507 if mam_.form: |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
508 for key, field in mam_.form.fields.iteritems(): |
57
a1ae63fe666d
wokkel/mam: updated to urn:xmpp:mam:2 namespace
Goffi <goffi@goffi.org>
parents:
45
diff
changeset
|
509 if key not in self._mainFilters and key not in self.extra_fields: |
3
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
510 log.msg('Ignored unsupported MAM filter: %s' % field) |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
511 unsupported_fields.append(key) |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
512 for key in unsupported_fields: |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
513 del mam_.form.fields[key] |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
514 |
24
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
515 def forwardMessage(id_, elt, date): |
3
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
516 msg = domish.Element((None, 'message')) |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
517 msg['to'] = iq['from'] |
20 | 518 result = msg.addElement((NS_MAM, 'result')) |
24
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
519 if mam_.query_id is not None: |
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
520 result['queryid'] = mam_.query_id |
3
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
521 result['id'] = id_ |
20 | 522 forward = result.addElement((NS_FORWARD, 'forwarded')) |
3
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
523 forward.addChild(delay.Delay(date).toElement()) |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
524 forward.addChild(elt) |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
525 self.xmlstream.send(msg) |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
526 |
3
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
527 def cb(result): |
59
2f2b2f536008
wokkel/mam: added "attributes" dict in onArchiveRequest return value, so <fin/> attributes can be specified
Goffi <goffi@goffi.org>
parents:
58
diff
changeset
|
528 msg_data, rsm_elt, attributes = result |
3
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
529 for data in msg_data: |
24
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
530 forwardMessage(*data) |
20 | 531 |
24
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
532 fin_elt = domish.Element((NS_MAM, 'fin')) |
59
2f2b2f536008
wokkel/mam: added "attributes" dict in onArchiveRequest return value, so <fin/> attributes can be specified
Goffi <goffi@goffi.org>
parents:
58
diff
changeset
|
533 for key, value in attributes.items(): |
2f2b2f536008
wokkel/mam: added "attributes" dict in onArchiveRequest return value, so <fin/> attributes can be specified
Goffi <goffi@goffi.org>
parents:
58
diff
changeset
|
534 fin_elt[key] = value |
20 | 535 |
3
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
536 if rsm_elt is not None: |
24
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
537 fin_elt.addChild(rsm_elt) |
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
538 return fin_elt |
3
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
539 |
30
73465c020455
tmp (wokkel.mam): recipient and sender are handled in MAM Request. TODO: MAMRequest should inherit from generic.Stanza, the same way as for PubSubRequest
Goffi <goffi@goffi.org>
parents:
29
diff
changeset
|
540 d = defer.maybeDeferred(self.resource.onArchiveRequest, mam_) |
20 | 541 d.addCallback(cb) |
24
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
542 return d |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
543 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
544 def _onPrefsGetRequest(self, iq): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
545 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
546 Called when a prefs get request has been received. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
547 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
548 This immediately replies with a result response. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
549 """ |
24
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
550 iq.handled = True |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
551 requestor = jid.JID(iq['from']) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
552 |
3
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
553 def cb(prefs): |
24
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
554 return prefs.toElement() |
3
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
555 |
24
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
556 d = self.resource.onPrefsGetRequest(requestor).addCallback(cb) |
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
557 return d |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
558 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
559 def _onPrefsSetRequest(self, iq): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
560 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
561 Called when a prefs get request has been received. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
562 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
563 This immediately replies with a result response. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
564 """ |
24
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
565 iq.handled = True |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
566 |
24
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
567 prefs = MAMPrefs.fromElement(iq.prefs) |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
568 requestor = jid.JID(iq['from']) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
569 |
3
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
570 def cb(prefs): |
24
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
571 return prefs.toElement() |
3
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
572 |
24
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
573 d = self.resource.onPrefsSetRequest(prefs, requestor).addCallback(cb) |
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
574 return d |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
575 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
576 def getDiscoInfo(self, requestor, target, nodeIdentifier=''): |
4
66a7586e49f8
tmp (mam): fixed name shadowing + getDiscoInfo for mam fix:
Goffi <goffi@goffi.org>
parents:
3
diff
changeset
|
577 if nodeIdentifier: |
66a7586e49f8
tmp (mam): fixed name shadowing + getDiscoInfo for mam fix:
Goffi <goffi@goffi.org>
parents:
3
diff
changeset
|
578 return [] |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
579 return [disco.DiscoFeature(NS_MAM)] |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
580 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
581 def getDiscoItems(self, requestor, target, nodeIdentifier=''): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
582 return [] |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
583 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
584 |
24
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
585 def datetime2utc(datetime_obj): |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
586 """Convert a datetime to a XEP-0082 compliant UTC datetime. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
587 |
24
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
588 @param datetime_obj: Offset-aware timestamp to convert. |
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
589 @type datetime_obj: L{datetime<datetime.datetime>} |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
590 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
591 @return: The datetime converted to UTC. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
592 @rtype: C{unicode} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
593 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
594 stampFormat = '%Y-%m-%dT%H:%M:%SZ' |
24
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
595 return datetime_obj.astimezone(tz.tzutc()).strftime(stampFormat) |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
596 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
597 |
24
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
598 def buildForm(start=None, end=None, with_jid=None, extra_fields=None, formType='submit'): |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
599 """Prepare a Data Form for MAM. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
600 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
601 @param start: Offset-aware timestamp to filter out older messages. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
602 @type start: L{datetime<datetime.datetime>} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
603 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
604 @param end: Offset-aware timestamp to filter out later messages. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
605 @type end: L{datetime<datetime.datetime>} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
606 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
607 @param with_jid: JID against which to match messages. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
608 @type with_jid: L{JID<twisted.words.protocols.jabber.jid.JID>} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
609 |
20 | 610 @param extra_fields: list of extra data form fields that are not defined by the |
611 specification. | |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
612 @type: C{list} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
613 |
24
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
614 @param formType: The type of the Data Form ('submit' or 'form'). |
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
615 @type formType: C{unicode} |
0640d72d6841
tmp (wokkel.mam): cleaning and bug fix:
Goffi <goffi@goffi.org>
parents:
20
diff
changeset
|
616 |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
617 @return: XEP-0004 Data Form object. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
618 @rtype: L{Form<wokkel.data_form.Form>} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
619 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
620 form = data_form.Form(formType, formNamespace=NS_MAM) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
621 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
622 if formType == 'form': |
57
a1ae63fe666d
wokkel/mam: updated to urn:xmpp:mam:2 namespace
Goffi <goffi@goffi.org>
parents:
45
diff
changeset
|
623 for kwargs in MAMService._mainFilters.values(): |
20 | 624 form.addField(data_form.Field(**kwargs)) |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
625 elif formType == 'submit': |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
626 if start: |
20 | 627 form.addField(data_form.Field(var='start', value=datetime2utc(start))) |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
628 if end: |
20 | 629 form.addField(data_form.Field(var='end', value=datetime2utc(end))) |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
630 if with_jid: |
20 | 631 form.addField(data_form.Field(fieldType='jid-single', var='with', value=with_jid.full())) |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
632 |
20 | 633 if extra_fields is not None: |
634 for field in extra_fields: | |
635 form.addField(field) | |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
636 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
637 return form |