From e3d596c9fa1a8c138df0ebd97e90c6d510b77929 Mon Sep 17 00:00:00 2001
From: Lance Stout <lancestout@gmail.com>
Date: Sun, 19 Feb 2012 20:28:31 -0800
Subject: Update XEP-0085 plugin to work with both ElementTree and cElementTree

Each state element must have its own stanza class now. A stanza class
with an empty name field causes errors in ElementTree, even though
it works fine with cElementTree.
---
 sleekxmpp/plugins/xep_0085/chat_states.py |  6 +++++-
 sleekxmpp/plugins/xep_0085/stanza.py      | 20 ++++++++++++++++++++
 tests/test_stanza_xep_0085.py             |  6 +++++-
 3 files changed, 30 insertions(+), 2 deletions(-)

diff --git a/sleekxmpp/plugins/xep_0085/chat_states.py b/sleekxmpp/plugins/xep_0085/chat_states.py
index e95434d2..6f7cfddf 100644
--- a/sleekxmpp/plugins/xep_0085/chat_states.py
+++ b/sleekxmpp/plugins/xep_0085/chat_states.py
@@ -37,7 +37,11 @@ class xep_0085(base_plugin):
                          StanzaPath('message@chat_state=%s' % state),
                          self._handle_chat_state))
 
-        register_stanza_plugin(Message, ChatState)
+        register_stanza_plugin(Message, stanza.Active)
+        register_stanza_plugin(Message, stanza.Composing)
+        register_stanza_plugin(Message, stanza.Gone)
+        register_stanza_plugin(Message, stanza.Inactive)
+        register_stanza_plugin(Message, stanza.Paused)
 
     def post_init(self):
         base_plugin.post_init(self)
diff --git a/sleekxmpp/plugins/xep_0085/stanza.py b/sleekxmpp/plugins/xep_0085/stanza.py
index 8c46758c..73c109ac 100644
--- a/sleekxmpp/plugins/xep_0085/stanza.py
+++ b/sleekxmpp/plugins/xep_0085/stanza.py
@@ -71,3 +71,23 @@ class ChatState(ElementBase):
             if state_xml is not None:
                 self.xml = ET.Element('')
                 parent.xml.remove(state_xml)
+
+
+class Active(ChatState):
+    name = 'active'
+
+
+class Composing(ChatState):
+    name = 'composing'
+
+
+class Gone(ChatState):
+    name = 'gone'
+
+
+class Inactive(ChatState):
+    name = 'inactive'
+
+
+class Paused(ChatState):
+    name = 'paused'
diff --git a/tests/test_stanza_xep_0085.py b/tests/test_stanza_xep_0085.py
index b08404e2..61784e47 100644
--- a/tests/test_stanza_xep_0085.py
+++ b/tests/test_stanza_xep_0085.py
@@ -4,7 +4,11 @@ import sleekxmpp.plugins.xep_0085 as xep_0085
 class TestChatStates(SleekTest):
 
     def setUp(self):
-        register_stanza_plugin(Message, xep_0085.ChatState)
+        register_stanza_plugin(Message, xep_0085.stanza.Active)
+        register_stanza_plugin(Message, xep_0085.stanza.Composing)
+        register_stanza_plugin(Message, xep_0085.stanza.Gone)
+        register_stanza_plugin(Message, xep_0085.stanza.Inactive)
+        register_stanza_plugin(Message, xep_0085.stanza.Paused)
 
     def testCreateChatState(self):
         """Testing creating chat states."""
-- 
cgit v1.2.3