Better handling of c/python strings.
authorRagner Magalhaes <ragner.magalhaes@openbossa.org>
Tue, 2 Dec 2008 20:50:18 +0000 (20:50 +0000)
committerAnderson Briglia <anderson.briglia@openbossa.org>
Sat, 28 Feb 2009 21:11:13 +0000 (17:11 -0400)
FIXES:
 - Better handling of c/python strings.
 - Updated fixes on nullclient-ecore.

Signed-off-by: Bruno Abinader <bruno.abinader@indt.org.br>

git-svn-id: https://garage.maemo.org/svn/carman/branches/carman-0.7-beta2/python-purple@1358 596f6dd7-e928-0410-a184-9e12fd12cf7e

blist_cbs.pxd
buddy.pyx
conversation_cbs.pxd
libpurple/conversation.pxd
nullclient-ecore.py
signal_cbs.pxd

index 2e535a2..01f68ed 100644 (file)
@@ -26,11 +26,13 @@ blist_cbs = {}
 
 cdef void __group_node_cb(blist.PurpleBlistNode *node, object callback):
     cdef blist.PurpleGroup *group = <blist.PurpleGroup *>node
-    cdef char *name = NULL
+    cdef char *c_name = NULL
 
-    name = <char *> blist.c_purple_group_get_name(group)
-    if name == NULL:
-        name = ""
+    c_name = <char *> blist.c_purple_group_get_name(group)
+    if c_name == NULL:
+        name = None
+    else:
+        name = c_name
 
     currentsize = blist.c_purple_blist_get_group_size(group, False)
     totalsize = blist.c_purple_blist_get_group_size(group, True)
@@ -43,11 +45,13 @@ cdef void __group_node_cb(blist.PurpleBlistNode *node, object callback):
 
 cdef void __contact_node_cb(blist.PurpleBlistNode *node, object callback):
     cdef blist.PurpleContact *contact = <blist.PurpleContact *>node
-    cdef char *alias = NULL
+    cdef char *c_alias = NULL
 
-    alias = <char *> blist.c_purple_contact_get_alias(contact)
-    if alias == NULL:
-        alias = ""
+    c_alias = <char *> blist.c_purple_contact_get_alias(contact)
+    if c_alias == NULL:
+        alias = None
+    else:
+        alias = c_alias
 
     try:
         callback(node.type, alias, contact.totalsize, contact.currentsize, \
@@ -57,15 +61,20 @@ cdef void __contact_node_cb(blist.PurpleBlistNode *node, object callback):
 
 cdef void __buddy_node_cb(blist.PurpleBlistNode *node, object callback):
     cdef blist.PurpleBuddy *buddy = <blist.PurpleBuddy *>node
-    cdef char *name = NULL
-    cdef char *alias = NULL
+    cdef char *c_name = NULL
+    cdef char *c_alias = NULL
 
-    name = <char *> blist.c_purple_buddy_get_name(buddy)
-    if name == NULL:
-        name = ""
-    alias = <char *> blist.c_purple_buddy_get_alias_only(buddy)
-    if alias == NULL:
-        alias = ""
+    c_name = <char *> blist.c_purple_buddy_get_name(buddy)
+    if c_name == NULL:
+        name = None
+    else:
+        name = c_name
+
+    c_alias = <char *> blist.c_purple_buddy_get_alias_only(buddy)
+    if c_alias == NULL:
+        alias = None
+    else:
+        alias = c_alias
 
     try:
         callback(node.type, name, alias)
@@ -74,11 +83,13 @@ cdef void __buddy_node_cb(blist.PurpleBlistNode *node, object callback):
 
 cdef void __chat_node_cb(blist.PurpleBlistNode *node, object callback):
     cdef blist.PurpleChat *chat = <blist.PurpleChat *>node
-    cdef char *name = NULL
+    cdef char *c_name = NULL
 
-    name = <char *> blist.c_purple_chat_get_name(chat)
-    if name == NULL:
-        name = ""
+    c_name = <char *> blist.c_purple_chat_get_name(chat)
+    if c_name == NULL:
+        name = None
+    else:
+        name = c_name
 
     try:
         callback(node.type, name)
index 5de38f7..2e1e132 100644 (file)
--- a/buddy.pyx
+++ b/buddy.pyx
@@ -53,7 +53,16 @@ cdef class Buddy:
         return status.c_purple_presence_is_online(blist.c_purple_buddy_get_presence(self.c_buddy))
     online = property(__get_online)
 
-    def new_buddy(self, acc, char *scr, char *alias):
+    def new_buddy(self, acc, name, alias):
         self.__acc = acc
+        cdef char *c_name = NULL
+        cdef char *c_alias = NULL
+
+        if name is not None:
+            c_name = name
+
+        if alias is not None:
+            c_alias = alias
+
         self.c_buddy = blist.c_purple_buddy_new(<account.PurpleAccount *>\
-                self.__acc.c_account, scr, alias)
+                self.__acc.c_account, c_name, c_alias)
index 4f8852a..9cbb6ba 100644 (file)
@@ -29,8 +29,18 @@ conversation_cbs = {}
 cdef void create_conversation (conversation.PurpleConversation *conv):
     debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "conversation",
                          "create_conversation\n")
