From 2217c69757417ea83bb66ccb9aa13376d6324b4e Mon Sep 17 00:00:00 2001
From: Erik Larsson <who+github@cnackers.org>
Date: Thu, 2 Feb 2012 14:29:27 +0100
Subject: Added plugin for XEP-0184

---
 setup.py                               |  1 +
 sleekxmpp/plugins/xep_0184/__init__.py | 10 ++++++++
 sleekxmpp/plugins/xep_0184/reciept.py  | 43 ++++++++++++++++++++++++++++++++
 sleekxmpp/plugins/xep_0184/stanza.py   | 45 ++++++++++++++++++++++++++++++++++
 tests/test_stanza_xep_0184.py          | 29 ++++++++++++++++++++++
 5 files changed, 128 insertions(+)
 create mode 100644 sleekxmpp/plugins/xep_0184/__init__.py
 create mode 100644 sleekxmpp/plugins/xep_0184/reciept.py
 create mode 100644 sleekxmpp/plugins/xep_0184/stanza.py
 create mode 100644 tests/test_stanza_xep_0184.py

diff --git a/setup.py b/setup.py
index 9bcadc90..9191ea6f 100755
--- a/setup.py
+++ b/setup.py
@@ -71,6 +71,7 @@ packages     = [ 'sleekxmpp',
                  'sleekxmpp/plugins/xep_0092',
                  'sleekxmpp/plugins/xep_0115',
                  'sleekxmpp/plugins/xep_0128',
+                 'sleekxmpp/plugins/xep_0184',
                  'sleekxmpp/plugins/xep_0199',
                  'sleekxmpp/plugins/xep_0202',
                  'sleekxmpp/plugins/xep_0203',
diff --git a/sleekxmpp/plugins/xep_0184/__init__.py b/sleekxmpp/plugins/xep_0184/__init__.py
new file mode 100644
index 00000000..59312138
--- /dev/null
+++ b/sleekxmpp/plugins/xep_0184/__init__.py
@@ -0,0 +1,10 @@
+"""
+    SleekXMPP: The Sleek XMPP Library
+    Copyright (C) 2012 Erik Reuterborg Larsson
+    This file is part of SleekXMPP.
+
+    See the file LICENSE for copying permission.
+"""
+
+from sleekxmpp.plugins.xep_0184.reciept import xep_0184
+from sleekxmpp.plugins.xep_0184.stanza import Request, Received
diff --git a/sleekxmpp/plugins/xep_0184/reciept.py b/sleekxmpp/plugins/xep_0184/reciept.py
new file mode 100644
index 00000000..d5815981
--- /dev/null
+++ b/sleekxmpp/plugins/xep_0184/reciept.py
@@ -0,0 +1,43 @@
+"""
+    SleekXMPP: The Sleek XMPP Library
+    Copyright (C) 2012 Erik Reuterborg Larsson
+    This file is part of SleekXMPP.
+
+    See the file LICENSE for copying permission.
+"""
+
+from sleekxmpp.stanza import Message
+from sleekxmpp.xmlstream import register_stanza_plugin
+from sleekxmpp.plugins.base import base_plugin
+from stanza import Request, Received
+
+
+class xep_0184(base_plugin):
+    """
+    XEP-0184: Message Delivery Receipts
+    """
+
+    def plugin_init(self):
+        self.xep = '0184'
+        self.description = 'Message Delivery Receipts'
+        register_stanza_plugin(Message, Request)
+        register_stanza_plugin(Message, Received)
+
+    def post_init(self):
+        base_plugin.post_init(self)
+        self.xmpp.plugin['xep_0030'].add_feature('urn:xmpp:receipts')
+
+    def ack(self, message):
+        """
+        Acknowledges a message
+
+        Arguments:
+            message -- The message to acknowledge.
+        """
+        mto = message['to']
+        mfrom = message['from']
+        mid = message['id']
+        msg = self.xmpp.make_message(mto=mfrom, mfrom=mto)
+        msg['reciept_received']['id'] = mid
+        msg['id'] = self.xmpp.new_id()
+        msg.send()
diff --git a/sleekxmpp/plugins/xep_0184/stanza.py b/sleekxmpp/plugins/xep_0184/stanza.py
new file mode 100644
index 00000000..46cb38d0
--- /dev/null
+++ b/sleekxmpp/plugins/xep_0184/stanza.py
@@ -0,0 +1,45 @@
+"""
+    SleekXMPP: The Sleek XMPP Library
+    Copyright (C) 2012 Erik Reuterborg Larsson
+    This file is part of SleekXMPP.
+
+    See the file LICENSE for copying permission.
+"""
+
+from sleekxmpp.xmlstream.stanzabase import ElementBase, ET
+
+
+class Request(ElementBase):
+    namespace = 'urn:xmpp:receipts'
+    name = 'request'
+    plugin_attrib = 'request_reciept'
+    interfaces = set(('request_reciept',))
+    is_extension = True
+
+    def setup(self, xml=None):
+        self.xml = ET.Element('')
+        return True
+
+    def set_request_reciept(self, val):
+        self.del_request_reciept()
+        parent = self.parent()
+        if val:
+            self.xml = ET.Element("{%s}%s" % (self.namespace, self.name))
+            parent.append(self.xml)
+
+    def get_request_reciept(self):
+        parent = self.parent()
+        if parent.find("{%s}%s" % (self.namespace, self.name)) is not None:
+            return True
+        else:
+            return False
+
+    def del_request_reciept(self):
+        self.xml = ET.Element('')
+
+
+class Received(ElementBase):
+    namespace = 'urn:xmpp:receipts'
+    name = 'received'
+    plugin_attrib = 'reciept_received'
+    interfaces = set(('id',))
diff --git a/tests/test_stanza_xep_0184.py b/tests/test_stanza_xep_0184.py
new file mode 100644
index 00000000..e3668d3a
--- /dev/null
+++ b/tests/test_stanza_xep_0184.py
@@ -0,0 +1,29 @@
+from sleekxmpp.test import *
+import sleekxmpp.plugins.xep_0184 as xep_0184
+
+
+class TestReciept(SleekTest):
+
+    def setUp(self):
+        register_stanza_plugin(Message, xep_0184.Request)
+        register_stanza_plugin(Message, xep_0184.Received)
+
+    def testCreateRequest(self):
+        request = """<message><request xmlns="urn:xmpp:receipts" /></message>"""
+
+        msg = self.Message()
+
+        self.assertEqual(msg['request_reciept'], False)
+
+        msg['request_reciept'] = True
+        self.check(msg, request, use_values=False)
+
+    def testCreateReceived(self):
+        received = """<message><received xmlns="urn:xmpp:receipts" id="1"/></message>"""
+
+        msg = self.Message()
+        msg['reciept_received']['id'] = '1'
+
+        self.check(msg, received)
+
+suite = unittest.TestLoader().loadTestsFromTestCase(TestReciept)
-- 
cgit v1.2.3


From 9a38a101d2ea2d726ee50caeaf67e179c98872b3 Mon Sep 17 00:00:00 2001
From: Erik Larsson <who+github@cnackers.org>
Date: Fri, 3 Feb 2012 15:17:01 +0100
Subject: Added fritzy to the copyright for xep_0184

---
 sleekxmpp/plugins/xep_0184/__init__.py | 2 +-
 sleekxmpp/plugins/xep_0184/reciept.py  | 2 +-
 sleekxmpp/plugins/xep_0184/stanza.py   | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/sleekxmpp/plugins/xep_0184/__init__.py b/sleekxmpp/plugins/xep_0184/__init__.py
index 59312138..15670562 100644
--- a/sleekxmpp/plugins/xep_0184/__init__.py
+++ b/sleekxmpp/plugins/xep_0184/__init__.py
@@ -1,6 +1,6 @@
 """
     SleekXMPP: The Sleek XMPP Library
-    Copyright (C) 2012 Erik Reuterborg Larsson
+    Copyright (C) 2012 Erik Reuterborg Larsson, Nathanael C. Fritz
     This file is part of SleekXMPP.
 
     See the file LICENSE for copying permission.
diff --git a/sleekxmpp/plugins/xep_0184/reciept.py b/sleekxmpp/plugins/xep_0184/reciept.py
index d5815981..36105fd4 100644
--- a/sleekxmpp/plugins/xep_0184/reciept.py
+++ b/sleekxmpp/plugins/xep_0184/reciept.py
@@ -1,6 +1,6 @@
 """
     SleekXMPP: The Sleek XMPP Library
-    Copyright (C) 2012 Erik Reuterborg Larsson
+    Copyright (C) 2012 Erik Reuterborg Larsson, Nathanael C. Fritz
     This file is part of SleekXMPP.
 
     See the file LICENSE for copying permission.
diff --git a/sleekxmpp/plugins/xep_0184/stanza.py b/sleekxmpp/plugins/xep_0184/stanza.py
index 46cb38d0..42ba8c3f 100644
--- a/sleekxmpp/plugins/xep_0184/stanza.py
+++ b/sleekxmpp/plugins/xep_0184/stanza.py
@@ -1,6 +1,6 @@
 """
     SleekXMPP: The Sleek XMPP Library
-    Copyright (C) 2012 Erik Reuterborg Larsson
+    Copyright (C) 2012 Erik Reuterborg Larsson, Nathanael C. Fritz
     This file is part of SleekXMPP.
 
     See the file LICENSE for copying permission.
-- 
cgit v1.2.3