comparison src/plugins/plugin_xep_0203.py @ 1273:f7977b2b727e

plugin XEP-0203: first draft
author souliane <souliane@mailoo.org>
date Fri, 19 Dec 2014 11:38:24 +0100
parents
children 069ad98b360d
comparison
equal deleted inserted replaced
1272:7fbc858cd1cd 1273:f7977b2b727e
1 #!/usr/bin/python
2 # -*- coding: utf-8 -*-
3
4 # SAT plugin for Delayed Delivery (XEP-0203)
5 # Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014 Jérôme Poisson (goffi@goffi.org)
6 # Copyright (C) 2013, 2014 Adrien Cossa (souliane@mailoo.org)
7
8 # This program is free software: you can redistribute it and/or modify
9 # it under the terms of the GNU Affero General Public License as published by
10 # the Free Software Foundation, either version 3 of the License, or
11 # (at your option) any later version.
12
13 # This program is distributed in the hope that it will be useful,
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 # GNU Affero General Public License for more details.
17
18 # You should have received a copy of the GNU Affero General Public License
19 # along with this program. If not, see <http://www.gnu.org/licenses/>.
20
21 from sat.core.i18n import _
22 from sat.core.log import getLogger
23 log = getLogger(__name__)
24
25 from wokkel import disco, iwokkel, delay
26 try:
27 from twisted.words.protocols.xmlstream import XMPPHandler
28 except ImportError:
29 from wokkel.subprotocols import XMPPHandler
30 from zope.interface import implements
31
32
33 NS_DD = 'urn:xmpp:delay'
34
35 PLUGIN_INFO = {
36 "name": "Delayed Delivery",
37 "import_name": "XEP-0203",
38 "type": "XEP",
39 "protocols": ["XEP-0203"],
40 "main": "XEP_0203",
41 "handler": "yes",
42 "description": _("""Implementation of Delayed Delivery""")
43 }
44
45
46 class XEP_0203(object):
47
48 def __init__(self, host):
49 log.info(_("Delayed Delivery plugin initialization"))
50 self.host = host
51
52 def getHandler(self, profile):
53 return XEP_0203_handler(self, profile)
54
55 def delay(self, stamp, sender=None, desc='', parent=None):
56 """Build a delay element, eventually append it to the given parent element.
57
58 @param stamp (datetime): offset-aware timestamp of the original sending.
59 @param sender (JID): entity that originally sent or delayed the message.
60 @param desc (unicode): optional natural language description.
61 @param parent (domish.Element): add the delay element to this element.
62 @return: the delay element (domish.Element)
63 """
64 elt = delay.Delay(stamp, sender).toElement()
65 if desc:
66 elt.addContent(desc)
67 if parent:
68 parent.addChild(elt)
69 return elt
70
71
72 class XEP_0203_handler(XMPPHandler):
73 implements(iwokkel.IDisco)
74
75 def __init__(self, plugin_parent, profile):
76 self.plugin_parent = plugin_parent
77 self.host = plugin_parent.host
78 self.profile = profile
79
80 def getDiscoInfo(self, requestor, target, nodeIdentifier=''):
81 return [disco.DiscoFeature(NS_DD)]
82
83 def getDiscoItems(self, requestor, target, nodeIdentifier=''):
84 return []