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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8
a07bf3fb4b54 core (tests): test fixes
Goffi <goffi@goffi.org>
parents: 7
diff changeset
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
dc3a3f454f39 tmp (wokkel): licenses fixes:
Goffi <goffi@goffi.org>
parents: 4
diff changeset
4 # SàT Wokkel extension for Message Archive Management (XEP-0313)
60
938c740d31fe dates update
Goffi <goffi@goffi.org>
parents: 59
diff changeset
5 # Copyright (C) 2015-2019 Jérôme Poisson (goffi@goffi.org)
6
dc3a3f454f39 tmp (wokkel): licenses fixes:
Goffi <goffi@goffi.org>
parents: 4
diff changeset
6 # Copyright (C) 2015 Adien Cossa (souliane@mailoo.org)
dc3a3f454f39 tmp (wokkel): licenses fixes:
Goffi <goffi@goffi.org>
parents: 4
diff changeset
7
dc3a3f454f39 tmp (wokkel): licenses fixes:
Goffi <goffi@goffi.org>
parents: 4
diff changeset
8 # This program is free software: you can redistribute it and/or modify
dc3a3f454f39 tmp (wokkel): licenses fixes:
Goffi <goffi@goffi.org>
parents: 4
diff changeset
9 # it under the terms of the GNU Affero General Public License as published by
dc3a3f454f39 tmp (wokkel): licenses fixes:
Goffi <goffi@goffi.org>
parents: 4
diff changeset
10 # the Free Software Foundation, either version 3 of the License, or
dc3a3f454f39 tmp (wokkel): licenses fixes:
Goffi <goffi@goffi.org>
parents: 4
diff changeset
11 # (at your option) any later version.
dc3a3f454f39 tmp (wokkel): licenses fixes:
Goffi <goffi@goffi.org>
parents: 4
diff changeset
12
dc3a3f454f39 tmp (wokkel): licenses fixes:
Goffi <goffi@goffi.org>
parents: 4
diff changeset
13 # This program is distributed in the hope that it will be useful,
dc3a3f454f39 tmp (wokkel): licenses fixes:
Goffi <goffi@goffi.org>
parents: 4
diff changeset
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
dc3a3f454f39 tmp (wokkel): licenses fixes:
Goffi <goffi@goffi.org>
parents: 4
diff changeset
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
dc3a3f454f39 tmp (wokkel): licenses fixes:
Goffi <goffi@goffi.org>
parents: 4
diff changeset
16 # GNU Affero General Public License for more details.
dc3a3f454f39 tmp (wokkel): licenses fixes:
Goffi <goffi@goffi.org>
parents: 4
diff changeset
17
dc3a3f454f39 tmp (wokkel): licenses fixes:
Goffi <goffi@goffi.org>
parents: 4
diff changeset
18 # You should have received a copy of the GNU Affero General Public License
dc3a3f454f39 tmp (wokkel): licenses fixes:
Goffi <goffi@goffi.org>
parents: 4
diff changeset
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
81f9b53ec7e4 tmp (mam): various improvments:
Goffi <goffi@goffi.org>
parents: 8
diff changeset
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
81f9b53ec7e4 tmp (mam): various improvments:
Goffi <goffi@goffi.org>
parents: 8
diff changeset
93
81f9b53ec7e4 tmp (mam): various improvments:
Goffi <goffi@goffi.org>
parents: 8
diff changeset
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
81f9b53ec7e4 tmp (mam): various improvments:
Goffi <goffi@goffi.org>
parents: 8
diff changeset
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
81f9b53ec7e4 tmp (mam): various improvments:
Goffi <goffi@goffi.org>
parents: 8
diff changeset
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
81f9b53ec7e4 tmp (mam): various improvments:
Goffi <goffi@goffi.org>
parents: 8
diff changeset
154 if self.query_id is not None:
81f9b53ec7e4 tmp (mam): various improvments:
Goffi <goffi@goffi.org>
parents: 8
diff changeset
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
81f9b53ec7e4 tmp (mam): various improvments:
Goffi <goffi@goffi.org>
parents: 8
diff changeset
216 @param prefs_elt: MAM <prefs/> request element.
81f9b53ec7e4 tmp (mam): various improvments:
Goffi <goffi@goffi.org>
parents: 8
diff changeset
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
81f9b53ec7e4 tmp (mam): various improvments:
Goffi <goffi@goffi.org>
parents: 8
diff changeset
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
81f9b53ec7e4 tmp (mam): various improvments:
Goffi <goffi@goffi.org>
parents: 8
diff changeset
224 try:
81f9b53ec7e4 tmp (mam): various improvments:
Goffi <goffi@goffi.org>
parents: 8
diff changeset
225 default = prefs_elt['default']
81f9b53ec7e4 tmp (mam): various improvments:
Goffi <goffi@goffi.org>
parents: 8
diff changeset
226 except KeyError:
81f9b53ec7e4 tmp (mam): various improvments:
Goffi <goffi@goffi.org>
parents: 8
diff changeset
227 # FIXME: return proper error here
81f9b53ec7e4 tmp (mam): various improvments:
Goffi <goffi@goffi.org>
parents: 8
diff changeset
228 raise MAMError('Element provided is not a valid MAM <prefs/> request')
81f9b53ec7e4 tmp (mam): various improvments:
Goffi <goffi@goffi.org>
parents: 8
diff changeset
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
81f9b53ec7e4 tmp (mam): various improvments:
Goffi <goffi@goffi.org>
parents: 8
diff changeset
234 pref = prefs_elt.elements(NS_MAM, attr).next()
81f9b53ec7e4 tmp (mam): various improvments:
Goffi <goffi@goffi.org>
parents: 8
diff changeset
235 except StopIteration:
81f9b53ec7e4 tmp (mam): various improvments:
Goffi <goffi@goffi.org>
parents: 8
diff changeset
236 # FIXME: return proper error here
81f9b53ec7e4 tmp (mam): various improvments:
Goffi <goffi@goffi.org>
parents: 8
diff changeset
237 raise MAMError('Element provided is not a valid MAM <prefs/> request')
81f9b53ec7e4 tmp (mam): various improvments:
Goffi <goffi@goffi.org>
parents: 8
diff changeset
238 else:
81f9b53ec7e4 tmp (mam): various improvments:
Goffi <goffi@goffi.org>
parents: 8
diff changeset
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
81f9b53ec7e4 tmp (mam): various improvments:
Goffi <goffi@goffi.org>
parents: 8
diff changeset
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
81f9b53ec7e4 tmp (mam): various improvments:
Goffi <goffi@goffi.org>
parents: 8
diff changeset
319 d = iq.send(to=service.full() if service else None)
81f9b53ec7e4 tmp (mam): various improvments:
Goffi <goffi@goffi.org>
parents: 8
diff changeset
320 d.addCallback(lambda iq_result: iq_result.elements(NS_MAM, 'query').next())
81f9b53ec7e4 tmp (mam): various improvments:
Goffi <goffi@goffi.org>
parents: 8
diff changeset
321 d.addCallback(data_form.findForm, NS_MAM)
81f9b53ec7e4 tmp (mam): various improvments:
Goffi <goffi@goffi.org>
parents: 8
diff changeset
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
81f9b53ec7e4 tmp (mam): various improvments:
Goffi <goffi@goffi.org>
parents: 8
diff changeset
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
81f9b53ec7e4 tmp (mam): various improvments:
Goffi <goffi@goffi.org>
parents: 8
diff changeset
478 @param field: data form field of the filter
81f9b53ec7e4 tmp (mam): various improvments:
Goffi <goffi@goffi.org>
parents: 8
diff changeset
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
81f9b53ec7e4 tmp (mam): various improvments:
Goffi <goffi@goffi.org>
parents: 8
diff changeset
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
81f9b53ec7e4 tmp (mam): various improvments:
Goffi <goffi@goffi.org>
parents: 8
diff changeset
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
81f9b53ec7e4 tmp (mam): various improvments:
Goffi <goffi@goffi.org>
parents: 8
diff changeset
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
81f9b53ec7e4 tmp (mam): various improvments:
Goffi <goffi@goffi.org>
parents: 8
diff changeset
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
81f9b53ec7e4 tmp (mam): various improvments:
Goffi <goffi@goffi.org>
parents: 8
diff changeset
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
81f9b53ec7e4 tmp (mam): various improvments:
Goffi <goffi@goffi.org>
parents: 8
diff changeset
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
81f9b53ec7e4 tmp (mam): various improvments:
Goffi <goffi@goffi.org>
parents: 8
diff changeset
610 @param extra_fields: list of extra data form fields that are not defined by the
81f9b53ec7e4 tmp (mam): various improvments:
Goffi <goffi@goffi.org>
parents: 8
diff changeset
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
81f9b53ec7e4 tmp (mam): various improvments:
Goffi <goffi@goffi.org>
parents: 8
diff changeset
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
81f9b53ec7e4 tmp (mam): various improvments:
Goffi <goffi@goffi.org>
parents: 8
diff changeset
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
81f9b53ec7e4 tmp (mam): various improvments:
Goffi <goffi@goffi.org>
parents: 8
diff changeset
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
81f9b53ec7e4 tmp (mam): various improvments:
Goffi <goffi@goffi.org>
parents: 8
diff changeset
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
81f9b53ec7e4 tmp (mam): various improvments:
Goffi <goffi@goffi.org>
parents: 8
diff changeset
633 if extra_fields is not None:
81f9b53ec7e4 tmp (mam): various improvments:
Goffi <goffi@goffi.org>
parents: 8
diff changeset
634 for field in extra_fields:
81f9b53ec7e4 tmp (mam): various improvments:
Goffi <goffi@goffi.org>
parents: 8
diff changeset
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