From 445c387d8067391f329186a13ce482dbb3c64c80 Mon Sep 17 00:00:00 2001 From: Ragner Magalhaes Date: Tue, 2 Dec 2008 20:50:18 +0000 Subject: [PATCH] Better handling of c/python strings. FIXES: - Better handling of c/python strings. - Updated fixes on nullclient-ecore. Signed-off-by: Bruno Abinader 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 | 51 +++++++++++++++++++++++++++----------------- buddy.pyx | 13 +++++++++-- conversation_cbs.pxd | 24 +++++++++++++++++++-- libpurple/conversation.pxd | 1 + nullclient-ecore.py | 29 +++++++++++++------------ signal_cbs.pxd | 32 ++++++++++++++++----------- 6 files changed, 100 insertions(+), 50 deletions(-) diff --git a/blist_cbs.pxd b/blist_cbs.pxd index 2e535a2..01f68ed 100644 --- a/blist_cbs.pxd +++ b/blist_cbs.pxd @@ -26,11 +26,13 @@ blist_cbs = {} cdef void __group_node_cb(blist.PurpleBlistNode *node, object callback): cdef blist.PurpleGroup *group = node - cdef char *name = NULL + cdef char *c_name = NULL - name = blist.c_purple_group_get_name(group) - if name == NULL: - name = "" + c_name = 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 = node - cdef char *alias = NULL + cdef char *c_alias = NULL - alias = blist.c_purple_contact_get_alias(contact) - if alias == NULL: - alias = "" + c_alias = 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 = node - cdef char *name = NULL - cdef char *alias = NULL + cdef char *c_name = NULL + cdef char *c_alias = NULL - name = blist.c_purple_buddy_get_name(buddy) - if name == NULL: - name = "" - alias = blist.c_purple_buddy_get_alias_only(buddy) - if alias == NULL: - alias = "" + c_name = blist.c_purple_buddy_get_name(buddy) + if c_name == NULL: + name = None + else: + name = c_name + + c_alias = 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 = node - cdef char *name = NULL + cdef char *c_name = NULL - name = blist.c_purple_chat_get_name(chat) - if name == NULL: - name = "" + c_name = blist.c_purple_chat_get_name(chat) + if c_name == NULL: + name = None + else: + name = c_name try: callback(node.type, name) diff --git a/buddy.pyx b/buddy.pyx index 5de38f7..2e1e132 100644 --- 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(\ - self.__acc.c_account, scr, alias) + self.__acc.c_account, c_name, c_alias) diff --git a/conversation_cbs.pxd b/conversation_cbs.pxd index 4f8852a..9cbb6ba 100644 --- a/conversation_cbs.pxd +++ b/conversation_cbs.pxd @@ -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 = 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: - (conversation_cbs["create_conversation"])(conv.name, conv.type) + (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 = account.c_purple_account_get_username(acc) + if c_username == NULL: + username = None + else: + username = c_username + if who: sender = who else: sender = None + try: - (conversation_cbs["write_im"])(conv.account.username, sender, message) + (conversation_cbs["write_im"])(username, sender, message) except KeyError: pass diff --git a/libpurple/conversation.pxd b/libpurple/conversation.pxd index 663d530..3598288 100644 --- a/libpurple/conversation.pxd +++ b/libpurple/conversation.pxd @@ -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) diff --git a/nullclient-ecore.py b/nullclient-ecore.py index 6cba3f8..50e21a0 100644 --- a/nullclient-ecore.py +++ b/nullclient-ecore.py @@ -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) + "
" + def _write_im_cb(self, sender, alias, message): + if alias: + self.txt_area.text += alias + ": " + message + "
" else: - self.txt_area.text += str(name) + ": " + str(message) + "
" + self.txt_area.text += sender + ": " + message + "
" 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" diff --git a/signal_cbs.pxd b/signal_cbs.pxd index 64c66d1..8155b74 100644 --- a/signal_cbs.pxd +++ b/signal_cbs.pxd @@ -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 = blist.c_purple_buddy_get_name(buddy) + if c_name == NULL: + name = None + else: + name = c_name + + c_alias = blist.c_purple_buddy_get_alias_only(buddy) + if c_alias == NULL: + alias = None else: - name = buddy.name + alias = c_alias try: - ( signal_cbs["buddy-signed-off"])(name, buddy.name) + ( 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 = 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 ( signal_cbs["receiving-im-msg"])(sender[0], name, stripped) + return ( signal_cbs["receiving-im-msg"])(sender[0], alias, stripped) except KeyError: return False -- 1.7.9.5