+    cdef char *c_name = NULL
+
+    c_name = <char *> conversation.c_purple_conversation_get_name(conv)
+    if c_name == NULL:
+        name = None
+    else:
+        name = c_name
+
+    type = conversation.c_purple_conversation_get_type(conv)
+
     try:
-        (<object>conversation_cbs["create_conversation"])(conv.name, conv.type)
+        (<object>conversation_cbs["create_conversation"])(name, type)
     except KeyError:
         pass
 
@@ -56,12 +66,22 @@ cdef void write_im (conversation.PurpleConversation *conv, const_char *who,
                     const_char *message, conversation.PurpleMessageFlags flags,
                     time_t mtime):
     debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "conversation", "write_im\n")
+    cdef account.PurpleAccount *acc = conversation.c_purple_conversation_get_account(conv)
+    cdef char *c_username = NULL
+
+    c_username = <char *> account.c_purple_account_get_username(acc)
+    if c_username == NULL:
+        username = None
+    else:
+        username = c_username
+
     if who:
         sender = <char *> who
     else:
         sender = None
+
     try:
-        (<object>conversation_cbs["write_im"])(conv.account.username, sender, <char *> message)
+        (<object>conversation_cbs["write_im"])(username, sender, <char *> message)
     except KeyError:
         pass
 
index 663d530..3598288 100644 (file)
@@ -163,6 +163,7 @@ cdef extern from "libpurple/conversation.h":
     void c_purple_conversations_set_ui_ops "purple_conversations_set_ui_ops" (PurpleConversationUiOps *ops)
     PurpleConvIm *c_purple_conversation_get_im_data "purple_conversation_get_im_data" (PurpleConversation *conv)
     char *c_purple_conversation_get_name "purple_conversation_get_name" (PurpleConversation *conv)
+    PurpleConversationType c_purple_conversation_get_type "purple_conversation_get_type" (PurpleConversation *conv)
     account.PurpleAccount *c_purple_conversation_get_account "purple_conversation_get_account" (PurpleConversation *conv)
     void c_purple_conv_im_send "purple_conv_im_send" (PurpleConvIm *im, char *message)
     void c_purple_conversation_destroy "purple_conversation_destroy" (PurpleConversation *conv)
index 6cba3f8..50e21a0 100644 (file)
@@ -235,12 +235,11 @@ class MainWindow:
         if callable(cb):
             self.quit_cb = cb
 
-    def _write_im_cb(self, name, who, message):
-        if who:
-            w = who.split("/")[0]
-            self.txt_area.text +=  w + ": " + str(message) + "<br> "
+    def _write_im_cb(self, sender, alias, message):
+        if alias:
+            self.txt_area.text += alias + ": " + message + "<br> "
         else:
-            self.txt_area.text += str(name) + ": " + str(message) + "<br> "
+            self.txt_area.text += sender + ": " + message + "<br> "
         self._window.show_all()
 
 
