diff src/plugins/plugin_xep_0277.py @ 306:169e7386650a

plugin xep-0277: bridge data is now converted in pubsub item in a separate function
author Goffi <goffi@goffi.org>
date Thu, 07 Apr 2011 22:22:41 +0200
parents e04ccf122bb6
children f1a3db8ee04a
line wrap: on
line diff
--- a/src/plugins/plugin_xep_0277.py	Thu Apr 07 22:21:16 2011 +0200
+++ b/src/plugins/plugin_xep_0277.py	Thu Apr 07 22:22:41 2011 +0200
@@ -107,18 +107,12 @@
             microblog_data = self._item2mbdata(item)
             self.host.bridge.personalEvent(itemsEvent.sender.full(), "MICROBLOG", microblog_data, profile)
 
-    def sendMicroblog(self, data, profile):
-        """Send XEP-0277's microblog data
-        @param data: must include content
-        @param profile: profile which send the mood"""
-        if not data.has_key('content'):
-            error(_("Microblog data must contain at least 'content' key"))
-            return 3
+    def data2entry(self, data, profile):
+        """Convert a data dict to en entry usable to create an item
+        @param data: data dict as given by bridge method
+        @return: domish.Element"""
+        _uuid = unicode(uuid.uuid1())
         content = data['content']
-        if not content:
-            error(_("Microblog data's content value must not be empty"))
-            return 3
-        _uuid = unicode(uuid.uuid1())
         _entry = Entry()
         #FIXME: need to escape html
         _entry.title = unicode(content).encode('utf-8')
@@ -129,6 +123,20 @@
         _entry_elt = ElementParser()(str(_entry).decode('utf-8'))
         item = pubsub.Item(payload=_entry_elt)
         item['id'] = _uuid
+        return item
+
+    def sendMicroblog(self, data, profile):
+        """Send XEP-0277's microblog data
+        @param data: must include content
+        @param profile: profile which send the mood"""
+        if not data.has_key('content'):
+            error(_("Microblog data must contain at least 'content' key"))
+            return 3
+        content = data['content']
+        if not content.has_key("content"):
+            error(_("Microblog data's content value must not be empty"))
+            return 3
+        item = self.data2entry(data, profile)
         self.host.plugins["XEP-0060"].publish(None, NS_MICROBLOG, [item], profile_key = profile)
         return 0
 
@@ -150,7 +158,7 @@
         @param access: Node access model, according to xep-0060 #4.5
         @param profile_key: profile key"""
 
-        jid, xmlstream = self.host.getJidNStream(profile_key)
+        _jid, xmlstream = self.host.getJidNStream(profile_key)
         _options = {NS_ACCESS_MODEL:access, NS_PERSIST_ITEMS:1, NS_MAX_ITEMS:-1}
         def cb(result):
             #Node is created with right permission
@@ -164,17 +172,17 @@
             #If the node already exists, the condition is "conflict",
             #else we have an unmanaged error
             if s_error.value.condition=='conflict':
-                #d = self.host.plugins["XEP-0060"].deleteNode(jid.userhostJID(), NS_MICROBLOG, profile_key=profile_key)
+                #d = self.host.plugins["XEP-0060"].deleteNode(_jid.userhostJID(), NS_MICROBLOG, profile_key=profile_key)
                 #d.addCallback(lambda x: create_node().addCallback(cb).addErrback(fatal_err))
                 change_node_options().addCallback(cb).addErrback(fatal_err)
             else:
                 fatal_err(s_error)
         
         def create_node():
-            return self.host.plugins["XEP-0060"].createNode(jid.userhostJID(), NS_MICROBLOG, _options, profile_key=profile_key)
+            return self.host.plugins["XEP-0060"].createNode(_jid.userhostJID(), NS_MICROBLOG, _options, profile_key=profile_key)
         
         def change_node_options():
-            return self.host.plugins["XEP-0060"].setOptions(jid.userhostJID(), NS_MICROBLOG, jid.userhostJID(), _options, profile_key=profile_key)
+            return self.host.plugins["XEP-0060"].setOptions(_jid.userhostJID(), NS_MICROBLOG, _jid.userhostJID(), _options, profile_key=profile_key)
 
         create_node().addCallback(cb).addErrback(err_cb)