summaryrefslogtreecommitdiff
path: root/sleekxmpp/plugins/xep_0184
diff options
context:
space:
mode:
Diffstat (limited to 'sleekxmpp/plugins/xep_0184')
-rw-r--r--sleekxmpp/plugins/xep_0184/__init__.py19
-rw-r--r--sleekxmpp/plugins/xep_0184/receipt.py131
-rw-r--r--sleekxmpp/plugins/xep_0184/stanza.py72
3 files changed, 0 insertions, 222 deletions
diff --git a/sleekxmpp/plugins/xep_0184/__init__.py b/sleekxmpp/plugins/xep_0184/__init__.py
deleted file mode 100644
index 4b129b6b..00000000
--- a/sleekxmpp/plugins/xep_0184/__init__.py
+++ /dev/null
@@ -1,19 +0,0 @@
-"""
- SleekXMPP: The Sleek XMPP Library
- Copyright (C) 2012 Erik Reuterborg Larsson, Nathanael C. Fritz
- This file is part of SleekXMPP.
-
- See the file LICENSE for copying permission.
-"""
-
-from sleekxmpp.plugins.base import register_plugin
-
-from sleekxmpp.plugins.xep_0184.stanza import Request, Received
-from sleekxmpp.plugins.xep_0184.receipt import XEP_0184
-
-
-register_plugin(XEP_0184)
-
-
-# Retain some backwards compatibility
-xep_0184 = XEP_0184
diff --git a/sleekxmpp/plugins/xep_0184/receipt.py b/sleekxmpp/plugins/xep_0184/receipt.py
deleted file mode 100644
index 3e97d8db..00000000
--- a/sleekxmpp/plugins/xep_0184/receipt.py
+++ /dev/null
@@ -1,131 +0,0 @@
-"""
- SleekXMPP: The Sleek XMPP Library
- Copyright (C) 2012 Erik Reuterborg Larsson, Nathanael C. Fritz
- This file is part of SleekXMPP.
-
- See the file LICENSE for copying permission.
-"""
-
-import logging
-
-from sleekxmpp.stanza import Message
-from sleekxmpp.xmlstream import register_stanza_plugin
-from sleekxmpp.xmlstream.handler import Callback
-from sleekxmpp.xmlstream.matcher import StanzaPath
-from sleekxmpp.plugins import BasePlugin
-from sleekxmpp.plugins.xep_0184 import stanza, Request, Received
-
-
-class XEP_0184(BasePlugin):
-
- """
- XEP-0184: Message Delivery Receipts
- """
-
- name = 'xep_0184'
- description = 'XEP-0184: Message Delivery Receipts'
- dependencies = set(['xep_0030'])
- stanza = stanza
- default_config = {
- 'auto_ack': True,
- 'auto_request': False
- }
-
- ack_types = ('normal', 'chat', 'headline')
-
- def plugin_init(self):
- register_stanza_plugin(Message, Request)
- register_stanza_plugin(Message, Received)
-
- self.xmpp.add_filter('out', self._filter_add_receipt_request)
-
- self.xmpp.register_handler(
- Callback('Message Receipt',
- StanzaPath('message/receipt'),
- self._handle_receipt_received))
-
- self.xmpp.register_handler(
- Callback('Message Receipt Request',
- StanzaPath('message/request_receipt'),
- self._handle_receipt_request))
-
- def plugin_end(self):
- self.xmpp['xep_0030'].del_feature('urn:xmpp:receipts')
- self.xmpp.del_filter('out', self._filter_add_receipt_request)
- self.xmpp.remove_handler('Message Receipt')
- self.xmpp.remove_handler('Message Receipt Request')
-
- def session_bind(self, jid):
- self.xmpp['xep_0030'].add_feature('urn:xmpp:receipts')
-
- def ack(self, msg):
- """
- Acknowledge a message by sending a receipt.
-
- Arguments:
- msg -- The message to acknowledge.
- """
- ack = self.xmpp.Message()
- ack['to'] = msg['from']
- ack['from'] = msg['to']
- ack['receipt'] = msg['id']
- ack['id'] = msg['id']
- ack.send()
-
- def _handle_receipt_received(self, msg):
- self.xmpp.event('receipt_received', msg)
-
- def _handle_receipt_request(self, msg):
- """
- Auto-ack message receipt requests if ``self.auto_ack`` is ``True``.
-
- Arguments:
- msg -- The incoming message requesting a receipt.
- """
- if self.auto_ack:
- if msg['type'] in self.ack_types:
- if not msg['receipt']:
- self.ack(msg)
-
- def _filter_add_receipt_request(self, stanza):
- """
- Auto add receipt requests to outgoing messages, if:
-
- - ``self.auto_request`` is set to ``True``
- - The message is not for groupchat
- - The message does not contain a receipt acknowledgment
- - The recipient is a bare JID or, if a full JID, one
- that has the ``urn:xmpp:receipts`` feature enabled
-
- The disco cache is checked if a full JID is specified in
- the outgoing message, which may mean a round-trip disco#info
- delay for the first message sent to the JID if entity caps
- are not used.
- """
-
- if not self.auto_request:
- return stanza
-
- if not isinstance(stanza, Message):
- return stanza
-
- if stanza['request_receipt']:
- return stanza
-
- if not stanza['type'] in self.ack_types:
- return stanza
-
- if stanza['receipt']:
- return stanza
-
- if not stanza['body']:
- return stanza
-
- if stanza['to'].resource:
- if not self.xmpp['xep_0030'].supports(stanza['to'],
- feature='urn:xmpp:receipts',
- cached=True):
- return stanza
-
- stanza['request_receipt'] = True
- return stanza
diff --git a/sleekxmpp/plugins/xep_0184/stanza.py b/sleekxmpp/plugins/xep_0184/stanza.py
deleted file mode 100644
index a7607035..00000000
--- a/sleekxmpp/plugins/xep_0184/stanza.py
+++ /dev/null
@@ -1,72 +0,0 @@
-"""
- SleekXMPP: The Sleek XMPP Library
- Copyright (C) 2012 Erik Reuterborg Larsson, Nathanael C. Fritz
- 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_receipt'
- interfaces = set(('request_receipt',))
- sub_interfaces = interfaces
- is_extension = True
-
- def setup(self, xml=None):
- self.xml = ET.Element('')
- return True
-
- def set_request_receipt(self, val):
- self.del_request_receipt()
- if val:
- parent = self.parent()
- parent._set_sub_text("{%s}request" % self.namespace, keep=True)
- if not parent['id']:
- if parent.stream:
- parent['id'] = parent.stream.new_id()
-
- def get_request_receipt(self):
- parent = self.parent()
- if parent.find("{%s}request" % self.namespace) is not None:
- return True
- else:
- return False
-
- def del_request_receipt(self):
- self.parent()._del_sub("{%s}request" % self.namespace)
-
-
-class Received(ElementBase):
- namespace = 'urn:xmpp:receipts'
- name = 'received'
- plugin_attrib = 'receipt'
- interfaces = set(['receipt'])
- sub_interfaces = interfaces
- is_extension = True
-
- def setup(self, xml=None):
- self.xml = ET.Element('')
- return True
-
- def set_receipt(self, value):
- self.del_receipt()
- if value:
- parent = self.parent()
- xml = ET.Element("{%s}received" % self.namespace)
- xml.attrib['id'] = value
- parent.append(xml)
-
- def get_receipt(self):
- parent = self.parent()
- xml = parent.find("{%s}received" % self.namespace)
- if xml is not None:
- return xml.attrib.get('id', '')
- return ''
-
- def del_receipt(self):
- self.parent()._del_sub('{%s}received' % self.namespace)