summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxime “pep” Buquet <pep@bouah.net>2019-07-18 12:28:16 +0200
committerMaxime “pep” Buquet <pep@bouah.net>2019-08-23 17:09:21 +0200
commitfef575ee1a509d2428620e843f83f110a0d82865 (patch)
tree99518e5774a66e02a3ad4972eebd7074816b8cc9
parent540ff894275023da343d8c7565ee46d6e41ccbfc (diff)
downloadslixmpp-fef575ee1a509d2428620e843f83f110a0d82865.tar.gz
slixmpp-fef575ee1a509d2428620e843f83f110a0d82865.tar.bz2
slixmpp-fef575ee1a509d2428620e843f83f110a0d82865.tar.xz
slixmpp-fef575ee1a509d2428620e843f83f110a0d82865.zip
Implement origin-id (XEP-0359)
This XEP is not implemented as a plugin but directly into Message. Signed-off-by: Maxime “pep” Buquet <pep@bouah.net>
-rw-r--r--slixmpp/stanza/message.py41
1 files changed, 41 insertions, 0 deletions
diff --git a/slixmpp/stanza/message.py b/slixmpp/stanza/message.py
index f5813eaf..59707e25 100644
--- a/slixmpp/stanza/message.py
+++ b/slixmpp/stanza/message.py
@@ -10,6 +10,9 @@ from slixmpp.stanza.rootstanza import RootStanza
from slixmpp.xmlstream import StanzaBase, ET
+ORIGIN_NAME = '{urn:xmpp:sid:0}origin-id'
+
+
class Message(RootStanza):
"""
@@ -63,6 +66,8 @@ class Message(RootStanza):
if self['id'] == '':
if self.stream is not None and self.stream.use_message_ids:
self['id'] = self.stream.new_id()
+ else:
+ del self['origin_id']
def get_type(self):
"""
@@ -76,6 +81,40 @@ class Message(RootStanza):
"""
return self._get_attr('type', 'normal')
+ def get_id(self):
+ return self._get_attr('id') or ''
+
+ def get_origin_id(self):
+ sub = self.xml.find(ORIGIN_NAME)
+ if sub is not None:
+ return sub.attrib.get('id') or ''
+ return ''
+
+ def _set_ids(self, value) -> None:
+ if value is None or value == '':
+ return None
+
+ self.xml.attrib['id'] = value
+
+ sub = self.xml.find(ORIGIN_NAME)
+ if sub is not None:
+ sub.attrib['id'] = value
+ else:
+ sub = ET.Element(ORIGIN_NAME)
+ sub.attrib['id'] = value
+ self.xml.append(sub)
+
+ def set_id(self, value):
+ return self._set_ids(value)
+
+ def set_origin_id(self, value: str):
+ return self._set_ids(value)
+
+ def del_origin_id(self):
+ sub = self.xml.find(ORIGIN_NAME)
+ if sub is not None:
+ self.xml.remove(sub)
+
def get_parent_thread(self):
"""Return the message thread's parent thread.
@@ -140,6 +179,8 @@ class Message(RootStanza):
new_message['parent_thread'] = self['parent_thread']
del new_message['id']
+ if self.stream is not None and self.stream.use_message_ids:
+ new_message['id'] = self.stream.new_id()
if body is not None:
new_message['body'] = body