Skip to content
Back to top

# Source code for slixmpp.plugins.xep_0184.stanza

    # Slixmpp: The Slick XMPP Library
    # Copyright (C) 2012 Erik Reuterborg Larsson, Nathanael C. Fritz
    # This file is part of Slixmpp.
    # See the file LICENSE for copying permission.
    from slixmpp.xmlstream.stanzabase import ElementBase, ET

    class Request(ElementBase):
        namespace = 'urn:xmpp:receipts'
        name = 'request'
        plugin_attrib = 'request_receipt'
        interfaces = {'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.xml.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 = {'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.xml.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)