summaryrefslogtreecommitdiff
path: root/sleekxmpp/stanza/message.py
diff options
context:
space:
mode:
authorLance Stout <lancestout@gmail.com>2012-06-22 23:17:15 -0700
committerLance Stout <lancestout@gmail.com>2012-06-22 23:17:15 -0700
commit5d6019a962fd1a30ed04520892836cdecc7fe19f (patch)
tree6ee7b956a813af2f0507867dc861f4aead3479e2 /sleekxmpp/stanza/message.py
parenteb5df1aa3722e6e85b9683805b4088f4340918aa (diff)
parent85ef2d8d0bcc92cd20d857d01bcf1bba56bc8edf (diff)
downloadslixmpp-5d6019a962fd1a30ed04520892836cdecc7fe19f.tar.gz
slixmpp-5d6019a962fd1a30ed04520892836cdecc7fe19f.tar.bz2
slixmpp-5d6019a962fd1a30ed04520892836cdecc7fe19f.tar.xz
slixmpp-5d6019a962fd1a30ed04520892836cdecc7fe19f.zip
Merge branch 'master' into develop
Diffstat (limited to 'sleekxmpp/stanza/message.py')
-rw-r--r--sleekxmpp/stanza/message.py44
1 files changed, 38 insertions, 6 deletions
diff --git a/sleekxmpp/stanza/message.py b/sleekxmpp/stanza/message.py
index 407802bd..02133682 100644
--- a/sleekxmpp/stanza/message.py
+++ b/sleekxmpp/stanza/message.py
@@ -7,7 +7,7 @@
"""
from sleekxmpp.stanza.rootstanza import RootStanza
-from sleekxmpp.xmlstream import StanzaBase
+from sleekxmpp.xmlstream import StanzaBase, ET
class Message(RootStanza):
@@ -54,13 +54,14 @@ class Message(RootStanza):
del_mucnick -- Dummy method to prevent deletion.
"""
- namespace = 'jabber:client'
name = 'message'
- interfaces = set(('type', 'to', 'from', 'id', 'body', 'subject',
- 'mucroom', 'mucnick'))
- sub_interfaces = set(('body', 'subject'))
+ namespace = 'jabber:client'
plugin_attrib = name
- types = set((None, 'normal', 'chat', 'headline', 'error', 'groupchat'))
+ interfaces = set(['type', 'to', 'from', 'id', 'body', 'subject',
+ 'thread', 'parent_thread', 'mucroom', 'mucnick'])
+ sub_interfaces = set(['body', 'subject', 'thread'])
+ lang_interfaces = sub_interfaces
+ types = set(['normal', 'chat', 'headline', 'error', 'groupchat'])
def get_type(self):
"""
@@ -72,6 +73,31 @@ class Message(RootStanza):
"""
return self._get_attr('type', 'normal')
+ def get_parent_thread(self):
+ """Return the message thread's parent thread."""
+ thread = self.xml.find('{%s}thread' % self.namespace)
+ if thread is not None:
+ return thread.attrib.get('parent', '')
+ return ''
+
+ def set_parent_thread(self, value):
+ """Add or change the message thread's parent thread."""
+ thread = self.xml.find('{%s}thread' % self.namespace)
+ if value:
+ if thread is None:
+ thread = ET.Element('{%s}thread' % self.namespace)
+ self.xml.append(thread)
+ thread.attrib['parent'] = value
+ else:
+ if thread is not None and 'parent' in thread.attrib:
+ del thread.attrib['parent']
+
+ def del_parent_thread(self):
+ """Delete the message thread's parent reference."""
+ thread = self.xml.find('{%s}thread' % self.namespace)
+ if thread is not None and 'parent' in thread.attrib:
+ del thread.attrib['parent']
+
def chat(self):
"""Set the message type to 'chat'."""
self['type'] = 'chat'
@@ -96,10 +122,16 @@ class Message(RootStanza):
clear -- Indicates if existing content should be removed
before replying. Defaults to True.
"""
+ thread = self['thread']
+ parent = self['parent_thread']
+
StanzaBase.reply(self, clear)
if self['type'] == 'groupchat':
self['to'] = self['to'].bare
+ self['thread'] = thread
+ self['parent_thread'] = parent
+
del self['id']
if body is not None: