Mercurial > libervia-backend
annotate src/plugins/plugin_xep_0049.py @ 1525:49d33cb48207
plugin file: first draft:
This plugin will be used to manage file transfers, and choose the best available method.
It embed a class dedicated to files: SatFile, which act as a file objects but manage some high level stuffs (like progression).
author | Goffi <goffi@goffi.org> |
---|---|
date | Fri, 25 Sep 2015 19:19:12 +0200 |
parents | 069ad98b360d |
children | d17772b0fe22 |
rev | line source |
---|---|
980 | 1 #!/usr/bin/python |
2 # -*- coding: utf-8 -*- | |
3 | |
4 # SAT plugin for managing xep-0049 | |
1396 | 5 # Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015 Jérôme Poisson (goffi@goffi.org) |
980 | 6 |
7 # This program is free software: you can redistribute it and/or modify | |
8 # it under the terms of the GNU Affero General Public License as published by | |
9 # the Free Software Foundation, either version 3 of the License, or | |
10 # (at your option) any later version. | |
11 | |
12 # This program is distributed in the hope that it will be useful, | |
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 # GNU Affero General Public License for more details. | |
16 | |
17 # You should have received a copy of the GNU Affero General Public License | |
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. | |
19 | |
20 from sat.core.i18n import _ | |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
989
diff
changeset
|
21 from sat.core.log import getLogger |
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
989
diff
changeset
|
22 log = getLogger(__name__) |
980 | 23 from wokkel import compat |
24 from twisted.words.xish import domish | |
25 | |
26 | |
27 | |
28 PLUGIN_INFO = { | |
29 "name": "XEP-0049 Plugin", | |
30 "import_name": "XEP-0049", | |
31 "type": "XEP", | |
32 "protocols": ["XEP-0049"], | |
33 "dependencies": [], | |
34 "main": "XEP_0049", | |
35 "handler": "no", | |
36 "description": _("""Implementation of private XML storage""") | |
37 } | |
38 | |
39 | |
40 class XEP_0049(object): | |
41 NS_PRIVATE = 'jabber:iq:private' | |
42 | |
43 def __init__(self, host): | |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
989
diff
changeset
|
44 log.info(_("Plugin XEP-0049 initialization")) |
980 | 45 self.host = host |
46 | |
47 def privateXMLStore(self, element, profile_key): | |
48 """Store private data | |
49 @param element: domish.Element to store (must have a namespace) | |
50 @param profile_key: %(doc_profile_key)s | |
51 | |
52 """ | |
53 assert isinstance(element, domish.Element) | |
54 client = self.host.getClient(profile_key) | |
989
93359853e4bc
plugins XEP-0048, XEP-0049: feature is not checked anymore before using private XML storage, as feature announcement is not mandatory in XEP-0049
Goffi <goffi@goffi.org>
parents:
980
diff
changeset
|
55 # XXX: feature announcement in disco#info is not mandatory in XEP-0049, so we have to try to use private XML, and react according to the answer |
980 | 56 iq_elt = compat.IQ(client.xmlstream) |
57 query_elt = iq_elt.addElement('query', XEP_0049.NS_PRIVATE) | |
58 query_elt.addChild(element) | |
989
93359853e4bc
plugins XEP-0048, XEP-0049: feature is not checked anymore before using private XML storage, as feature announcement is not mandatory in XEP-0049
Goffi <goffi@goffi.org>
parents:
980
diff
changeset
|
59 return iq_elt.send() |
980 | 60 |
61 def privateXMLGet(self, node_name, namespace, profile_key): | |
62 """Store private data | |
63 @param node_name: name of the node to get | |
64 @param namespace: namespace of the node to get | |
65 @param profile_key: %(doc_profile_key)s | |
66 @return (domish.Element): a deferred which fire the stored data | |
67 | |
68 """ | |
69 client = self.host.getClient(profile_key) | |
989
93359853e4bc
plugins XEP-0048, XEP-0049: feature is not checked anymore before using private XML storage, as feature announcement is not mandatory in XEP-0049
Goffi <goffi@goffi.org>
parents:
980
diff
changeset
|
70 # XXX: see privateXMLStore note about feature checking |
980 | 71 iq_elt = compat.IQ(client.xmlstream, 'get') |
72 query_elt = iq_elt.addElement('query', XEP_0049.NS_PRIVATE) | |
73 query_elt.addElement(node_name, namespace) | |
989
93359853e4bc
plugins XEP-0048, XEP-0049: feature is not checked anymore before using private XML storage, as feature announcement is not mandatory in XEP-0049
Goffi <goffi@goffi.org>
parents:
980
diff
changeset
|
74 def getCb(answer_iq_elt): |
93359853e4bc
plugins XEP-0048, XEP-0049: feature is not checked anymore before using private XML storage, as feature announcement is not mandatory in XEP-0049
Goffi <goffi@goffi.org>
parents:
980
diff
changeset
|
75 answer_query_elt = answer_iq_elt.elements(XEP_0049.NS_PRIVATE, 'query').next() |
93359853e4bc
plugins XEP-0048, XEP-0049: feature is not checked anymore before using private XML storage, as feature announcement is not mandatory in XEP-0049
Goffi <goffi@goffi.org>
parents:
980
diff
changeset
|
76 return answer_query_elt.firstChildElement() |
93359853e4bc
plugins XEP-0048, XEP-0049: feature is not checked anymore before using private XML storage, as feature announcement is not mandatory in XEP-0049
Goffi <goffi@goffi.org>
parents:
980
diff
changeset
|
77 d = iq_elt.send() |
93359853e4bc
plugins XEP-0048, XEP-0049: feature is not checked anymore before using private XML storage, as feature announcement is not mandatory in XEP-0049
Goffi <goffi@goffi.org>
parents:
980
diff
changeset
|
78 d.addCallback(getCb) |
93359853e4bc
plugins XEP-0048, XEP-0049: feature is not checked anymore before using private XML storage, as feature announcement is not mandatory in XEP-0049
Goffi <goffi@goffi.org>
parents:
980
diff
changeset
|
79 return d |
980 | 80 |