Mercurial > sat_tmp
annotate wokkel/mam.py @ 6:dc3a3f454f39
tmp (wokkel): licenses fixes:
the licenses headers were wrong, it was fixed: original work from Adrien Cossa is directly under AGPL v3 (with his agreement), work derivated from Wokkel is sublicensed to AGPL v3 as allowed by the original license, to stay consistent with the rest of the code base.
Theses files (and only these ones) can be relicensed again to fill Wokkel license if Ralph plan to merge them upstream...
author | Goffi <goffi@goffi.org> |
---|---|
date | Thu, 23 Apr 2015 10:57:40 +0200 |
parents | 66a7586e49f8 |
children | 1e21b4e94566 |
rev | line source |
---|---|
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
1 # -*- test-case-name: wokkel.test.test_mam -*- |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
2 # |
6 | 3 # SàT Wokkel extension for Message Archive Management (XEP-0313) |
4 # Copyright (C) 2015 Adien Cossa (souliane@mailoo.org) | |
5 | |
6 # This program is free software: you can redistribute it and/or modify | |
7 # it under the terms of the GNU Affero General Public License as published by | |
8 # the Free Software Foundation, either version 3 of the License, or | |
9 # (at your option) any later version. | |
10 | |
11 # This program is distributed in the hope that it will be useful, | |
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 # GNU Affero General Public License for more details. | |
15 | |
16 # You should have received a copy of the GNU Affero General Public License | |
17 # along with this program. If not, see <http://www.gnu.org/licenses/>. | |
18 # | |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
19 # Copyright (c) Adrien Cossa. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
20 # See LICENSE for details. |
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 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
23 XMPP Message Archive Management protocol. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
24 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
25 This protocol is specified in |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
26 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
|
27 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
28 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
29 from dateutil.tz import tzutc |
3
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
30 |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
31 from zope.interface import Interface, implements |
3
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
32 |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
33 from twisted.words.protocols.jabber.xmlstream import IQ, toResponse |
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 |
3
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
36 from twisted.python import log |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
37 |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
38 from wokkel.subprotocols import IQHandlerMixin, XMPPHandler |
3
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
39 from wokkel import disco, data_form, delay |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
40 |
2
4369549244e8
tmp, plugins: fixes the imports fron sat.tmp
souliane <souliane@mailoo.org>
parents:
1
diff
changeset
|
41 import rsm |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
42 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
43 NS_MAM = 'urn:xmpp:mam:0' |
3
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
44 NS_FORWARD = 'urn:xmpp:forward:0' |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
45 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
46 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
|
47 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
|
48 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
|
49 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
|
50 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
51 # TODO: add the tests! |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
52 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
53 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
54 class MAMError(Exception): |
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 MAM error. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
57 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
58 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
59 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
60 class Unsupported(MAMError): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
61 def __init__(self, feature, text=None): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
62 self.feature = feature |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
63 MAMError.__init__(self, 'feature-not-implemented', |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
64 'unsupported', |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
65 feature, |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
66 text) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
67 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
68 def __str__(self): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
69 message = MAMError.__str__(self) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
70 message += ', feature %r' % self.feature |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
71 return message |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
72 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
73 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
74 class MAMQueryRequest(): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
75 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
76 A Message Archive Management <query/> request. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
77 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
78 @ivar form: Data Form specifing the filters. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
79 @itype form: L{data_form.Form} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
80 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
81 @ivar rsm: RSM request instance. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
82 @itype rsm: L{rsm.RSMRequest} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
83 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
84 @ivar node: pubsub node id if querying a pubsub node, else None. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
85 @itype form: C{unicode} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
86 """ |
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 form = None |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
89 rsm = None |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
90 node = None |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
91 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
92 def __init__(self, form=None, rsm=None, node=None): |
3
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
93 if form is not None: |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
94 assert(form.formType == 'submit') |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
95 self.form = form |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
96 self.rsm = rsm |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
97 self.node = node |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
98 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
99 @classmethod |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
100 def parse(cls, element): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
101 """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
|
102 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
103 @param element: MAM <query/> request element. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
104 @type element: L{Element<twisted.words.xish.domish.Element>} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
105 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
106 @return: MAMQueryRequest instance. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
107 @rtype: L{MAMQueryRequest} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
108 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
109 if element.uri != NS_MAM or element.name != 'query': |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
110 raise MAMError('Element provided is not a MAM <query/> request') |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
111 form = data_form.findForm(element, NS_MAM) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
112 try: |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
113 rsm_request = rsm.RSMRequest.parse(element) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
114 except rsm.RSMNotFoundError: |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
115 rsm_request = None |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
116 node = element['node'] if element.hasAttribute('node') else None |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
117 return MAMQueryRequest(form, rsm_request, node) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
118 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
119 def toElement(self): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
120 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
121 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
|
122 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
123 @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
|
124 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
125 mam_elt = domish.Element((NS_MAM, 'query')) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
126 if self.node is not None: |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
127 mam_elt['node'] = self.node |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
128 if self.form is not None: |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
129 mam_elt.addChild(self.form.toElement()) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
130 if self.rsm is not None: |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
131 mam_elt.addChild(self.rsm.toElement()) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
132 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
133 return mam_elt |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
134 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
135 def render(self, parent): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
136 """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
|
137 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
138 @param parent: parent IQ element. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
139 @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
|
140 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
141 @return: MAM request element. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
142 @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
|
143 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
144 assert(parent.name == 'iq') |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
145 mam_elt = self.toElement() |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
146 parent.addChild(mam_elt) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
147 return mam_elt |
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 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
150 class MAMPrefs(): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
151 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
152 A Message Archive Management <prefs/> request. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
153 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
154 @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
|
155 @type : C{unicode} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
156 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
157 @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
|
158 @type always: C{list} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
159 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
160 @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
|
161 @type never: C{list} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
162 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
163 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
164 default = None |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
165 always = None |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
166 never = None |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
167 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
168 def __init__(self, default=None, always=None, never=None): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
169 if default: |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
170 assert(default in ('always', 'never', 'roster')) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
171 self.default = default |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
172 if always: |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
173 assert(isinstance(always, list)) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
174 self.always = always |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
175 else: |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
176 self.always = [] |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
177 if never: |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
178 assert(isinstance(never, list)) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
179 self.never = never |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
180 else: |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
181 self.never = [] |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
182 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
183 @classmethod |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
184 def parse(cls, element): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
185 """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
|
186 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
187 @param element: MAM <prefs/> request element. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
188 @type element: L{Element<twisted.words.xish.domish.Element>} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
189 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
190 @return: MAMPrefs instance. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
191 @rtype: L{MAMPrefs} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
192 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
193 if element.uri != NS_MAM or element.name != 'prefs': |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
194 raise MAMError('Element provided is not a MAM <prefs/> request') |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
195 default = element['default'] if element.hasAttribute('default') else None |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
196 prefs = {} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
197 for attr in ('always', 'never'): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
198 prefs[attr] = [] |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
199 try: |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
200 pref = domish.generateElementsNamed(element.elements(), attr).next() |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
201 for jid_s in domish.generateElementsNamed(pref.elements(), 'jid'): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
202 prefs[attr].append(jid.JID(jid_s)) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
203 except StopIteration: |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
204 pass |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
205 return MAMPrefs(default, **prefs) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
206 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
207 def toElement(self): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
208 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
209 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
|
210 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
211 @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
|
212 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
213 mam_elt = domish.Element((NS_MAM, 'prefs')) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
214 if self.default: |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
215 mam_elt['default'] = self.default |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
216 for attr in ('always', 'never'): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
217 attr_elt = mam_elt.addElement(attr) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
218 jids = getattr(self, attr) |
4
66a7586e49f8
tmp (mam): fixed name shadowing + getDiscoInfo for mam fix:
Goffi <goffi@goffi.org>
parents:
3
diff
changeset
|
219 for jid_ in jids: |
66a7586e49f8
tmp (mam): fixed name shadowing + getDiscoInfo for mam fix:
Goffi <goffi@goffi.org>
parents:
3
diff
changeset
|
220 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
|
221 return mam_elt |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
222 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
223 def render(self, parent): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
224 """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
|
225 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
226 @param parent: parent IQ element. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
227 @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
|
228 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
229 @return: MAM request element. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
230 @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
|
231 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
232 assert(parent.name == 'iq') |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
233 mam_elt = self.toElement() |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
234 parent.addChild(mam_elt) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
235 return mam_elt |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
236 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
237 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
238 class MAMClient(XMPPHandler): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
239 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
240 MAM client. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
241 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
242 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
|
243 """ |
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 def queryArchive(self, service=None, form=None, rsm=None, node=None, sender=None): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
246 """Query a user, MUC or pubsub archive. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
247 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
248 @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
|
249 @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
|
250 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
251 @param form: Data Form to filter the request. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
252 @type form: L{Form<wokkel.data_form.Form>} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
253 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
254 @param rsm: RSM request instance. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
255 @type rsm: L{RSMRequest<wokkel.rsm.RSMRequest>} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
256 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
257 @param node: Pubsub node to query, or None if inappropriate. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
258 @type node: C{unicode} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
259 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
260 @param sender: Optional sender address. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
261 @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
|
262 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
263 @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
|
264 @rtype: L{Deferred<twisted.internet.defer.Deferred>} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
265 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
266 iq = IQ(self.xmlstream, 'set') |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
267 MAMQueryRequest(form, rsm, node).render(iq) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
268 if sender is not None: |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
269 iq['from'] = unicode(sender) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
270 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
|
271 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
272 def queryFields(self, service=None, sender=None): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
273 """Ask the server about additional supported fields. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
274 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
275 @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
|
276 @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
|
277 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
278 @param sender: Optional sender address. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
279 @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
|
280 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
281 @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
|
282 @rtype: L{Deferred<twisted.internet.defer.Deferred>} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
283 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
284 # http://xmpp.org/extensions/xep-0313.html#query-form |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
285 iq = IQ(self.xmlstream, 'get') |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
286 MAMQueryRequest().render(iq) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
287 if sender is not None: |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
288 iq['from'] = unicode(sender) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
289 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
|
290 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
291 def queryPrefs(self, service=None, sender=None): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
292 """Retrieve the current user preferences. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
293 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
294 @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
|
295 @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
|
296 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
297 @param sender: Optional sender address. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
298 @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
|
299 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
300 @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
|
301 @rtype: L{Deferred<twisted.internet.defer.Deferred>} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
302 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
303 # http://xmpp.org/extensions/xep-0313.html#prefs |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
304 iq = IQ(self.xmlstream, 'get') |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
305 MAMPrefs().render(iq) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
306 if sender is not None: |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
307 iq['from'] = unicode(sender) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
308 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
|
309 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
310 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
|
311 """Set new user preferences. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
312 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
313 @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
|
314 @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
|
315 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
316 @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
|
317 @type : C{unicode} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
318 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
319 @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
|
320 @type always: C{list} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
321 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
322 @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
|
323 @type never: C{list} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
324 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
325 @param sender: Optional sender address. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
326 @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
|
327 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
328 @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
|
329 @rtype: L{Deferred<twisted.internet.defer.Deferred>} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
330 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
331 # http://xmpp.org/extensions/xep-0313.html#prefs |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
332 assert(default is not None) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
333 iq = IQ(self.xmlstream, 'set') |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
334 MAMPrefs(default, always, never).render(iq) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
335 if sender is not None: |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
336 iq['from'] = unicode(sender) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
337 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
|
338 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
339 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
340 class IMAMResource(Interface): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
341 |
3
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
342 def onArchiveRequest(self, mam, requestor): |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
343 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
344 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
345 @param mam: The MAM <query/> request. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
346 @type mam: L{MAMQueryReques<wokkel.mam.MAMQueryRequest>} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
347 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
348 @param requestor: JID of the requestor. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
349 @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
|
350 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
351 @return: The RSM answer. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
352 @rtype: L{RSMResponse<wokkel.rsm.RSMResponse>} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
353 """ |
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 def onPrefsGetRequest(self, requestor): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
356 """ |
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 requestor: JID of the requestor. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
359 @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
|
360 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
361 @return: The current settings. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
362 @rtype: L{wokkel.mam.MAMPrefs} |
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 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
365 def onPrefsSetRequest(self, prefs, requestor): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
366 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
367 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
368 @param prefs: The new settings to set. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
369 @type prefs: L{wokkel.mam.MAMPrefs} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
370 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
371 @param requestor: JID of the requestor. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
372 @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
|
373 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
374 @return: The new current settings. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
375 @rtype: L{wokkel.mam.MAMPrefs} |
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 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
379 class MAMService(XMPPHandler, IQHandlerMixin): |
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 Protocol implementation for a MAM service. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
382 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
383 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
|
384 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
385 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
386 implements(disco.IDisco) |
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 iqHandlers = {FIELDS_REQUEST: '_onFieldsRequest', |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
389 ARCHIVE_REQUEST: '_onArchiveRequest', |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
390 PREFS_GET_REQUEST: '_onPrefsGetRequest', |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
391 PREFS_SET_REQUEST: '_onPrefsSetRequest' |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
392 } |
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 _legacyFilters = {'start': {'fieldType': 'text-single', |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
395 'var': 'start', |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
396 'label': 'Starting time', |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
397 'desc': 'Starting time a the result period.', |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
398 }, |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
399 'end': {'fieldType': 'text-single', |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
400 'var': 'end', |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
401 'label': 'Ending time', |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
402 'desc': 'Ending time of the result period.', |
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 'with': {'fieldType': 'jid-single', |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
405 'var': 'with', |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
406 'label': 'Entity', |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
407 'desc': 'Entity against which to match message.', |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
408 }, |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
409 } |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
410 |
3
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
411 extra_filters = {} |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
412 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
413 def __init__(self, resource): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
414 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
415 @param resource: instance implementing IMAMResource |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
416 @type resource: L{object} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
417 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
418 self.resource = resource |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
419 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
420 def connectionInitialized(self): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
421 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
422 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
|
423 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
424 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
|
425 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
426 self.xmlstream.addObserver(FIELDS_REQUEST, self.handleRequest) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
427 self.xmlstream.addObserver(ARCHIVE_REQUEST, self.handleRequest) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
428 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
|
429 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
|
430 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
431 def addFilter(self, field): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
432 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
433 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
|
434 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
435 @param field: dictionary specifying the attributes to build a |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
436 wokkel.data_form.Field. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
437 @type field: C{dict} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
438 """ |
3
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
439 self.extra_filters[field.var] = field |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
440 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
441 def _onFieldsRequest(self, iq): |
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 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
|
444 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
445 This immediately replies with a result response. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
446 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
447 response = toResponse(iq, 'result') |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
448 query = response.addElement((NS_MAM, 'query')) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
449 query.addChild(buildForm('form', extra=self.extra_filters).toElement()) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
450 self.xmlstream.send(response) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
451 iq.handled = True |
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 def _onArchiveRequest(self, iq): |
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 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
|
456 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
457 This immediately replies with a result response, followed by the |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
458 list of archived message and the finally the <fin/> message. |
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 response = toResponse(iq, 'result') |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
461 self.xmlstream.send(response) |
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 mam_ = MAMQueryRequest.parse(iq.query) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
464 requestor = jid.JID(iq['from']) |
3
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
465 |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
466 # remove unsupported filters |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
467 unsupported_fields = [] |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
468 if mam_.form: |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
469 for key, field in mam_.form.fields.iteritems(): |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
470 if key not in self._legacyFilters and key not in self.extra_filters: |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
471 log.msg('Ignored unsupported MAM filter: %s' % field) |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
472 unsupported_fields.append(key) |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
473 for key in unsupported_fields: |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
474 del mam_.form.fields[key] |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
475 |
3
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
476 def forward_message(id_, elt, date): |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
477 msg = domish.Element((None, 'message')) |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
478 msg['to'] = iq['from'] |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
479 result = msg.addElement('result', NS_MAM) |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
480 if iq.hasAttribute('queryid'): |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
481 result['queryid'] = iq.query['queryid'] |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
482 result['id'] = id_ |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
483 forward = result.addElement('forwarded', NS_FORWARD) |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
484 forward.addChild(delay.Delay(date).toElement()) |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
485 forward.addChild(elt) |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
486 self.xmlstream.send(msg) |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
487 |
3
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
488 def cb(result): |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
489 msg_data, rsm_elt = result |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
490 for data in msg_data: |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
491 forward_message(*data) |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
492 msg = domish.Element((None, 'message')) |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
493 msg['to'] = iq['from'] |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
494 fin = msg.addElement('fin', NS_MAM) |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
495 if iq.hasAttribute('queryid'): |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
496 fin['queryid'] = iq.query['queryid'] |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
497 if rsm_elt is not None: |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
498 fin.addChild(rsm_elt) |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
499 self.xmlstream.send(msg) |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
500 |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
501 self.resource.onArchiveRequest(mam_, requestor).addCallback(cb) |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
502 iq.handled = True |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
503 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
504 def _onPrefsGetRequest(self, iq): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
505 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
506 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
|
507 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
508 This immediately replies with a result response. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
509 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
510 response = toResponse(iq, 'result') |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
511 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
512 requestor = jid.JID(iq['from']) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
513 |
3
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
514 def cb(prefs): |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
515 response.addChild(prefs.toElement()) |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
516 self.xmlstream.send(response) |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
517 |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
518 self.resource.onPrefsGetRequest(requestor).addCallback(cb) |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
519 iq.handled = True |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
520 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
521 def _onPrefsSetRequest(self, iq): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
522 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
523 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
|
524 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
525 This immediately replies with a result response. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
526 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
527 response = toResponse(iq, 'result') |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
528 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
529 prefs = MAMPrefs.parse(iq.prefs) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
530 requestor = jid.JID(iq['from']) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
531 |
3
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
532 def cb(prefs): |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
533 response.addChild(prefs.toElement()) |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
534 self.xmlstream.send(response) |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
535 |
7eb4d15650dc
tmp: update wokkel MAM implementation
souliane <souliane@mailoo.org>
parents:
2
diff
changeset
|
536 self.resource.onPrefsSetRequest(prefs, requestor).addCallback(cb) |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
537 iq.handled = True |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
538 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
539 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
|
540 if nodeIdentifier: |
66a7586e49f8
tmp (mam): fixed name shadowing + getDiscoInfo for mam fix:
Goffi <goffi@goffi.org>
parents:
3
diff
changeset
|
541 return [] |
1
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
542 return [disco.DiscoFeature(NS_MAM)] |
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 getDiscoItems(self, requestor, target, nodeIdentifier=''): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
545 return [] |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
546 |
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 def datetime2utc(datetime): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
549 """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
|
550 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
551 @param datetime: Offset-aware timestamp to convert. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
552 @type datetime: L{datetime<datetime.datetime>} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
553 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
554 @return: The datetime converted to UTC. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
555 @rtype: C{unicode} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
556 """ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
557 stampFormat = '%Y-%m-%dT%H:%M:%SZ' |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
558 return datetime.astimezone(tzutc()).strftime(stampFormat) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
559 |
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 def buildForm(formType='submit', start=None, end=None, with_jid=None, extra=None): |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
562 """Prepare a Data Form for MAM. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
563 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
564 @param formType: The type of the Data Form ('submit' or 'form'). |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
565 @type formType: C{unicode} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
566 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
567 @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
|
568 @type start: L{datetime<datetime.datetime>} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
569 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
570 @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
|
571 @type end: L{datetime<datetime.datetime>} |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
572 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
573 @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
|
574 @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
|
575 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
576 @param extra: list of extra fields that are not defined by the |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
577 specification. Each element of the list must be a dictionary |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
578 specifying the attributes to build a wokkel.data_form.Field. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
579 @type: C{list} |
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 @return: XEP-0004 Data Form object. |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
582 @rtype: L{Form<wokkel.data_form.Form>} |
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 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
|
585 filters = [] |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
586 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
587 if formType == 'form': |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
588 filters.extend(MAMService._legacyFilters.values()) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
589 elif formType == 'submit': |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
590 if start: |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
591 filters.append({'var': 'start', 'value': datetime2utc(start)}) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
592 if end: |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
593 filters.append({'var': 'end', 'value': datetime2utc(end)}) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
594 if with_jid: |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
595 # must specify the field type to overwrite default value in Field.__init__ |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
596 filters.append({'fieldType': 'jid-single', 'var': 'with', 'value': with_jid.full()}) |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
597 |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
598 if extra is not None: |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
599 filters.extend(extra) |
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 for field in filters: |
9d35f88168a1
tmp: update tmp.wokkel.rsm, add tmp.wokkel.mam
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
602 form.addField(data_form.Field(**field)) |
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 return form |