@@ -251,6 +250,7 @@ class NullClientPurple:
         self.buddies = {} #all buddies
         self.conversations = {}
         self.protocol_id = "prpl-jabber"
+        self.account = None
         self.accs = None
 
 
@@ -274,9 +274,10 @@ class NullClientPurple:
         self.window.add_account_cb(self.add_account)
         self.window.init_window()
 
-    def _purple_update_blist_cb(self, type, name=None, alias=None, totalsize=None,\
-                             currentsize=None, online=None):
-        if type == 2:
+    def _purple_update_blist_cb(self, type, name=None, alias=None, \
+                                totalsize=None, currentsize=None, \
+                                online=None):
+        if self.account and name != None and type == 2:
             if not self.buddies.has_key(name):
                 b = purple.Buddy()
                 b.new_buddy(self.account, name, alias)
@@ -284,12 +285,12 @@ class NullClientPurple:
             elif self.buddies[name].online:
                 self.window.new_buddy(name)
 
-    def _purple_signal_sign_off_cb(self, name, bname):
-        if self.buddies.has_key(bname):
-            self.buddies[bname] = None
-            self.buddies.pop(bname)
+    def _purple_signal_buddy_signed_off_cb(self, name, alias):
+        if self.buddies.has_key(name):
+            self.buddies[name] = None
+            self.buddies.pop(name)
             print "[DEBUG]: Buddy removed!"
-        self.window.remove_buddy(bname)
+        self.window.remove_buddy(name)
 
     def _purple_create_conv_cb(self, name, type):
         bname = name.split("/")[0]
@@ -306,7 +307,7 @@ class NullClientPurple:
             self.account.set_enabled("carman-purple-python", True)
             self.account.password = password
             self.p.connect()
-            self.p.signal_connect("buddy-signed-off", self._purple_signal_sign_off_cb)
+            self.p.signal_connect("buddy-signed-off", self._purple_signal_buddy_signed_off_cb)
 
     def add_account(self):
         username = "carmanplugintest@gmail.com"
index 64c66d1..8155b74 100644 (file)
@@ -22,15 +22,23 @@ cimport purple
 signal_cbs = {}
 
 cdef void signal_buddy_signed_off_cb (blist.PurpleBuddy *buddy):
-    if buddy.server_alias:
-        name = buddy.server_alias
-    elif buddy.alias:
-        name = buddy.alias
+    cdef char *c_name = NULL
+    cdef char *c_alias = NULL
+
+    c_name = <char *> blist.c_purple_buddy_get_name(buddy)
+    if c_name == NULL:
+        name = None
+    else:
+        name = c_name
+
+    c_alias = <char *> blist.c_purple_buddy_get_alias_only(buddy)
+    if c_alias == NULL:
+        alias = None
     else:
-        name = buddy.name
+        alias = c_alias
 
     try:
-        (<object> signal_cbs["buddy-signed-off"])(name, buddy.name)
+        (<object> signal_cbs["buddy-signed-off"])(name, alias)
     except KeyError:
         pass
 
@@ -38,18 +46,18 @@ cdef glib.gboolean signal_receiving_im_msg_cb (account.PurpleAccount *account,
         char **sender, char **message, conversation.PurpleConversation *conv,
         conversation.PurpleMessageFlags *flags):
     cdef blist.PurpleBuddy *buddy = blist.c_purple_find_buddy(account, sender[0])
+    cdef char *c_alias = NULL
 
-    if buddy.server_alias:
-        name = buddy.server_alias
-    elif buddy.alias:
-        name = buddy.alias
+    c_alias = <char *> blist.c_purple_buddy_get_alias_only(buddy)
+    if c_alias == NULL:
+        alias = None
     else:
-        name = buddy.name
+        alias = c_alias
 
     stripped = util.c_purple_markup_strip_html(message[0])
 
     try:
-        return (<object> signal_cbs["receiving-im-msg"])(sender[0], name, stripped)
+        return (<object> signal_cbs["receiving-im-msg"])(sender[0], alias, stripped)
     except KeyError:
         return False