From 663e1ae7b7cea174e57405cde0018bf4a9e20bf8 Mon Sep 17 00:00:00 2001 From: Ragner Magalhaes Date: Tue, 2 Dec 2008 20:44:49 +0000 Subject: [PATCH 01/16] Replaced attach_signals with signal_connect method. (UPDATE) FIXES: - Added libpurple/xmlnode.pxd. - Replaced attach_signals() with signal_connect() method. - Added initial geoloc support from libpurple client (receiving only). Signed-off-by: Bruno Abinader git-svn-id: https://garage.maemo.org/svn/carman/branches/carman-0.7-beta2/python-purple@1346 596f6dd7-e928-0410-a184-9e12fd12cf7e --- libpurple/glib.pxd | 3 +++ libpurple/purple.pxd | 1 + libpurple/xmlnode.pxd | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ nullclient-ecore.py | 18 +----------------- nullclient.py | 28 ++++++++++++++++++++-------- purple.pyx | 41 +++++++++++++++++++++++++++-------------- signal_cbs.pxd | 42 +++++++++++++++++++++--------------------- 7 files changed, 122 insertions(+), 60 deletions(-) create mode 100644 libpurple/xmlnode.pxd diff --git a/libpurple/glib.pxd b/libpurple/glib.pxd index ea71a89..c26168b 100644 --- a/libpurple/glib.pxd +++ b/libpurple/glib.pxd @@ -31,6 +31,7 @@ cdef extern from "glib.h": ctypedef gint gboolean ctypedef gboolean (*GSourceFunc) (gpointer data) ctypedef unsigned int gsize + ctypedef signed int gssize ctypedef char gchar ctypedef unsigned char guchar @@ -90,3 +91,5 @@ cdef extern from "glib.h": gboolean g_main_context_iteration (GMainContext *context, gboolean may_block) gboolean g_source_remove(guint tag) + + gchar *g_markup_escape_text (gchar *text, gssize length) diff --git a/libpurple/purple.pxd b/libpurple/purple.pxd index 41be7bf..e7a76cb 100644 --- a/libpurple/purple.pxd +++ b/libpurple/purple.pxd @@ -44,6 +44,7 @@ cimport status cimport savedstatuses cimport value cimport util +cimport xmlnode cdef extern from "libpurple/purple.h": pass diff --git a/libpurple/xmlnode.pxd b/libpurple/xmlnode.pxd new file mode 100644 index 0000000..cf7d30e --- /dev/null +++ b/libpurple/xmlnode.pxd @@ -0,0 +1,49 @@ +# +# Copyright (c) 2008 INdT - Instituto Nokia de Tecnologia +# +# This file is part of python-purple. +# +# python-purple is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# python-purple is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +cimport glib + +cdef extern from *: + ctypedef int size_t + +cdef extern from "libpurple/xmlnode.h": + ctypedef struct xmlnode + + ctypedef enum XMLNodeType: + XMLNODE_TYPE_TAG + XMLNODE_TYPE_ATTRIB + XMLNODE_TYPE_DATA + + ctypedef struct xmlnode: + char *name + char *xmlns + XMLNodeType type + char *data + size_t data_sz + xmlnode *parent + xmlnode *child + xmlnode *lastchild + xmlnode *next + char *prefix + glib.GHashTable *namespace_map + + xmlnode *xmlnode_get_child(xmlnode *parent, char *name) + char *xmlnode_to_str(xmlnode *node, int *len) + char *xmlnode_get_data(xmlnode *node) + char *xmlnode_get_attrib(xmlnode *node, char *attr) diff --git a/nullclient-ecore.py b/nullclient-ecore.py index 94d8f92..8825af4 100644 --- a/nullclient-ecore.py +++ b/nullclient-ecore.py @@ -9,7 +9,6 @@ conn_cbs = {} conv_cbs = {} notify_cbs = {} request_cbs = {} -signal_cbs = {} def account_callback(name): print "---- account callback example: %s" % name @@ -104,17 +103,6 @@ request_cbs["request_folder"] = request_callback cbs["request"] = request_cbs -def buddy_signed_off_cb(name, bname): - print "---- sign off from buddy %s" % bname - -def receiving_im_msg_cb(sender, name, message): - print "---- receiving IM message from %s: %s" % (name, message) - return False - -#signal_cbs["buddy_signed_off"] = buddy_signed_off_cb -signal_cbs["receiving_im_msg"] = receiving_im_msg_cb - - class MainWindow: def __init__(self, quit_cb): global conv_cbs @@ -239,12 +227,8 @@ class NullClientPurple: self.username = "carmanplugintest@gmail.com" self.password = "abc123def" - global cbs - global signal_cbs cbs["blist"]["update"] = self._purple_update_blist_cb - signal_cbs["buddy_signed_off"] = self._purple_signal_sign_off_cb - cbs["conversation"]["create_conversation"] = self._purple_create_conv_cb self.p.purple_init(cbs) #Initializing UI @@ -283,7 +267,7 @@ class NullClientPurple: self.account.set_enabled("carman-purple-python", True) self.p.connect() - self.p.attach_signals(signal_cbs) + self.p.signal_connect("buddy-signed-off", self._purple_signal_sign_off_cb) def send_msg(self, name, msg): if not self.conversations.has_key(name): diff --git a/nullclient.py b/nullclient.py index 641e034..2904196 100644 --- a/nullclient.py +++ b/nullclient.py @@ -2,6 +2,7 @@ import purple import ecore import getpass import sys +from xml.dom import minidom cbs = {} acc_cbs = {} @@ -10,7 +11,6 @@ conn_cbs = {} conv_cbs = {} notify_cbs = {} request_cbs = {} -signal_cbs = {} def account_callback(name): print "---- account callback example: %s" % name @@ -123,10 +123,13 @@ cbs["connection"] = conn_cbs def conv_callback(name): print "---- conversation callback example: %s" % name +def write_im_cb(name, message): + print "---- (conversation) write_im: %s %s" % (name, message) + conv_cbs["create_conversation"] = conv_callback conv_cbs["destroy_conversation"] = conv_callback conv_cbs["write_chat"] = conv_callback -conv_cbs["write_im"] = conv_callback +conv_cbs["write_im"] = write_im_cb conv_cbs["write_conv"] = conv_callback conv_cbs["chat_add_users"] = conv_callback conv_cbs["chat_rename_user"] = conv_callback @@ -170,14 +173,21 @@ request_cbs["request_folder"] = request_callback cbs["request"] = request_cbs def buddy_signed_off_cb(name): - print "---- sign off from buddy %s" % name + print "---- (signal) sign off from buddy %s" % name def receiving_im_msg_cb(sender, name, message): - print "---- receiving IM message from %s: %s" % (name, message) + print "---- (signal) receiving IM message from %s: %s" % (name, message) return False -signal_cbs["buddy_signed_off"] = buddy_signed_off_cb -signal_cbs["receiving_im_msg"] = receiving_im_msg_cb +def jabber_received_xmlnode_cb(message): + xml = minidom.parse(message) + + for msg in xml.getElementsByTagName("message"): + who = msg.getAttribute("from") + for geoloc in msg.getElementsByTagNameNS("http://jabber.org/protocol/geoloc", "geoloc"): + lat = geoloc.getElementsByTagName("lat")[0].childNodes[0].nodeValue + lon = geoloc.getElementsByTagName("lon")[0].childNodes[0].nodeValue + print "who: %s lat: %s lon: %s" % (who, lat, lon) class NullClient: def __init__(self): @@ -213,14 +223,16 @@ def getpassword(): return getpass.getpass() if __name__ == '__main__': - client = NullClient() client.execute() + client.set_protocol("XMPP") + client.p.signal_connect("buddy-signed-off", buddy_signed_off_cb) + client.p.signal_connect("receiving-im-msg", receiving_im_msg_cb) + client.p.signal_connect("jabber-receiving-xmlnode", jabber_received_xmlnode_cb) username = getuser() password = getpassword() client.new_account(username, password) client.p.connect() - client.p.attach_signals(signal_cbs) ecore.timer_add(20, client.get_buddies) ecore.main_loop_begin() diff --git a/purple.pyx b/purple.pyx index a011ff0..b3ab8b1 100644 --- a/purple.pyx +++ b/purple.pyx @@ -252,21 +252,34 @@ cdef class Purple: conn = Connection() conn.connect() - def attach_signals(self, __signal_cbs=None): - if __signal_cbs is not None: - global signal_cbs - signal_cbs = __signal_cbs - + def signal_connect(self, name=None, cb=None): cdef int handle - - signals.c_purple_signal_connect(blist.c_purple_blist_get_handle(), - "buddy-signed-off", &handle, - signal_buddy_signed_off_cb, NULL) - - signals.c_purple_signal_connect( - conversation.c_purple_conversations_get_handle(), - "receiving-im-msg", &handle, - signal_receiving_im_msg_cb, NULL) + cdef plugin.PurplePlugin *jabber + + if name is None: + return + + jabber = prpl.c_purple_find_prpl("prpl-jabber") + if jabber == NULL: + return + + global signal_cbs + signal_cbs[name] = cb + + if name == "buddy-signed-off": + signals.c_purple_signal_connect( + blist.c_purple_blist_get_handle(), + "buddy-signed-off", &handle, + signal_buddy_signed_off_cb, NULL) + elif name == "receiving-im-msg": + signals.c_purple_signal_connect( + conversation.c_purple_conversations_get_handle(), + "receiving-im-msg", &handle, + signal_receiving_im_msg_cb, NULL) + elif name == "jabber-receiving-xmlnode": + signals.c_purple_signal_connect( + jabber, "jabber-receiving-xmlnode", &handle, + jabber_receiving_xmlnode_cb, NULL) def new_account(self, username, protocol_id): acc = Account(username, protocol_id) diff --git a/signal_cbs.pxd b/signal_cbs.pxd index 4b0885a..64c66d1 100644 --- a/signal_cbs.pxd +++ b/signal_cbs.pxd @@ -22,43 +22,43 @@ cimport purple signal_cbs = {} cdef void signal_buddy_signed_off_cb (blist.PurpleBuddy *buddy): - debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "signal", - "buddy_signed_off\n") - if buddy.server_alias: name = buddy.server_alias + elif buddy.alias: + name = buddy.alias else: - if buddy.alias: - name = buddy.alias - else: - name = buddy.name + name = buddy.name try: - (signal_cbs["buddy_signed_off"])(name, buddy.name) + ( signal_cbs["buddy-signed-off"])(name, buddy.name) except KeyError: pass cdef glib.gboolean signal_receiving_im_msg_cb (account.PurpleAccount *account, - char **sender, - char **message, - conversation.PurpleConversation *conv, - conversation.PurpleMessageFlags *flags): - debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "signal", - "receivinv_im_msg_cb\n") - + char **sender, char **message, conversation.PurpleConversation *conv, + conversation.PurpleMessageFlags *flags): cdef blist.PurpleBuddy *buddy = blist.c_purple_find_buddy(account, sender[0]) if buddy.server_alias: name = buddy.server_alias + elif buddy.alias: + name = buddy.alias else: - if buddy.alias: - name = buddy.alias - else: - name = buddy.name + name = buddy.name - stripped_msg = util.c_purple_markup_strip_html(message[0]) + stripped = util.c_purple_markup_strip_html(message[0]) try: - return (signal_cbs["receiving_im_msg"])(sender[0], name, stripped_msg) + return ( signal_cbs["receiving-im-msg"])(sender[0], name, stripped) except KeyError: return False + +cdef void jabber_receiving_xmlnode_cb (connection.PurpleConnection *gc, + xmlnode.xmlnode **packet, glib.gpointer null): + + message = xmlnode.xmlnode_to_str(packet[0], NULL) + + try: + ( signal_cbs["jabber-receiving-xmlnode"])(message) + except KeyError: + pass -- 1.7.9.5 From 331a01e87b796450c4756c69bb88b45b1c46f9d0 Mon Sep 17 00:00:00 2001 From: Ragner Magalhaes Date: Tue, 2 Dec 2008 20:45:16 +0000 Subject: [PATCH 02/16] Conversation: who added Who variable added to write_im callback. Now, it's possible to know who is sending a message. Take care to check if "who" is not None. Signed-off-by: Anderson Briglia git-svn-id: https://garage.maemo.org/svn/carman/branches/carman-0.7-beta2/python-purple@1347 596f6dd7-e928-0410-a184-9e12fd12cf7e --- conversation.pyx | 1 + conversation_cbs.pxd | 6 +++++- nullclient-ecore.py | 8 ++++++-- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/conversation.pyx b/conversation.pyx index f743e41..6b44c63 100644 --- a/conversation.pyx +++ b/conversation.pyx @@ -81,4 +81,5 @@ cdef class Conversation: conversation.c_purple_conversations_get_handle() def destroy(self): + print "[DEBUG]: Destroy conversation: %s" % self.name conversation.c_purple_conversation_destroy(self.__conv) diff --git a/conversation_cbs.pxd b/conversation_cbs.pxd index 53729d2..4f8852a 100644 --- a/conversation_cbs.pxd +++ b/conversation_cbs.pxd @@ -56,8 +56,12 @@ 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") + if who: + sender = who + else: + sender = None try: - (conversation_cbs["write_im"])(conv.account.username, message) + (conversation_cbs["write_im"])(conv.account.username, sender, message) except KeyError: pass diff --git a/nullclient-ecore.py b/nullclient-ecore.py index 8825af4..cd99eec 100644 --- a/nullclient-ecore.py +++ b/nullclient-ecore.py @@ -211,8 +211,12 @@ class MainWindow: if callable(cb): self.quit_cb = cb - def _write_im_cb(self, name, message): - self.txt_area.text += str(name) + ": " + str(message) + "
" + def _write_im_cb(self, name, who, message): + if who: + w = who.split("/")[0] + self.txt_area.text += w + ": " + str(message) + "
" + else: + self.txt_area.text += str(name) + ": " + str(message) + "
" self._window.show_all() -- 1.7.9.5 From 55de8749720d1245639c903d2fef844d4e61d19e Mon Sep 17 00:00:00 2001 From: Ragner Magalhaes Date: Tue, 2 Dec 2008 20:45:40 +0000 Subject: [PATCH 03/16] Implement purple.Buddy() Implemented Buddy class and some basic methods. Python application using python-purple, now can has a buddy dictionary in format: buddies = {: Buddy()} TODO: Link Buddy() and Account(), maybe using account->ui_data. Signed-off-by: Anderson Briglia git-svn-id: https://garage.maemo.org/svn/carman/branches/carman-0.7-beta2/python-purple@1348 596f6dd7-e928-0410-a184-9e12fd12cf7e --- blist_cbs.pxd | 14 ++++++++------ buddy.pyx | 29 ++++++++++++++++++++++------- nullclient-ecore.py | 17 +++++++++++------ 3 files changed, 41 insertions(+), 19 deletions(-) diff --git a/blist_cbs.pxd b/blist_cbs.pxd index 763cf51..c1830d6 100644 --- a/blist_cbs.pxd +++ b/blist_cbs.pxd @@ -30,7 +30,7 @@ cdef void __group_node_cb(blist.PurpleBlistNode *node, object callback): if group.name: name = group.name else: - name = None + name = "" try: callback(node.type, name, group.totalsize, group.currentsize, \ @@ -44,10 +44,12 @@ cdef void __contact_node_cb(blist.PurpleBlistNode *node, object callback): if contact.alias: alias = contact.alias else: - alias = None + alias = "" + + name = "" try: - callback(node.type, alias, contact.totalsize, contact.currentsize, \ + callback(node.type, name, alias, contact.totalsize, contact.currentsize, \ contact.online) except KeyError: pass @@ -60,12 +62,12 @@ cdef void __buddy_node_cb(blist.PurpleBlistNode *node, object callback): elif buddy.alias: alias = buddy.alias else: - alias = None + alias = "" if buddy.name: name = buddy.name else: - name = None + name = "" try: callback(node.type, name, alias) @@ -78,7 +80,7 @@ cdef void __chat_node_cb(blist.PurpleBlistNode *node, object callback): if chat.alias: alias = chat.alias else: - alias = None + alias = "" try: callback(node.type, alias) diff --git a/buddy.pyx b/buddy.pyx index 8137d26..29c56b8 100644 --- a/buddy.pyx +++ b/buddy.pyx @@ -21,16 +21,31 @@ cimport purple cdef class Buddy: """ Buddy class """ - cdef blist.PurpleBuddy *__buddy + cdef blist.PurpleBuddy *c_buddy + cdef Account __acc def __init__(self): - self.__buddy = NULL + self.c_buddy = NULL def new_buddy(self, acc, char *scr, char *alias): - self.__buddy = blist.c_purple_buddy_new(acc.__account, scr, alias) + self.__acc = acc + self.c_buddy = blist.c_purple_buddy_new(\ + self.__acc.c_account, scr, alias) - def get_alias(self): - return blist.c_purple_buddy_get_alias_only(self.__buddy) + def __get_alias(self): + return blist.c_purple_buddy_get_alias_only(self.c_buddy) + alias = property(__get_alias) + + def __get_name(self): + return blist.c_purple_buddy_get_name(self.c_buddy) + name = property(__get_name) + + def __get_online(self): + name = self.name + self.c_buddy = blist.c_purple_find_buddy(self.__acc.c_account, name) + if status.c_purple_presence_is_online(blist.c_purple_buddy_get_presence(self.c_buddy)): + return True + else: + return False + online = property(__get_online) - def get_name(self): - return blist.c_purple_buddy_get_name(self.__buddy) diff --git a/nullclient-ecore.py b/nullclient-ecore.py index cd99eec..53e970d 100644 --- a/nullclient-ecore.py +++ b/nullclient-ecore.py @@ -224,7 +224,7 @@ class NullClientPurple: def __init__(self): self.p = purple.Purple(debug_enabled=False) self.window = MainWindow(self.quit) - self.buddies = [] #online buddies + self.buddies = {} #all buddies self.conversations = {} self.account = None self.protocol_id = "prpl-jabber" @@ -240,16 +240,21 @@ class NullClientPurple: self.window.add_send_cb(self.send_msg) self.window.init_window() - def _purple_update_blist_cb(self, type, name=None, totalsize=None,\ + def _purple_update_blist_cb(self, type, name=None, alias=None, totalsize=None,\ currentsize=None, online=None): - self.buddies = self.account.get_buddies_online() if type == 2: - if name in self.buddies: - self.buddies.append(name) + if not self.buddies.has_key(name): + b = purple.Buddy() + b.new_buddy(self.account, name, alias) + self.buddies[name] = b + elif self.buddies[name].online is True: self.window.new_buddy(name) def _purple_signal_sign_off_cb(self, name, bname): - self.buddies.remove(bname) + if self.buddies.has_key(bname): + self.buddies[bname] = None + self.buddies.pop(bname) + print "[DEBUG]: Buddy removed!" self.window.remove_buddy(bname) def _purple_create_conv_cb(self, name, type): -- 1.7.9.5 From 5cf9ef61f1ac6ccb0b3eaea65988873baf0a483a Mon Sep 17 00:00:00 2001 From: Ragner Magalhaes Date: Tue, 2 Dec 2008 20:46:22 +0000 Subject: [PATCH 04/16] More fixes to account.pyx and buddy.pyx. FIXES: - Removed ; from account.pyx. - gboolean returning functions can be translated to python boolean values automatically. Signed-off-by: Bruno Abinader git-svn-id: https://garage.maemo.org/svn/carman/branches/carman-0.7-beta2/python-purple@1349 596f6dd7-e928-0410-a184-9e12fd12cf7e --- account.pyx | 7 +++---- buddy.pyx | 6 +----- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/account.pyx b/account.pyx index 033b6bd..5438d24 100644 --- a/account.pyx +++ b/account.pyx @@ -107,21 +107,21 @@ cdef class Account: if self.c_account != NULL: str_value = account.c_purple_account_get_string(self.c_account, setting, str_value) - account.c_purple_account_set_string(self.c_account, setting, str_value ); + account.c_purple_account_set_string(self.c_account, setting, str_value) elif type == prefs.PURPLE_PREF_INT: int_value = accountopt.c_purple_account_option_get_default_int(option) if self.c_account != NULL: int_value = account.c_purple_account_get_int(self.c_account, setting, int_value) if str( setting) == "port": - account.c_purple_account_set_int(self.c_account, setting, 443); + account.c_purple_account_set_int(self.c_account, setting, 443) elif type == prefs.PURPLE_PREF_BOOLEAN: bool_value = accountopt.c_purple_account_option_get_default_bool(option) if self.c_account != NULL: bool_value = account.c_purple_account_get_bool(self.c_account, setting, bool_value) if str( setting) == "old_ssl": - account.c_purple_account_set_bool(self.c_account, setting, True); + account.c_purple_account_set_bool(self.c_account, setting, True) elif type == prefs.PURPLE_PREF_STRING_LIST: str_value = accountopt.c_purple_account_option_get_default_list_value(option) @@ -129,4 +129,3 @@ cdef class Account: str_value = account.c_purple_account_get_string(self.c_account, setting, str_value) iter = iter.next - diff --git a/buddy.pyx b/buddy.pyx index 29c56b8..1c3be6c 100644 --- a/buddy.pyx +++ b/buddy.pyx @@ -43,9 +43,5 @@ cdef class Buddy: def __get_online(self): name = self.name self.c_buddy = blist.c_purple_find_buddy(self.__acc.c_account, name) - if status.c_purple_presence_is_online(blist.c_purple_buddy_get_presence(self.c_buddy)): - return True - else: - return False + return status.c_purple_presence_is_online(blist.c_purple_buddy_get_presence(self.c_buddy)) online = property(__get_online) - -- 1.7.9.5 From b18104778893417ea6ce29ceffe33adb526c86f6 Mon Sep 17 00:00:00 2001 From: Ragner Magalhaes Date: Tue, 2 Dec 2008 20:47:04 +0000 Subject: [PATCH 05/16] Added more properties to account and buddy. FIXES: - Added more properties to account and buddy. - Fixed corresponding core on nullclients. Signed-off-by: Bruno Abinader git-svn-id: https://garage.maemo.org/svn/carman/branches/carman-0.7-beta2/python-purple@1350 596f6dd7-e928-0410-a184-9e12fd12cf7e --- account.pyx | 83 ++++++++++++++++++++++++++++++++++++++++++------- buddy.pyx | 30 ++++++++++++------ libpurple/account.pxd | 35 ++++++++++++++++++--- nullclient-ecore.py | 2 +- nullclient.py | 3 +- 5 files changed, 125 insertions(+), 28 deletions(-) diff --git a/account.pyx b/account.pyx index 5438d24..e569c52 100644 --- a/account.pyx +++ b/account.pyx @@ -45,28 +45,89 @@ cdef class Account: self.__proxy = ProxyInfo() self.__proxy.c_proxyinfo = c_proxyinfo - def set_password(self, password): - account.c_purple_account_set_password(self.c_account, password) - - def set_enabled(self, ui, value): - account.c_purple_account_set_enabled(self.c_account, ui, value) - - def get_acc_username(self): + def __get_username(self): if self.c_account: return account.c_purple_account_get_username(self.c_account) + else: + return None + def __set_username(self, username): + if self.c_account: + account.c_purple_account_set_username(self.c_account, username) + username = property(__get_password, __set_username) - def get_password(self): + def __get_password(self): if self.c_account: return account.c_purple_account_get_password(self.c_account) + else: + return None + def __set_password(self, password): + if self.c_account: + account.c_purple_account_set_password(self.c_account, password) + password = property(__get_password, __set_password) + + def __get_alias(self): + if self.c_account: + return account.c_purple_account_get_alias(self.c_account) + else: + return None + def __set_alias(self, alias): + if self.c_account: + account.c_purple_account_set_alias(self.c_account, alias) + alias = property(__get_alias, __set_alias) + + def __get_user_info(self): + if self.c_account: + return account.c_purple_account_get_user_info(self.c_account) + else: + return None + def __set_user_info(self, user_info): + if self.c_account: + account.c_purple_account_set_user_info(self.c_account, user_info) + user_info = property(__get_user_info, __set_user_info) + + def __get_protocol_id(self): + if self.c_account: + return account.c_purple_account_get_protocol_id(self.c_account) + else: + return None + def __set_protocol_id(self, protocol_id): + if self.c_account: + account.c_purple_account_set_protocol_id(self.c_account, protocol_id) + protocol_id = property(__get_protocol_id, __set_protocol_id) + + def __get_remember_password(self): + if self.c_account: + return account.c_purple_account_get_remember_password(self.c_account) + else: + return None + def __set_remember_password(self, value): + if self.c_account: + account.c_purple_account_set_remember_password(self.c_account, value) + remember_password = property(__get_remember_password, __set_remember_password) + + def get_protocol_name(self): + if self.c_account: + return account.c_purple_account_get_protocol_name(self.c_account) + else: + return None + + def get_enabled(self, ui): + if self.c_account: + return account.c_purple_account_get_enabled(self.c_account, ui) + else: + return None + + def set_enabled(self, ui, value): + if self.c_account: + account.c_purple_account_set_enabled(self.c_account, ui, value) def set_status(self): self.__sstatus = savedstatuses.c_purple_savedstatus_new(NULL, status.PURPLE_STATUS_AVAILABLE) savedstatuses.c_purple_savedstatus_activate(self.__sstatus) - def get_proxy(self): + def __get_proxy(self): return self.__proxy - - proxy = property(get_proxy) + proxy = property(__get_proxy) def get_buddies_online(self): cdef glib.GSList *iter diff --git a/buddy.pyx b/buddy.pyx index 1c3be6c..a465b6f 100644 --- a/buddy.pyx +++ b/buddy.pyx @@ -22,26 +22,38 @@ cimport purple cdef class Buddy: """ Buddy class """ cdef blist.PurpleBuddy *c_buddy - cdef Account __acc + cdef Account _acc def __init__(self): self.c_buddy = NULL - def new_buddy(self, acc, char *scr, char *alias): - self.__acc = acc - self.c_buddy = blist.c_purple_buddy_new(\ - self.__acc.c_account, scr, alias) + def __get_account(self): + return self.__acc + def __set_account(self, acc): + self._acc = acc + account = property(__get_account, __set_account) def __get_alias(self): - return blist.c_purple_buddy_get_alias_only(self.c_buddy) + if self.c_buddy: + return blist.c_purple_buddy_get_alias_only(self.c_buddy) + else: + return None alias = property(__get_alias) def __get_name(self): - return blist.c_purple_buddy_get_name(self.c_buddy) + if self.c_buddy: + return blist.c_purple_buddy_get_name(self.c_buddy) + else: + return None name = property(__get_name) - def __get_online(self): + def __get_online(self): # FIXME name = self.name - self.c_buddy = blist.c_purple_find_buddy(self.__acc.c_account, name) + self.c_buddy = blist.c_purple_find_buddy(self._acc.c_account, name) 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): + self.__acc = acc + self.c_buddy = blist.c_purple_buddy_new(\ + self.__acc.c_account, scr, alias) diff --git a/libpurple/account.pxd b/libpurple/account.pxd index 20b8440..d72b8de 100644 --- a/libpurple/account.pxd +++ b/libpurple/account.pxd @@ -94,14 +94,40 @@ cdef extern from "libpurple/account.h": PurpleAccount *c_purple_account_new "purple_account_new" \ (char *username, char *protocol_id) - void c_purple_account_set_password "purple_account_set_password" \ - (PurpleAccount *account, char *password) + + glib.gboolean c_purple_account_get_enabled "purple_account_get_enabled" \ + (PurpleAccount *account, char *ui) + char *c_purple_account_get_username "purple_account_get_username" \ + (PurpleAccount *account) char *c_purple_account_get_password "purple_account_get_password" \ (PurpleAccount *account) + char *c_purple_account_get_alias "purple_account_get_alias" \ + (PurpleAccount *account) + char *c_purple_account_get_user_info "purple_account_get_user_info" \ + (PurpleAccount *account) + char *c_purple_account_get_protocol_id "purple_account_get_protocol_id" \ + (PurpleAccount *account) + char *c_purple_account_get_protocol_name \ + "purple_account_get_protocol_name" (PurpleAccount *account) + glib.gboolean c_purple_account_get_remember_password \ + "purple_account_get_remember_password" (PurpleAccount *account) + void c_purple_account_set_enabled "purple_account_set_enabled" \ (PurpleAccount *account, char *ui, glib.gboolean value) - char *c_purple_account_get_username "purple_account_get_username" \ - (PurpleAccount *account) + void c_purple_account_set_username "purple_account_set_username" \ + (PurpleAccount *account, char *username) + void c_purple_account_set_password "purple_account_set_password" \ + (PurpleAccount *account, char *password) + void c_purple_account_set_alias "purple_account_set_alias" \ + (PurpleAccount *account, char *alias) + void c_purple_account_set_user_info "purple_account_set_user_info" \ + (PurpleAccount *account, char *user_info) + void c_purple_account_set_protocol_id "purple_account_set_protocol_id" \ + (PurpleAccount *account, char *protocol_id) + void c_purple_account_set_remember_password \ + "purple_account_set_remember_password" (PurpleAccount *account, \ + glib.gboolean value) + glib.GList *c_purple_accounts_get_all_active \ "purple_accounts_get_all_active" () void c_purple_accounts_set_ui_ops "purple_accounts_set_ui_ops" \ @@ -126,4 +152,3 @@ cdef extern from "libpurple/account.h": (PurpleAccount *account, char *name, char *value) void c_purple_account_set_bool "purple_account_set_bool" \ (PurpleAccount *account, char *name, glib.gboolean value) - diff --git a/nullclient-ecore.py b/nullclient-ecore.py index 53e970d..d2df7ff 100644 --- a/nullclient-ecore.py +++ b/nullclient-ecore.py @@ -266,7 +266,7 @@ class NullClientPurple: def connect(self): self.account = purple.Account(self.username, self.protocol_id) - self.account.set_password(self.password) + self.account.password = self.password self.account.proxy.set_type(purple.ProxyInfoType().HTTP) self.account.proxy.set_host("172.18.216.211") diff --git a/nullclient.py b/nullclient.py index 2904196..d4dabc4 100644 --- a/nullclient.py +++ b/nullclient.py @@ -201,7 +201,7 @@ class NullClient: def new_account(self, username, password): self.account = purple.Account(username, self.protocol_id) - self.account.set_password(password) + self.account.password = password self.account.proxy.set_type(purple.ProxyInfoType().HTTP) self.account.proxy.set_host("172.18.216.211") @@ -225,7 +225,6 @@ def getpassword(): if __name__ == '__main__': client = NullClient() client.execute() - client.set_protocol("XMPP") client.p.signal_connect("buddy-signed-off", buddy_signed_off_cb) client.p.signal_connect("receiving-im-msg", receiving_im_msg_cb) client.p.signal_connect("jabber-receiving-xmlnode", jabber_received_xmlnode_cb) -- 1.7.9.5 From 7470d2d07fe34117a3e8928a00fd967159989f27 Mon Sep 17 00:00:00 2001 From: Ragner Magalhaes Date: Tue, 2 Dec 2008 20:47:37 +0000 Subject: [PATCH 06/16] Modified account functions. Modifications: - Fixed account funcions. - Manage intern account dict. - Gets accounts of xml. - Added c_funcions: purple_accounts_find, purple_accounts_get_all and purple_accounts_add. Signed-off-by: Dinorah Monteiro Signed-off-by: Anderson Briglia git-svn-id: https://garage.maemo.org/svn/carman/branches/carman-0.7-beta2/python-purple@1351 596f6dd7-e928-0410-a184-9e12fd12cf7e --- account.pyx | 27 ++++++++++++----- libpurple/account.pxd | 4 +++ nullclient-ecore.py | 79 ++++++++++++++++++++++++++++++++++++++++--------- purple.pyx | 39 ++++++++++++++++++++++++ 4 files changed, 127 insertions(+), 22 deletions(-) diff --git a/account.pyx b/account.pyx index e569c52..d3dbdbf 100644 --- a/account.pyx +++ b/account.pyx @@ -33,17 +33,25 @@ cdef class Account: def __init__(self, char *username, char *protocol_id): cdef proxy.PurpleProxyInfo *c_proxyinfo - self.c_account = account.c_purple_account_new(username, protocol_id) - self.c_plugin = plugin.c_purple_plugins_find_with_id(protocol_id) - self.c_prpl_info = plugin.c_PURPLE_PLUGIN_PROTOCOL_INFO(self.c_plugin) + cdef account.PurpleAccount *acc = NULL - c_proxyinfo = account.c_purple_account_get_proxy_info(self.c_account) - if c_proxyinfo == NULL: - c_proxyinfo = proxy.c_purple_proxy_info_new() - proxy.c_purple_proxy_info_set_type(c_proxyinfo, proxy.PURPLE_PROXY_NONE) - account.c_purple_account_set_proxy_info(self.c_account, c_proxyinfo) + acc = account.c_purple_accounts_find(username, protocol_id) + if acc: + self.c_account = acc + c_proxyinfo = account.c_purple_account_get_proxy_info(self.c_account) + else: + self.c_account = account.c_purple_account_new(username, protocol_id) + c_proxyinfo = account.c_purple_account_get_proxy_info(self.c_account) + if c_proxyinfo == NULL: + c_proxyinfo = proxy.c_purple_proxy_info_new() + proxy.c_purple_proxy_info_set_type(c_proxyinfo, proxy.PURPLE_PROXY_NONE) + account.c_purple_account_set_proxy_info(self.c_account, c_proxyinfo) self.__proxy = ProxyInfo() self.__proxy.c_proxyinfo = c_proxyinfo + acc = NULL + + self.c_plugin = plugin.c_purple_plugins_find_with_id(protocol_id) + self.c_prpl_info = plugin.c_PURPLE_PLUGIN_PROTOCOL_INFO(self.c_plugin) def __get_username(self): if self.c_account: @@ -190,3 +198,6 @@ cdef class Account: str_value = account.c_purple_account_get_string(self.c_account, setting, str_value) iter = iter.next + + def save_into_xml(self): + account.c_purple_accounts_add(self.c_account) diff --git a/libpurple/account.pxd b/libpurple/account.pxd index d72b8de..f0ca879 100644 --- a/libpurple/account.pxd +++ b/libpurple/account.pxd @@ -152,3 +152,7 @@ cdef extern from "libpurple/account.h": (PurpleAccount *account, char *name, char *value) void c_purple_account_set_bool "purple_account_set_bool" \ (PurpleAccount *account, char *name, glib.gboolean value) + PurpleAccount *c_purple_accounts_find "purple_accounts_find" \ + (char *name, char *protocol) + glib.GList *c_purple_accounts_get_all "purple_accounts_get_all" () + void c_purple_accounts_add "purple_accounts_add" (PurpleAccount *account) diff --git a/nullclient-ecore.py b/nullclient-ecore.py index d2df7ff..fdaadd0 100644 --- a/nullclient-ecore.py +++ b/nullclient-ecore.py @@ -108,6 +108,7 @@ class MainWindow: global conv_cbs global signal_cbs self.bt_cbs = {} + self.new_acc_bt_cbs = {} self.send_cbs = {} self.quit_cb = quit_cb conv_cbs["write_im"] = self._write_im_cb @@ -122,13 +123,24 @@ class MainWindow: hbox_cmd.append(self.lcmd, etk.HBox.START, etk.HBox.START, 0) hbox_cmd.append(self.cmd_entry, etk.HBox.START, etk.HBox.EXPAND_FILL, 0) + vbox_accs = etk.VBox() + self.accslistmodel = etk.ListModel() + self.accslist = etk.List(model=self.accslistmodel,\ + columns=[(10, etk.TextRenderer(slot=0),\ + False)], selectable=True,\ + animated_changes=True) + vbox_accs.append(self.accslist, etk.VBox.START, etk.VBox.EXPAND_FILL, 0) + hbox_buttons = etk.HBox(homogeneous=False) send_bt = etk.Button(label="Send") send_bt.on_clicked(self._send_bt_cb) conn_bt = etk.Button(label="Connect") - conn_bt.on_clicked(self._conn_bt_cb) + conn_bt.on_clicked(self.login_window) + new_account_bt = etk.Button(label="New Account") + new_account_bt.on_clicked(self._new_account) hbox_buttons.append(send_bt, etk.HBox.START, etk.HBox.NONE, 0) hbox_buttons.append(conn_bt, etk.HBox.START, etk.HBox.NONE, 0) + hbox_buttons.append(new_account_bt, etk.HBox.START, etk.HBox.NONE, 0) hbox_panel = etk.HBox() @@ -147,6 +159,7 @@ class MainWindow: hbox_panel.append(vbox_txt_area, etk.HBox.START, etk.HBox.EXPAND_FILL, 0) hbox_panel.append(vbox_buddies, etk.HBox.END, etk.HBox.EXPAND_FILL, 0) + hbox_panel.append(vbox_accs, etk.HBox.END, etk.HBox.EXPAND_FILL, 0) self.lstatus = etk.Label(text="Connection status") @@ -160,6 +173,17 @@ class MainWindow: self.set_global_callbacks() self._window.show_all() + def login_window(self, pointer): + self.login_password = etk.Entry() + confirm_login_bt = etk.Button(label="Ok") + confirm_login_bt.on_clicked(self._conn_bt_cb) + vbox_login = etk.VBox() + vbox_login.append(self.login_password, etk.VBox.START, etk.VBox.FILL, 0) + vbox_login.append(confirm_login_bt, etk.VBox.END, etk.VBox.NONE, 0) + self.login_win = etk.Window(title="Password", size_request=(190, 80), + child=vbox_login) + self.login_win.show_all() + def set_global_callbacks(self): global cbs cbs["connection"]["connect_progress"] = self._purple_conn_status_cb @@ -168,7 +192,8 @@ class MainWindow: def _conn_bt_cb(self, pointer): if self.bt_cbs.has_key("on_clicked"): - self.bt_cbs["on_clicked"]() + self.bt_cbs["on_clicked"](self.login_password.text) + self.login_win.destroy() def _send_bt_cb(self, pointer): bname = self.blist.selected_rows[0][0] @@ -180,6 +205,20 @@ class MainWindow: print "Buddy not selected!" self.cmd_entry.text = "" + def selected_accs(self): + try: + acc = self.accslist.selected_rows[0][0] + if acc: + return acc + else: + return "None" + except: + return "None" + + def _new_account(self, pointer): + if self.new_acc_bt_cbs.has_key("on_clicked"): + self.new_acc_bt_cbs["on_clicked"]() + def _purple_conn_status_cb(self, txt, step, step_count): self.lstatus.text = txt @@ -193,6 +232,10 @@ class MainWindow: def remove_buddy(self, bname): self.blistmodel.remove([bname]) + def new_account(self, a): + if [a] not in self.accslistmodel.elements: + self.accslistmodel.append([a]) + def _purple_disconnected_status_cb(self): self.lstatus.text = "Disconnected" @@ -203,6 +246,10 @@ class MainWindow: if callable(cb): self.bt_cbs["on_clicked"] = cb + def add_account_cb(self, cb): + if callable(cb): + self.new_acc_bt_cbs["on_clicked"] = cb + def add_send_cb(self, cb): if callable(cb): self.send_cbs["on_clicked"] = cb @@ -226,18 +273,18 @@ class NullClientPurple: self.window = MainWindow(self.quit) self.buddies = {} #all buddies self.conversations = {} - self.account = None self.protocol_id = "prpl-jabber" - self.username = "carmanplugintest@gmail.com" - self.password = "abc123def" + self.accs = None global cbs cbs["blist"]["update"] = self._purple_update_blist_cb self.p.purple_init(cbs) + self.p.accounts_init() #Initializing UI self.window.add_bt_conn_cb(self.connect) self.window.add_send_cb(self.send_msg) + 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,\ @@ -264,20 +311,24 @@ class NullClientPurple: conv.initialize(self.account, "IM", bname) self.conversations[bname] = conv - def connect(self): - self.account = purple.Account(self.username, self.protocol_id) - self.account.password = self.password - - self.account.proxy.set_type(purple.ProxyInfoType().HTTP) - self.account.proxy.set_host("172.18.216.211") - self.account.proxy.set_port(8080) - + def connect(self, password): + username_acc = self.window.selected_accs() + self.account = self.p.account_verify(username_acc) self.account.get_protocol_options() - 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) + def add_account(self): + username = "carmanplugintest@gmail.com" + host = "172.18.216.211" + port = 8080 + self.p.account_add(username, self.protocol_id, host, port) + self.accs = self.p.accounts_get_dict() + for acc in self.accs.keys(): + self.window.new_account(acc) + def send_msg(self, name, msg): if not self.conversations.has_key(name): conv = purple.Conversation() diff --git a/purple.pyx b/purple.pyx index b3ab8b1..00ce7fc 100644 --- a/purple.pyx +++ b/purple.pyx @@ -62,7 +62,11 @@ cdef class Purple: @parm app_name: Set application name. @parm default_path: Full path for libpurple user files. """ + + cdef object accounts + def __init__(self, debug_enabled=True, app_name=__APP_NAME__, default_path=__DEFAULT_PATH__): + self.accounts = {} if app_name is not __APP_NAME__: __APP_NAME__ = app_name @@ -285,6 +289,41 @@ cdef class Purple: acc = Account(username, protocol_id) return acc + def accounts_init(self): + cdef glib.GList *iter + cdef account.PurpleAccount *acc + iter = account.c_purple_accounts_get_all() + while iter: + acc = iter.data + if acc: + self.account_add(acc.username.split("/")[0], acc.protocol_id, "172.18.216.211", 8080) + iter = iter.next + + def account_add(self, username, protocol_id, host, port): + if not self.account_verify(username): + acc = purple.Account(username, protocol_id) + self.accounts_add_dict(username, acc) + if not account.c_purple_accounts_find(username, protocol_id): + acc.proxy.set_type(purple.ProxyInfoType().HTTP) + acc.proxy.set_host(host) + acc.proxy.set_port(port) + acc.save_into_xml() + else: + print "Exists account" + + def account_verify(self, acc_username): + if self.accounts: + for username in self.accounts.keys(): + if acc_username == username: + return self.accounts[username] + return None + + def accounts_add_dict(self, username, acc): + self.accounts[username] = acc + + def accounts_get_dict(self): + return self.accounts + include "proxy.pyx" include "account.pyx" include "buddy.pyx" -- 1.7.9.5 From 0a6492a9288f6b1e6ec82e17ef0bbde9a014de6b Mon Sep 17 00:00:00 2001 From: Ragner Magalhaes Date: Tue, 2 Dec 2008 20:47:57 +0000 Subject: [PATCH 07/16] Change struct Callbacks * Created a base class for manager callbacks. * Method for add callbacks. Signed-off-by: Ricardo Guimares Signed-off-by: Ragner Magalhaes git-svn-id: https://garage.maemo.org/svn/carman/branches/carman-0.7-beta2/python-purple@1352 596f6dd7-e928-0410-a184-9e12fd12cf7e --- callbackbase.pyx | 12 ++++++++++++ purple.pyx | 9 +++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 callbackbase.pyx diff --git a/callbackbase.pyx b/callbackbase.pyx new file mode 100644 index 0000000..5f6291e --- /dev/null +++ b/callbackbase.pyx @@ -0,0 +1,12 @@ +import purple +import ecore + +class CallBackBase: + def __init__(self, dict_cbs): + self.cbs = dict_cbs + + def add_callback(self, name, func): + self.cbs[name] = func + + def call_callback(self, name): + self.cbs[name] = (data, user) diff --git a/purple.pyx b/purple.pyx index 00ce7fc..889a509 100644 --- a/purple.pyx +++ b/purple.pyx @@ -80,6 +80,7 @@ cdef class Purple: # adds glib iteration inside ecore main loop ecore.timer_add(0.001, self.__glib_iteration_when_idle) + def destroy(self): core.c_purple_core_quit() @@ -141,14 +142,14 @@ cdef class Purple: """ Initializes libpurple """ if callbacks_dict is not None: - global account_cbs + # global account_cbs global blist_cbs global connection_cbs global conversation_cbs global notify_cbs global request_cbs - account_cbs = callbacks_dict["account"] + # account_cbs = callbacks_dict["account"] blist_cbs = callbacks_dict["blist"] connection_cbs = callbacks_dict["connection"] conversation_cbs = callbacks_dict["conversation"] @@ -252,6 +253,10 @@ cdef class Purple: return ret + def add_account_cb(self, name, func): + global account_cbs + account_cbs[name] = func + def connect(self): conn = Connection() conn.connect() -- 1.7.9.5 From 54c3652ebe4f40182214f4f37403ac13fcfeb7ff Mon Sep 17 00:00:00 2001 From: Ragner Magalhaes Date: Tue, 2 Dec 2008 20:48:20 +0000 Subject: [PATCH 08/16] Add support to new callback class Signed-off-by: Ricardo Guimaraes git-svn-id: https://garage.maemo.org/svn/carman/branches/carman-0.7-beta2/python-purple@1353 596f6dd7-e928-0410-a184-9e12fd12cf7e --- callbackbase.pyx | 23 ++++++++++++++++++++--- nullclient-ecore.py | 16 ++++++++-------- purple.pyx | 3 --- 3 files changed, 28 insertions(+), 14 deletions(-) diff --git a/callbackbase.pyx b/callbackbase.pyx index 5f6291e..a6ef6b7 100644 --- a/callbackbase.pyx +++ b/callbackbase.pyx @@ -1,10 +1,27 @@ -import purple -import ecore +# +# Copyright (c) 2008 INdT - Instituto Nokia de Tecnologia +# +# This file is part of python-purple. +# +# python-purple is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# python-purple is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# class CallBackBase: def __init__(self, dict_cbs): self.cbs = dict_cbs - + def add_callback(self, name, func): self.cbs[name] = func diff --git a/nullclient-ecore.py b/nullclient-ecore.py index fdaadd0..351e37c 100644 --- a/nullclient-ecore.py +++ b/nullclient-ecore.py @@ -13,14 +13,6 @@ request_cbs = {} def account_callback(name): print "---- account callback example: %s" % name -acc_cbs["notify_added"] = account_callback -acc_cbs["status_changed"] = account_callback -acc_cbs["request_add"] = account_callback -acc_cbs["request_authorize"] = account_callback -acc_cbs["close_account_request"] = account_callback - -cbs["account"] = acc_cbs - def blist_callback(name): print "---- blist callback example: %s" % name @@ -278,6 +270,14 @@ class NullClientPurple: global cbs cbs["blist"]["update"] = self._purple_update_blist_cb + + self.p.add_account_cb("notify_added", account_callback) + self.p.add_account_cb("status_changed", account_callback) + self.p.add_account_cb("request_add", account_callback) + self.p.add_account_cb("request_authorize", account_callback) + self.p.add_account_cb("close_account_request", account_callback) + + self.p.purple_init(cbs) self.p.accounts_init() diff --git a/purple.pyx b/purple.pyx index 889a509..d4d5383 100644 --- a/purple.pyx +++ b/purple.pyx @@ -80,7 +80,6 @@ cdef class Purple: # adds glib iteration inside ecore main loop ecore.timer_add(0.001, self.__glib_iteration_when_idle) - def destroy(self): core.c_purple_core_quit() @@ -142,14 +141,12 @@ cdef class Purple: """ Initializes libpurple """ if callbacks_dict is not None: - # global account_cbs global blist_cbs global connection_cbs global conversation_cbs global notify_cbs global request_cbs - # account_cbs = callbacks_dict["account"] blist_cbs = callbacks_dict["blist"] connection_cbs = callbacks_dict["connection"] conversation_cbs = callbacks_dict["conversation"] -- 1.7.9.5 From 7765cea20dbc8acb9724ed33db570f8d4f605a59 Mon Sep 17 00:00:00 2001 From: Ragner Magalhaes Date: Tue, 2 Dec 2008 20:48:42 +0000 Subject: [PATCH 09/16] Added binds for functions from libpurple which return structure attributes. FIXES: - Added functions from libpurple which return strutcture attributes, instead of getting them directly. Signed-off-by: Bruno Abinader git-svn-id: https://garage.maemo.org/svn/carman/branches/carman-0.7-beta2/python-purple@1354 596f6dd7-e928-0410-a184-9e12fd12cf7e --- blist_cbs.pxd | 62 +++++++++++++++++++++------------------------------ libpurple/blist.pxd | 8 ++++++- 2 files changed, 33 insertions(+), 37 deletions(-) diff --git a/blist_cbs.pxd b/blist_cbs.pxd index c1830d6..2e535a2 100644 --- a/blist_cbs.pxd +++ b/blist_cbs.pxd @@ -26,48 +26,46 @@ blist_cbs = {} cdef void __group_node_cb(blist.PurpleBlistNode *node, object callback): cdef blist.PurpleGroup *group = node + cdef char *name = NULL - if group.name: - name = group.name - else: + name = blist.c_purple_group_get_name(group) + if name == NULL: name = "" + currentsize = blist.c_purple_blist_get_group_size(group, False) + totalsize = blist.c_purple_blist_get_group_size(group, True) + online = blist.c_purple_blist_get_group_online_count(group) + try: - callback(node.type, name, group.totalsize, group.currentsize, \ - group.online) + callback(node.type, name, totalsize, currentsize, online) except KeyError: pass cdef void __contact_node_cb(blist.PurpleBlistNode *node, object callback): cdef blist.PurpleContact *contact = node + cdef char *alias = NULL - if contact.alias: - alias = contact.alias - else: + alias = blist.c_purple_contact_get_alias(contact) + if alias == NULL: alias = "" - name = "" - try: - callback(node.type, name, alias, contact.totalsize, contact.currentsize, \ + callback(node.type, alias, contact.totalsize, contact.currentsize, \ contact.online) except KeyError: pass cdef void __buddy_node_cb(blist.PurpleBlistNode *node, object callback): cdef blist.PurpleBuddy *buddy = node + cdef char *name = NULL + cdef char *alias = NULL - if buddy.server_alias: - alias = buddy.server_alias - elif buddy.alias: - alias = buddy.alias - else: - alias = "" - - if buddy.name: - name = buddy.name - else: + 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 = "" try: callback(node.type, name, alias) @@ -76,14 +74,14 @@ 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 - if chat.alias: - alias = chat.alias - else: - alias = "" + name = blist.c_purple_chat_get_name(chat) + if name == NULL: + name = "" try: - callback(node.type, alias) + callback(node.type, name) except KeyError: pass @@ -102,7 +100,6 @@ cdef void new_list (blist.PurpleBuddyList *list): cdef void new_node (blist.PurpleBlistNode *node): debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "blist", "new_node\n") - try: if node.type == blist.PURPLE_BLIST_GROUP_NODE: __group_node_cb(node, blist_cbs["new_node"]) @@ -114,8 +111,6 @@ cdef void new_node (blist.PurpleBlistNode *node): __chat_node_cb(node, blist_cbs["new_node"]) elif node.type == blist.PURPLE_BLIST_OTHER_NODE: __other_node_cb(node, blist_cbs["new_node"]) - else: - (blist_cbs["new_node"])(node.type) except KeyError: pass @@ -128,7 +123,6 @@ cdef void show (blist.PurpleBuddyList *list): cdef void update (blist.PurpleBuddyList *list, blist.PurpleBlistNode *node): debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "blist", "update\n") - try: if node.type == blist.PURPLE_BLIST_GROUP_NODE: __group_node_cb(node, blist_cbs["update"]) @@ -140,8 +134,6 @@ cdef void update (blist.PurpleBuddyList *list, blist.PurpleBlistNode *node): __chat_node_cb(node, blist_cbs["update"]) elif node.type == blist.PURPLE_BLIST_OTHER_NODE: __other_node_cb(node, blist_cbs["update"]) - else: - (blist_cbs["update"])(node.type) except KeyError: pass @@ -159,8 +151,6 @@ cdef void remove (blist.PurpleBuddyList *list, blist.PurpleBlistNode *node): __chat_node_cb(node, blist_cbs["remove"]) elif node.type == blist.PURPLE_BLIST_OTHER_NODE: __other_node_cb(node, blist_cbs["remove"]) - else: - (blist_cbs["remove"])(node.type) except KeyError: pass @@ -178,7 +168,7 @@ cdef void set_visible (blist.PurpleBuddyList *list, glib.gboolean show): except KeyError: pass -cdef void request_add_buddy (account.PurpleAccount *account, +cdef void request_add_buddy (account.PurpleAccount *acc, const_char *username, const_char *group, const_char *alias): debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "blist", "request_add_buddy\n") @@ -187,7 +177,7 @@ cdef void request_add_buddy (account.PurpleAccount *account, except KeyError: pass -cdef void request_add_chat (account.PurpleAccount *account, +cdef void request_add_chat (account.PurpleAccount *acc, blist.PurpleGroup *group, const_char *alias, const_char *name): debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "blist", "request_add_chat\n") diff --git a/libpurple/blist.pxd b/libpurple/blist.pxd index c44aea8..4954f3f 100644 --- a/libpurple/blist.pxd +++ b/libpurple/blist.pxd @@ -110,9 +110,15 @@ cdef extern from "libpurple/blist.h": void *c_purple_blist_get_handle "purple_blist_get_handle" () void c_purple_blist_load "purple_blist_load" () PurpleBuddyList* c_purple_blist_new "purple_blist_new" () - PurpleBlistNodeType c_purple_blist_node_get_type "purple_blist_node_get_type" (PurpleBlistNode *node) + PurpleBlistNodeType c_purple_blist_node_get_type \ + "purple_blist_node_get_type" (PurpleBlistNode *node) + int c_purple_blist_get_group_size "purple_blist_get_group_size" \ + (PurpleGroup *group, glib.gboolean offline) + int c_purple_blist_get_group_online_count \ + "purple_blist_get_group_online_count" (PurpleGroup *group) void c_purple_blist_set_ui_ops "purple_blist_set_ui_ops" (PurpleBlistUiOps *ops) const_char *c_purple_chat_get_name "purple_chat_get_name" (PurpleChat *chat) + const_char *c_purple_contact_get_alias "purple_contact_get_alias" (PurpleContact *contact) const_char *c_purple_group_get_name "purple_group_get_name" (PurpleGroup *group) PurpleBuddy *c_purple_buddy_new "purple_buddy_new" (account.PurpleAccount *account, char *screenname, char *alias) -- 1.7.9.5 From 6b8140055af9a85c4089aa9059fc123d8f87b78b Mon Sep 17 00:00:00 2001 From: Ragner Magalhaes Date: Tue, 2 Dec 2008 20:49:02 +0000 Subject: [PATCH 10/16] Updated internal class attributes with correct naming. FIXES: - Now internal class attributes are all private, which can be caught externally using property. Signed-off-by: Bruno Abinader git-svn-id: https://garage.maemo.org/svn/carman/branches/carman-0.7-beta2/python-purple@1355 596f6dd7-e928-0410-a184-9e12fd12cf7e --- buddy.pyx | 6 +++--- conversation.pyx | 31 ++++++++++++++++++++++--------- 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/buddy.pyx b/buddy.pyx index a465b6f..5de38f7 100644 --- a/buddy.pyx +++ b/buddy.pyx @@ -22,7 +22,7 @@ cimport purple cdef class Buddy: """ Buddy class """ cdef blist.PurpleBuddy *c_buddy - cdef Account _acc + cdef Account __acc def __init__(self): self.c_buddy = NULL @@ -30,7 +30,7 @@ cdef class Buddy: def __get_account(self): return self.__acc def __set_account(self, acc): - self._acc = acc + self.__acc = acc account = property(__get_account, __set_account) def __get_alias(self): @@ -49,7 +49,7 @@ cdef class Buddy: def __get_online(self): # FIXME name = self.name - self.c_buddy = blist.c_purple_find_buddy(self._acc.c_account, name) + self.c_buddy = blist.c_purple_find_buddy(self.__acc.c_account, name) return status.c_purple_presence_is_online(blist.c_purple_buddy_get_presence(self.c_buddy)) online = property(__get_online) diff --git a/conversation.pyx b/conversation.pyx index 6b44c63..588f29a 100644 --- a/conversation.pyx +++ b/conversation.pyx @@ -24,35 +24,48 @@ cdef class Conversation: cdef conversation.PurpleConversation *__conv cdef Account __acc - cdef object name + cdef object __name def __init__(self): conversation.c_purple_conversations_init() - self.name = None + self.__name = None + + def __get_account(self): + return self.__acc + def __set_account(self, acc): + self.__acc = acc + account = property(__get_account, __set_account) + + def __get_name(self): + return self.__name + def __set_name(self, name): + self.__name = name + name = property(__get_name, __set_name) def initialize(self, acc, type, char *name): self.__acc = acc + self.__name = name + if type == "UNKNOWN": self.__conv =\ conversation.c_purple_conversation_new(conversation.PURPLE_CONV_TYPE_UNKNOWN,\ - self.__acc.c_account, name) + self.__acc.c_account, self.__name) elif type == "IM": self.__conv =\ conversation.c_purple_conversation_new(conversation.PURPLE_CONV_TYPE_IM,\ - self.__acc.c_account, name) + self.__acc.c_account, self.__name) elif type == "CHAT": self.__conv =\ conversation.c_purple_conversation_new(conversation.PURPLE_CONV_TYPE_CHAT,\ - self.__acc.c_account, name) + self.__acc.c_account, self.__name) elif type == "MISC": self.__conv =\ conversation.c_purple_conversation_new(conversation.PURPLE_CONV_TYPE_MISC,\ - self.__acc.c_account, name) + self.__acc.c_account, self.__name) elif type == "ANY": self.__conv =\ conversation.c_purple_conversation_new(conversation.PURPLE_CONV_TYPE_ANY,\ - self.__acc.c_account, name) - self.name = name + self.__acc.c_account, self.__name) def conversation_set_ui_ops(self): cdef conversation.PurpleConversationUiOps c_conv_ui_ops @@ -81,5 +94,5 @@ cdef class Conversation: conversation.c_purple_conversations_get_handle() def destroy(self): - print "[DEBUG]: Destroy conversation: %s" % self.name + print "[DEBUG]: Destroy conversation: %s" % self.__name conversation.c_purple_conversation_destroy(self.__conv) -- 1.7.9.5 From 2bfa6c6897898733546439b42a20da25f3f8a62f Mon Sep 17 00:00:00 2001 From: Ragner Magalhaes Date: Tue, 2 Dec 2008 20:49:26 +0000 Subject: [PATCH 11/16] More fixes on purple.pyx. FIXES: - accounts dict is now private. - load_accounts is now called inside purple_init. - Internal PurpleAccount data is now caught using libpurple functions. - Fixed some logic in account_add and account_verify. - Updated changes on nullclient.py and nullclient-ecore.py. Signed-off-by: Bruno Abinader git-svn-id: https://garage.maemo.org/svn/carman/branches/carman-0.7-beta2/python-purple@1356 596f6dd7-e928-0410-a184-9e12fd12cf7e --- nullclient-ecore.py | 24 +++++++++++------------- nullclient.py | 1 - purple.pyx | 36 +++++++++++++++++++----------------- 3 files changed, 30 insertions(+), 31 deletions(-) diff --git a/nullclient-ecore.py b/nullclient-ecore.py index 351e37c..72cc655 100644 --- a/nullclient-ecore.py +++ b/nullclient-ecore.py @@ -203,9 +203,9 @@ class MainWindow: if acc: return acc else: - return "None" + return None except: - return "None" + return None def _new_account(self, pointer): if self.new_acc_bt_cbs.has_key("on_clicked"): @@ -277,9 +277,7 @@ class NullClientPurple: self.p.add_account_cb("request_authorize", account_callback) self.p.add_account_cb("close_account_request", account_callback) - self.p.purple_init(cbs) - self.p.accounts_init() #Initializing UI self.window.add_bt_conn_cb(self.connect) @@ -294,7 +292,7 @@ class NullClientPurple: b = purple.Buddy() b.new_buddy(self.account, name, alias) self.buddies[name] = b - elif self.buddies[name].online is True: + elif self.buddies[name].online: self.window.new_buddy(name) def _purple_signal_sign_off_cb(self, name, bname): @@ -313,19 +311,20 @@ class NullClientPurple: def connect(self, password): username_acc = self.window.selected_accs() - self.account = self.p.account_verify(username_acc) - self.account.get_protocol_options() - 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) + if username_acc: + self.account = self.p.account_verify(username_acc) + self.account.get_protocol_options() + 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) def add_account(self): username = "carmanplugintest@gmail.com" host = "172.18.216.211" port = 8080 self.p.account_add(username, self.protocol_id, host, port) - self.accs = self.p.accounts_get_dict() + self.accs = self.p.accounts for acc in self.accs.keys(): self.window.new_account(acc) @@ -346,6 +345,5 @@ class NullClientPurple: ecore.main_loop_quit() if __name__ == '__main__': - nullpurple = NullClientPurple() ecore.main_loop_begin() diff --git a/nullclient.py b/nullclient.py index d4dabc4..a79f3da 100644 --- a/nullclient.py +++ b/nullclient.py @@ -230,7 +230,6 @@ if __name__ == '__main__': client.p.signal_connect("jabber-receiving-xmlnode", jabber_received_xmlnode_cb) username = getuser() password = getpassword() - client.new_account(username, password) client.p.connect() ecore.timer_add(20, client.get_buddies) diff --git a/purple.pyx b/purple.pyx index d4d5383..36e01de 100644 --- a/purple.pyx +++ b/purple.pyx @@ -63,10 +63,10 @@ cdef class Purple: @parm default_path: Full path for libpurple user files. """ - cdef object accounts + cdef object __accounts def __init__(self, debug_enabled=True, app_name=__APP_NAME__, default_path=__DEFAULT_PATH__): - self.accounts = {} + self.__accounts = {} if app_name is not __APP_NAME__: __APP_NAME__ = app_name @@ -248,6 +248,9 @@ cdef class Purple: # load pounces pounce.c_purple_pounces_load() + # initialize accounts + self.load_accounts() + return ret def add_account_cb(self, name, func): @@ -287,44 +290,43 @@ cdef class Purple: jabber, "jabber-receiving-xmlnode", &handle, jabber_receiving_xmlnode_cb, NULL) + def __get_accounts(self): + return self.__accounts + accounts = property(__get_accounts) + def new_account(self, username, protocol_id): acc = Account(username, protocol_id) return acc - def accounts_init(self): + def load_accounts(self): cdef glib.GList *iter cdef account.PurpleAccount *acc iter = account.c_purple_accounts_get_all() while iter: acc = iter.data if acc: - self.account_add(acc.username.split("/")[0], acc.protocol_id, "172.18.216.211", 8080) + username = account.c_purple_account_get_username(acc) + protocol_id = account.c_purple_account_get_protocol_id(acc) + self.account_add(username.split("/")[0], protocol_id, "172.18.216.211", 8080) iter = iter.next def account_add(self, username, protocol_id, host, port): if not self.account_verify(username): acc = purple.Account(username, protocol_id) - self.accounts_add_dict(username, acc) + self.__accounts[username] = acc if not account.c_purple_accounts_find(username, protocol_id): acc.proxy.set_type(purple.ProxyInfoType().HTTP) acc.proxy.set_host(host) acc.proxy.set_port(port) acc.save_into_xml() - else: - print "Exists account" def account_verify(self, acc_username): - if self.accounts: - for username in self.accounts.keys(): + if self.__accounts: + for username in self.__accounts.keys(): if acc_username == username: - return self.accounts[username] - return None - - def accounts_add_dict(self, username, acc): - self.accounts[username] = acc - - def accounts_get_dict(self): - return self.accounts + return self.__accounts[username] + else: + return None include "proxy.pyx" include "account.pyx" -- 1.7.9.5 From dd446d6d03c2c550010993a4e949007c242ecbe7 Mon Sep 17 00:00:00 2001 From: Ragner Magalhaes Date: Tue, 2 Dec 2008 20:49:46 +0000 Subject: [PATCH 12/16] Struct Callbacks for blist_cb. (UPDATE) FIXES: - Add blist_cb on nullclient-ecore. - Add new struct callbacks for blist_cb on purple.pyx. Signed-off-by: Ricardo Guimaraes Signed-off-by: Ragner Magalhaes git-svn-id: https://garage.maemo.org/svn/carman/branches/carman-0.7-beta2/python-purple@1357 596f6dd7-e928-0410-a184-9e12fd12cf7e --- nullclient-ecore.py | 23 ++++++----------------- purple.pyx | 6 ++++-- 2 files changed, 10 insertions(+), 19 deletions(-) diff --git a/nullclient-ecore.py b/nullclient-ecore.py index 72cc655..6cba3f8 100644 --- a/nullclient-ecore.py +++ b/nullclient-ecore.py @@ -3,8 +3,6 @@ import ecore import purple cbs = {} -acc_cbs = {} -blist_cbs = {} conn_cbs = {} conv_cbs = {} notify_cbs = {} @@ -16,19 +14,6 @@ def account_callback(name): def blist_callback(name): print "---- blist callback example: %s" % name -#blist_cbs["new_list"] = blist_callback -#blist_cbs["new_node"] = blist_callback -#blist_cbs["show"] = blist_callback -#blist_cbs["update"] = blist_callback -#blist_cbs["remove"] = blist_callback -#blist_cbs["destroy"] = blist_callback -blist_cbs["set_visible"] = blist_callback -blist_cbs["request_add_buddy"] = blist_callback -blist_cbs["request_add_chat"] = blist_callback -blist_cbs["request_add_group"] = blist_callback - -cbs["blist"] = blist_cbs - def conn_callback(name): print "---- connection callback example: %s" % name @@ -268,8 +253,6 @@ class NullClientPurple: self.protocol_id = "prpl-jabber" self.accs = None - global cbs - cbs["blist"]["update"] = self._purple_update_blist_cb self.p.add_account_cb("notify_added", account_callback) self.p.add_account_cb("status_changed", account_callback) @@ -277,6 +260,12 @@ class NullClientPurple: self.p.add_account_cb("request_authorize", account_callback) self.p.add_account_cb("close_account_request", account_callback) + self.p.add_blist_cb("set_visible", blist_callback) + self.p.add_blist_cb("request_add_buddy", blist_callback) + self.p.add_blist_cb("request_add_chat", blist_callback) + self.p.add_blist_cb("request_add_group", blist_callback) + self.p.add_blist_cb("update", self._purple_update_blist_cb) + self.p.purple_init(cbs) #Initializing UI diff --git a/purple.pyx b/purple.pyx index 36e01de..54be931 100644 --- a/purple.pyx +++ b/purple.pyx @@ -141,13 +141,11 @@ cdef class Purple: """ Initializes libpurple """ if callbacks_dict is not None: - global blist_cbs global connection_cbs global conversation_cbs global notify_cbs global request_cbs - blist_cbs = callbacks_dict["blist"] connection_cbs = callbacks_dict["connection"] conversation_cbs = callbacks_dict["conversation"] notify_cbs = callbacks_dict["notify"] @@ -257,6 +255,10 @@ cdef class Purple: global account_cbs account_cbs[name] = func + def add_blist_cb(self, name, func): + global blist_cbs + blist_cbs[name] = func + def connect(self): conn = Connection() conn.connect() -- 1.7.9.5 From 445c387d8067391f329186a13ce482dbb3c64c80 Mon Sep 17 00:00:00 2001 From: Ragner Magalhaes Date: Tue, 2 Dec 2008 20:50:18 +0000 Subject: [PATCH 13/16] 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 From f0ff8c3ffbd828fbdc0963c8c4744c94363f40a7 Mon Sep 17 00:00:00 2001 From: Ragner Magalhaes Date: Tue, 2 Dec 2008 20:50:59 +0000 Subject: [PATCH 14/16] Updated callback strings to comply with libpurple. FIXES: - Updated callback strings (replaced underscores with minus symbol). - Now all UiOps callbacks are added using add_callback(type, name, func). - Updated changes on nullclient-ecore.py. - Added receiving-xmlnode example on nullclient-ecore.py. - Removed deprecated nullclient.py Signed-off-by: Bruno Abinader git-svn-id: https://garage.maemo.org/svn/carman/branches/carman-0.7-beta2/python-purple@1359 596f6dd7-e928-0410-a184-9e12fd12cf7e --- account_cbs.pxd | 20 ++--- blist_cbs.pxd | 16 ++-- connection_cbs.pxd | 26 +++--- conversation_cbs.pxd | 58 ++++++------- notify_cbs.pxd | 36 ++++---- nullclient-ecore.py | 198 +++++++++++++----------------------------- nullclient.py | 236 -------------------------------------------------- purple.pyx | 33 ++++--- request_cbs.pxd | 28 +++--- 9 files changed, 166 insertions(+), 485 deletions(-) delete mode 100644 nullclient.py diff --git a/account_cbs.pxd b/account_cbs.pxd index e2c2d7b..238ecc6 100644 --- a/account_cbs.pxd +++ b/account_cbs.pxd @@ -28,18 +28,18 @@ cdef void notify_added (account.PurpleAccount *account, const_char *remote_user, const_char *id, const_char *alias, const_char *message): debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "account", - "notify_added\n") + "notify-added\n") try: - (account_cbs["notify_added"])("notify_added") + (account_cbs["notify-added"])("notify-added: TODO") except KeyError: pass cdef void status_changed (account.PurpleAccount *account, status.PurpleStatus *status): debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "account", - "status_changed\n") + "status-changed\n") try: - (account_cbs["status_changed"])("status_changed") + (account_cbs["status-changed"])("status-changed: TODO") except KeyError: pass @@ -47,9 +47,9 @@ cdef void request_add (account.PurpleAccount *account, const_char *remote_user, const_char *id, const_char *alias, const_char *message): debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "account", - "request_add\n") + "request-add\n") try: - (account_cbs["request_add"])("request_add") + (account_cbs["request-add"])("request-add: TODO") except KeyError: pass @@ -61,17 +61,17 @@ cdef void *request_authorize (account.PurpleAccount *account, account.PurpleAccountRequestAuthorizationCb deny_cb, void *user_data): debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "account", - "request_authorize\n") + "request-authorize\n") try: - (account_cbs["request_authorize"])("request_authorize") + (account_cbs["request-authorize"])("request-authorize: TODO") return NULL except KeyError: pass cdef void close_account_request (void *ui_handle): debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "account", - "close_account_request\n") + "close-account-request\n") try: - (account_cbs["close_account_request"])("close_account_request") + (account_cbs["close-account-request"])("close-account-request: TODO") except KeyError: pass diff --git a/blist_cbs.pxd b/blist_cbs.pxd index 01f68ed..52847dc 100644 --- a/blist_cbs.pxd +++ b/blist_cbs.pxd @@ -128,7 +128,7 @@ cdef void new_node (blist.PurpleBlistNode *node): cdef void show (blist.PurpleBuddyList *list): debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "blist", "show\n") try: - (blist_cbs["show"])("show") + (blist_cbs["show"])("show: TODO") except KeyError: pass @@ -168,23 +168,23 @@ cdef void remove (blist.PurpleBuddyList *list, blist.PurpleBlistNode *node): cdef void destroy (blist.PurpleBuddyList *list): debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "blist", "destroy\n") try: - (blist_cbs["destroy"])("destroy") + (blist_cbs["destroy"])("destroy: TODO") except KeyError: pass cdef void set_visible (blist.PurpleBuddyList *list, glib.gboolean show): - debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "blist", "set_visible\n") + debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "blist", "set-visible\n") try: - (blist_cbs["set_visible"])("set_visible") + (blist_cbs["set_visible"])("set-visible: TODO") except KeyError: pass cdef void request_add_buddy (account.PurpleAccount *acc, const_char *username, const_char *group, const_char *alias): - debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "blist", "request_add_buddy\n") + debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "blist", "request-add-buddy\n") try: - (blist_cbs["request_add_buddy"])("request_add_buddy") + (blist_cbs["request-add-buddy"])("request-add-buddy: TODO") except KeyError: pass @@ -193,13 +193,13 @@ cdef void request_add_chat (account.PurpleAccount *acc, const_char *name): debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "blist", "request_add_chat\n") try: - (blist_cbs["request_add_chat"])("request_add_chat") + (blist_cbs["request-add-chat"])("request-add-chat: TODO") except KeyError: pass cdef void request_add_group (): debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "blist", "request_add_group\n") try: - (blist_cbs["request_add_chat"])("request_add_group") + (blist_cbs["request-add-chat"])("request-add-group: TODO") except KeyError: pass diff --git a/connection_cbs.pxd b/connection_cbs.pxd index ea707e6..fd0d05a 100644 --- a/connection_cbs.pxd +++ b/connection_cbs.pxd @@ -27,9 +27,9 @@ cdef extern from *: cdef void connect_progress (connection.PurpleConnection *gc, const_char *text, size_t step, size_t step_count): debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "connection", - "connect_progress\n") + "connect-progress\n") try: - (connection_cbs["connect_progress"])(text, step, step_count) + (connection_cbs["connect-progress"])(text, step, step_count) except KeyError: pass @@ -37,7 +37,7 @@ cdef void connected (connection.PurpleConnection *gc): debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "connection", "connected\n") try: - (connection_cbs["connected"])() + (connection_cbs["connected"])("connected: TODO") except KeyError: pass @@ -45,7 +45,7 @@ cdef void disconnected (connection.PurpleConnection *gc): debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "connection", "disconnected\n") try: - (connection_cbs["disconnected"])() + (connection_cbs["disconnected"])("disconnected: TODO") except KeyError: pass @@ -53,32 +53,32 @@ cdef void notice (connection.PurpleConnection *gc, const_char *text): debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "connection", "notice\n") try: - (connection_cbs["notice"])("notice") + (connection_cbs["notice"])("notice: TODO") except KeyError: pass cdef void report_disconnect (connection.PurpleConnection *gc, const_char *text): debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "connection", - "report_disconnect\n") + "report-disconnect\n") try: - (connection_cbs["report_disconnect"])(text) + (connection_cbs["report-disconnect"])(text) except KeyError: pass cdef void network_connected (): debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "connection", - "network_connected\n") + "network-connected\n") try: - (connection_cbs["network_connected"])("network_connected") + (connection_cbs["network-connected"])("network-connected: TODO") except KeyError: pass cdef void network_disconnected (): debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "connection", - "network_disconnected\n") + "network-disconnected\n") try: - (connection_cbs["network_disconnected"])("network_disconnected") + (connection_cbs["network-disconnected"])("network-disconnected: TODO") except KeyError: pass @@ -86,7 +86,7 @@ cdef void report_disconnect_reason (connection.PurpleConnection *gc, connection.PurpleConnectionError reason, const_char *text): debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "connection", - "report_disconnect_reason\n") + "report-disconnect-reason\n") reason_string = { 0: 'Network error', @@ -108,6 +108,6 @@ cdef void report_disconnect_reason (connection.PurpleConnection *gc, 16: 'Other error' }[reason] try: - (connection_cbs["report_disconnect_reason"])(reason_string, text) + (connection_cbs["report-disconnect-reason"])(reason_string, text) except KeyError: pass diff --git a/conversation_cbs.pxd b/conversation_cbs.pxd index 9cbb6ba..1a4aefe 100644 --- a/conversation_cbs.pxd +++ b/conversation_cbs.pxd @@ -28,7 +28,7 @@ conversation_cbs = {} cdef void create_conversation (conversation.PurpleConversation *conv): debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "conversation", - "create_conversation\n") + "create-conversation\n") cdef char *c_name = NULL c_name = conversation.c_purple_conversation_get_name(conv) @@ -40,15 +40,15 @@ cdef void create_conversation (conversation.PurpleConversation *conv): type = conversation.c_purple_conversation_get_type(conv) try: - (conversation_cbs["create_conversation"])(name, type) + (conversation_cbs["create-conversation"])(name, type) except KeyError: pass cdef void destroy_conversation (conversation.PurpleConversation *conv): debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "conversation", - "destroy_conversation\n") + "destroy-conversation\n") try: - (conversation_cbs["destroy_conversation"])("destroy_conversation") + (conversation_cbs["destroy-conversation"])("destroy-conversation: TODO") except KeyError: pass @@ -56,16 +56,16 @@ cdef void write_chat (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_chat\n") + "write-chat\n") try: - (conversation_cbs["write_chat"])("write_chat") + (conversation_cbs["write-chat"])("write-chat: TODO") except KeyError: pass 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") + 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 @@ -81,7 +81,7 @@ cdef void write_im (conversation.PurpleConversation *conv, const_char *who, sender = None try: - (conversation_cbs["write_im"])(username, sender, message) + (conversation_cbs["write-im"])(username, sender, message) except KeyError: pass @@ -89,18 +89,18 @@ cdef void write_conv (conversation.PurpleConversation *conv, const_char *name, const_char *alias, const_char *message, conversation.PurpleMessageFlags flags, time_t mtime): debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "conversation", - "write_conv\n") + "write-conv\n") try: - (conversation_cbs["write_conv"])("write_conv") + (conversation_cbs["write-conv"])("write-conv: TODO") except KeyError: pass cdef void chat_add_users (conversation.PurpleConversation *conv, glib.GList *cbuddies, glib.gboolean new_arrivals): debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "conversation", - "chat_add_users\n") + "chat-add-users\n") try: - (conversation_cbs["chat_add_users"])("chat_add_users") + (conversation_cbs["chat-add-users"])("chat-add-users: TODO") except KeyError: pass @@ -108,27 +108,27 @@ cdef void chat_rename_user (conversation.PurpleConversation *conv, const_char *old_name, const_char *new_name, const_char *new_alias): debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "conversation", - "chat_rename_user\n") + "chat-rename-user\n") try: - (conversation_cbs["chat_rename_user"])("chat_rename_user") + (conversation_cbs["chat-rename-user"])("chat-rename-user: TODO") except KeyError: pass cdef void chat_remove_users (conversation.PurpleConversation *conv, glib.GList *users): debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "conversation", - "chat_remove_users\n") + "chat-remove-users\n") try: - (conversation_cbs["chat_remove_users"])("chat_remove_users") + (conversation_cbs["chat-remove-users"])("chat-remove-users: TODO") except KeyError: pass cdef void chat_update_user (conversation.PurpleConversation *conv, const_char *user): debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "conversation", - "chat_update_user\n") + "chat-update-user\n") try: - (conversation_cbs["chat_update_user"])("chat_update_user") + (conversation_cbs["chat-update-user"])("chat-update-user: TODO") except KeyError: pass @@ -136,15 +136,15 @@ cdef void present (conversation.PurpleConversation *conv): debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "conversation", "present\n") try: - (conversation_cbs["present"])("present") + (conversation_cbs["present"])("present: TODO") except KeyError: pass cdef glib.gboolean has_focus (conversation.PurpleConversation *conv): debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "conversation", - "has_focus\n") + "has-focus\n") try: - (conversation_cbs["has_focus"])("has_focus") + (conversation_cbs["has-focus"])("has-focus: TODO") return False except KeyError: return False @@ -152,9 +152,9 @@ cdef glib.gboolean has_focus (conversation.PurpleConversation *conv): cdef glib.gboolean custom_smiley_add (conversation.PurpleConversation *conv, const_char *smile, glib.gboolean remote): debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "conversation", - "custom_smiley_add\n") + "custom-smiley-add\n") try: - (conversation_cbs["custom_smiley_add"])("custom_smiley_add") + (conversation_cbs["custom-smiley-add"])("custom-smiley-add: TODO") return False except KeyError: return False @@ -163,9 +163,9 @@ cdef void custom_smiley_write (conversation.PurpleConversation *conv, const_char *smile, const_guchar *data, glib.gsize size): debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "conversation", - "custom_smiley_write\n") + "custom-smiley-write\n") try: - (conversation_cbs["custom_smiley_write"])("custom_smiley_write") + (conversation_cbs["custom-smiley-write"])("custom-smiley-write: TODO") except KeyError: pass @@ -173,17 +173,17 @@ cdef void custom_smiley_write (conversation.PurpleConversation *conv, cdef void custom_smiley_close (conversation.PurpleConversation *conv, const_char *smile): debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "conversation", - "custom_smiley_close\n") + "custom-smiley-close\n") try: - (conversation_cbs["custom_smiley_close"])("custom_smiley_close") + (conversation_cbs["custom-smiley-close"])("custom-smiley-close: TODO") except KeyError: pass cdef void send_confirm (conversation.PurpleConversation *conv, const_char *message): debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "conversation", - "send_confirm\n") + "send-confirm\n") try: - (conversation_cbs["send_confirm"])("send_confirm") + (conversation_cbs["send-confirm"])("send-confirm: TODO") except KeyError: pass diff --git a/notify_cbs.pxd b/notify_cbs.pxd index d029ef9..ed6dbd6 100644 --- a/notify_cbs.pxd +++ b/notify_cbs.pxd @@ -27,17 +27,17 @@ cdef extern from *: cdef void *notify_message (notify.PurpleNotifyMsgType type, const_char *title, const_char *primary, const_char *secondary): - debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "notify", "notify_message\n") + debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "notify", "notify-message\n") try: - (notify_cbs["notify_message"])("notify_message") + (notify_cbs["notify-message"])("notify-message: TODO") except KeyError: pass cdef void *notify_email (connection.PurpleConnection *gc, const_char *subject, const_char *_from, const_char *to, const_char *url): - debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "notify", "notify_email\n") + debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "notify", "notify-email\n") try: - (notify_cbs["notify_email"])("notify_email") + (notify_cbs["notify-email"])("notify-email: TODO") except KeyError: pass @@ -45,17 +45,17 @@ cdef void *notify_emails (connection.PurpleConnection *gc, size_t count, glib.gboolean detailed, const_char **subjects, const_char **froms, const_char **tos, const_char **urls): - debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "notify", "notify_emails\n") + debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "notify", "notify-emails\n") try: - (notify_cbs["notify_emails"])("notify_emails") + (notify_cbs["notify-emails"])("notify-emails: TODO") except KeyError: pass cdef void *notify_formatted (const_char *title, const_char *primary, const_char *secondary, const_char *text): - debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "notify", "notify_formatted\n") + debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "notify", "notify-formatted\n") try: - (notify_cbs["notify_formatted"])("notify_formatted") + (notify_cbs["notify-formatted"])("notify-formatted: TODO") except KeyError: pass @@ -65,9 +65,9 @@ cdef void *notify_searchresults (connection.PurpleConnection *gc, notify.PurpleNotifySearchResults *results, glib.gpointer user_data): debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "notify", - "notify_searchresults\n") + "notify-searchresults\n") try: - (notify_cbs["notify_searchresults"])("notify_searchresults") + (notify_cbs["notify-searchresults"])("notify-searchresults: TODO") except KeyError: pass @@ -75,30 +75,30 @@ cdef void notify_searchresults_new_rows (connection.PurpleConnection *gc, notify.PurpleNotifySearchResults *results, void *data): debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "notify", - "notify_searchresults_new_rows\n") + "notify-searchresults-new-rows\n") try: - (notify_cbs["notify_searchresults_new_rows"])("notify_searchresults_new_rows") + (notify_cbs["notify-searchresults-new-rows"])("notify-searchresults-new-rows: TODO") except KeyError: pass cdef void *notify_userinfo (connection.PurpleConnection *gc, const_char *who, notify.PurpleNotifyUserInfo *user_info): - debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "notify", "notify_userinfo\n") + debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "notify", "notify-userinfo\n") try: - (notify_cbs["notify_userinfo"])("notify_userinfo") + (notify_cbs["notify-userinfo"])("notify-userinfo: TODO") except KeyError: pass cdef void *notify_uri (const_char *uri): - debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "notify", "notify_uri\n") + debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "notify", "notify-uri\n") try: - (notify_cbs["notify_uri"])("notify_uri") + (notify_cbs["notify-uri"])("notify-uri: TODO") except KeyError: pass cdef void close_notify (notify.PurpleNotifyType type, void *ui_handle): - debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "notify", "close_notify\n") + debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "notify", "close-notify\n") try: - (notify_cbs["close_notify"])("close_notify") + (notify_cbs["close-notify"])("close-notify: TODO") except KeyError: pass diff --git a/nullclient-ecore.py b/nullclient-ecore.py index 50e21a0..0af42a8 100644 --- a/nullclient-ecore.py +++ b/nullclient-ecore.py @@ -1,94 +1,16 @@ +#!/usr/bin/env python + import etk import ecore import purple - -cbs = {} -conn_cbs = {} -conv_cbs = {} -notify_cbs = {} -request_cbs = {} - -def account_callback(name): - print "---- account callback example: %s" % name - -def blist_callback(name): - print "---- blist callback example: %s" % name - -def conn_callback(name): - print "---- connection callback example: %s" % name - -def conn_progress_cb(data): - return "Connection in progress..." - -#conn_cbs["connect_progress"] = conn_progress_cb -#conn_cbs["connected"] = conn_callback -#conn_cbs["disconnected"] = conn_callback -conn_cbs["notice"] = conn_callback -conn_cbs["report_disconnect"] = conn_callback -conn_cbs["network_connected"] = conn_callback -conn_cbs["network_disconnected"] = conn_callback -conn_cbs["report_disconnect_reason"] = conn_callback - -cbs["connection"] = conn_cbs - -def conv_callback(name): - print "---- conversation callback example: %s" % name - -#conv_cbs["create_conversation"] = conv_callback -#conv_cbs["destroy_conversation"] = conv_callback -conv_cbs["write_chat"] = conv_callback -conv_cbs["write_conv"] = conv_callback -#conv_cbs["write_im"] = conv_callback -conv_cbs["chat_add_users"] = conv_callback -conv_cbs["chat_rename_user"] = conv_callback -conv_cbs["chat_remove_users"] = conv_callback -conv_cbs["chat_update_user"] = conv_callback -conv_cbs["present"] = conv_callback -conv_cbs["has_focus"] = conv_callback -conv_cbs["custom_smiley_add"] = conv_callback -conv_cbs["custom_smiley_write"] = conv_callback -conv_cbs["custom_smiley_close"] = conv_callback -conv_cbs["send_confirm"] = conv_callback - -cbs["conversation"] = conv_cbs - -def notify_callback(name): - print "---- notify callback example: %s" % name - -notify_cbs["notify_message"] = notify_callback -notify_cbs["notify_email"] = notify_callback -notify_cbs["notify_emails"] = notify_callback -notify_cbs["notify_formatted"] = notify_callback -notify_cbs["notify_searchresults"] = notify_callback -notify_cbs["notify_searchresults_new_rows"] = notify_callback -notify_cbs["notify_userinfo"] = notify_callback -notify_cbs["notify_uri"] = notify_callback -notify_cbs["close_notify"] = notify_callback - -cbs["notify"] = notify_cbs - -def request_callback(name): - print "---- request callback example: %s" % name - -request_cbs["request_input"] = request_callback -request_cbs["request_choice"] = request_callback -request_cbs["request_action"] = request_callback -request_cbs["request_fields"] = request_callback -request_cbs["request_file"] = request_callback -request_cbs["close_request"] = request_callback -request_cbs["request_folder"] = request_callback - -cbs["request"] = request_cbs +from xml.dom import minidom class MainWindow: def __init__(self, quit_cb): - global conv_cbs - global signal_cbs self.bt_cbs = {} self.new_acc_bt_cbs = {} self.send_cbs = {} self.quit_cb = quit_cb - conv_cbs["write_im"] = self._write_im_cb def init_window(self): # Main vbox @@ -147,7 +69,6 @@ class MainWindow: self._window = etk.Window(title="NullClient-Etk", size_request=(600, 600), child=vbox) self._window.on_destroyed(self.quit_cb) - self.set_global_callbacks() self._window.show_all() def login_window(self, pointer): @@ -161,12 +82,6 @@ class MainWindow: child=vbox_login) self.login_win.show_all() - def set_global_callbacks(self): - global cbs - cbs["connection"]["connect_progress"] = self._purple_conn_status_cb - cbs["connection"]["disconnected"] = self._purple_disconnected_status_cb - cbs["connection"]["connected"] = self._purple_connected_cb - def _conn_bt_cb(self, pointer): if self.bt_cbs.has_key("on_clicked"): self.bt_cbs["on_clicked"](self.login_password.text) @@ -196,11 +111,6 @@ class MainWindow: if self.new_acc_bt_cbs.has_key("on_clicked"): self.new_acc_bt_cbs["on_clicked"]() - def _purple_conn_status_cb(self, txt, step, step_count): - self.lstatus.text = txt - - def _purple_connected_cb(self): - self.lstatus.text = "Connected" def new_buddy(self, b): if [b] not in self.blistmodel.elements: @@ -213,9 +123,6 @@ class MainWindow: if [a] not in self.accslistmodel.elements: self.accslistmodel.append([a]) - def _purple_disconnected_status_cb(self): - self.lstatus.text = "Disconnected" - def set_panel_text(self, txt): self.txt_area = txt @@ -235,38 +142,26 @@ class MainWindow: if callable(cb): self.quit_cb = cb - def _write_im_cb(self, sender, alias, message): - if alias: - self.txt_area.text += alias + ": " + message + "
" - else: - self.txt_area.text += sender + ": " + message + "
" - self._window.show_all() - + def show(self): + if self._window: + self._window.show_all() -class NullClientPurple: +class NullClientPurple(object): def __init__(self): - self.p = purple.Purple(debug_enabled=False) + self.purple = purple.Purple(debug_enabled=False) self.window = MainWindow(self.quit) self.buddies = {} #all buddies self.conversations = {} self.protocol_id = "prpl-jabber" self.account = None - self.accs = None - - self.p.add_account_cb("notify_added", account_callback) - self.p.add_account_cb("status_changed", account_callback) - self.p.add_account_cb("request_add", account_callback) - self.p.add_account_cb("request_authorize", account_callback) - self.p.add_account_cb("close_account_request", account_callback) + self.purple.add_callback("blist", "update", self.__purple_update_blist_cb) + self.purple.add_callback("connection", "connect-progress", self.__purple_conn_progress_cb) + self.purple.add_callback("connection", "connected", self.__purple_connected_cb) + self.purple.add_callback("connection", "disconnected", self.__purple_disconnected_cb) + self.purple.add_callback("conversation", "write-im", self.__purple_write_im_cb) - self.p.add_blist_cb("set_visible", blist_callback) - self.p.add_blist_cb("request_add_buddy", blist_callback) - self.p.add_blist_cb("request_add_chat", blist_callback) - self.p.add_blist_cb("request_add_group", blist_callback) - self.p.add_blist_cb("update", self._purple_update_blist_cb) - - self.p.purple_init(cbs) + self.purple.purple_init() #Initializing UI self.window.add_bt_conn_cb(self.connect) @@ -274,7 +169,7 @@ 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, \ + 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: @@ -285,38 +180,61 @@ class NullClientPurple: elif self.buddies[name].online: self.window.new_buddy(name) - def _purple_signal_buddy_signed_off_cb(self, name, alias): + def __purple_conn_progress_cb(self, text, step, step_count): + if self.window: + self.window.lstatus.text = text + + def __purple_connected_cb(self, *data): + if self.window: + self.window.lstatus.text = "Connected" + + def __purple_disconnected_cb(self, *data): + if self.window: + self.window.lstatus.text = "Disconnected" + + def __purple_write_im_cb(self, sender, alias, message): + if self.window: + if alias: + self.window.txt_area.text += alias + ": " + message + "
" + else: + self.window.txt_area.text += sender + ": " + message + "
" + self.window.show() + + 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(name) - def _purple_create_conv_cb(self, name, type): - bname = name.split("/")[0] - if bname in self.buddies and not self.conversations.has_key(name): - conv = purple.Conversation() - conv.initialize(self.account, "IM", bname) - self.conversations[bname] = conv + def __purple_signal_jabber_receiving_xmlnode_cb(self, message): + xml = minidom.parse(message) + + for msg in xml.getElementsByTagName("message"): + who = msg.getAttribute("from") + for geoloc in msg.getElementsByTagNameNS("http://jabber.org/protocol/geoloc", "geoloc"): + lat = geoloc.getElementsByTagName("lat")[0].childNodes[0].nodeValue + lon = geoloc.getElementsByTagName("lon")[0].childNodes[0].nodeValue + print "who: %s lat: %s lon: %s" % (who, lat, lon) + + def add_account(self): + username = "carmanplugintest@gmail.com" + host = "172.18.216.211" + port = 8080 + self.purple.account_add(username, self.protocol_id, host, port) + for account in self.purple.accounts.keys(): + self.window.new_account(account) def connect(self, password): username_acc = self.window.selected_accs() if username_acc: - self.account = self.p.account_verify(username_acc) + self.account = self.purple.account_verify(username_acc) self.account.get_protocol_options() 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_buddy_signed_off_cb) - - def add_account(self): - username = "carmanplugintest@gmail.com" - host = "172.18.216.211" - port = 8080 - self.p.account_add(username, self.protocol_id, host, port) - self.accs = self.p.accounts - for acc in self.accs.keys(): - self.window.new_account(acc) + self.purple.connect() + self.purple.signal_connect("buddy-signed-off", self.__purple_signal_buddy_signed_off_cb) + self.purple.signal_connect("jabber-receiving-xmlnode", self.__purple_signal_jabber_receiving_xmlnode_cb) def send_msg(self, name, msg): if not self.conversations.has_key(name): @@ -331,7 +249,7 @@ class NullClientPurple: self.conversations[i].destroy() self.conversations[i] = None self.conversations = None - self.p.destroy() + self.purple.destroy() ecore.main_loop_quit() if __name__ == '__main__': diff --git a/nullclient.py b/nullclient.py deleted file mode 100644 index a79f3da..0000000 --- a/nullclient.py +++ /dev/null @@ -1,236 +0,0 @@ -import purple -import ecore -import getpass -import sys -from xml.dom import minidom - -cbs = {} -acc_cbs = {} -blist_cbs = {} -conn_cbs = {} -conv_cbs = {} -notify_cbs = {} -request_cbs = {} - -def account_callback(name): - print "---- account callback example: %s" % name - -acc_cbs["notify_added"] = account_callback -acc_cbs["status_changed"] = account_callback -acc_cbs["request_add"] = account_callback -acc_cbs["request_authorize"] = account_callback -acc_cbs["close_account_request"] = account_callback - -cbs["account"] = acc_cbs - -def blist_callback(name): - print "---- blist callback example: %s" % name - -blist_cbs["new_list"] = blist_callback -blist_cbs["show"] = blist_callback -blist_cbs["destroy"] = blist_callback -blist_cbs["set_visible"] = blist_callback -blist_cbs["request_add_buddy"] = blist_callback -blist_cbs["request_add_chat"] = blist_callback -blist_cbs["request_add_group"] = blist_callback - -def new_node_cb(type, name=None, totalsize=None, currentsize=None, online=None): - if type == 0: - print "---- blist callback: new node (group): %s (%s/%s) (%s online)" % \ - (name, totalsize, currentsize, online) - elif type == 1: - print "---- blist callback: new node (contact): %s (%s/%s) (%s online)" % \ - (name, totalsize, currentsize, online) - elif type == 2: # totalsize = alias - print "---- blist callback: new node (buddy): %s (%s)" % (name, totalsize) - elif type == 3: - print "---- blist callback: new node (chat): %s" % alias - elif type == 4: - print "---- blist callback: new node (other type)" - else: - print "---- blist callback: new node (unknown type %s)" % type - -def update_cb(type, name=None, totalsize=None, currentsize=None, online=None): - if type == 0: - print "---- blist callback: update (group): %s (%s/%s) (%s online)" % \ - (name, totalsize, currentsize, online) - elif type == 1: - print "---- blist callback: update (contact): %s (%s/%s) (%s online)" % \ - (name, totalsize, currentsize, online) - elif type == 2: # totalsize = alias - print "---- blist callback: update (buddy): %s (%s)" % \ - (name, totalsize) - elif type == 3: - print "---- blist callback: update (chat): %s" % alias - elif type == 4: - print "---- blist callback: update (other type)" - else: - print "---- blist callback: update (unknown type %s)" % type - -def remove_cb(type, name=None, totalsize=None, currentsize=None, online=None): - if type == 0: - print "---- blist callback: remove (group): %s (%s/%s) (%s online)" % \ - (name, totalsize, currentsize, online) - elif type == 1: - print "---- blist callback: remove (contact): %s (%s/%s) (%s online)" % \ - (name, totalsize, currentsize, online) - elif type == 2: # totalsize = alias - print "---- blist callback: remove (buddy): %s (%s)" % \ - (name, totalsize) - elif type == 3: - print "---- blist callback: remove (chat): %s" % alias - elif type == 4: - print "---- blist callback: remove (other type)" - else: - print "---- blist callback: remove (unknown type %s)" % type - -blist_cbs["new_node"] = new_node_cb -blist_cbs["update"] = update_cb -blist_cbs["remove"] = remove_cb - -cbs["blist"] = blist_cbs - -def conn_callback(name): - print "---- connection callback example: %s" % name - -conn_cbs["notice"] = conn_callback -conn_cbs["network_connected"] = conn_callback -conn_cbs["network_disconnected"] = conn_callback - -def connect_progress_cb(text, step, step_count): - print "---- connection status: %s [%s/%s]" % (text, step, step_count) - -def connected_cb(): - print "---- connection status: Connected" - -def disconnected_cb(): - print "---- connection status: Disconnected" - -def report_disconnect_cb(text): - print "---- %s" % text - -def report_disconnect_reason_cb(reason, text): - print "---- %s (%s)" % (text, reason) - -conn_cbs["connect_progress"] = connect_progress_cb -conn_cbs["connected"] = connected_cb -conn_cbs["disconnected"] = disconnected_cb -conn_cbs["report_disconnect"] = report_disconnect_cb -conn_cbs["report_disconnect_reason"] = report_disconnect_reason_cb - -cbs["connection"] = conn_cbs - -def conv_callback(name): - print "---- conversation callback example: %s" % name - -def write_im_cb(name, message): - print "---- (conversation) write_im: %s %s" % (name, message) - -conv_cbs["create_conversation"] = conv_callback -conv_cbs["destroy_conversation"] = conv_callback -conv_cbs["write_chat"] = conv_callback -conv_cbs["write_im"] = write_im_cb -conv_cbs["write_conv"] = conv_callback -conv_cbs["chat_add_users"] = conv_callback -conv_cbs["chat_rename_user"] = conv_callback -conv_cbs["chat_remove_users"] = conv_callback -conv_cbs["chat_update_user"] = conv_callback -conv_cbs["present"] = conv_callback -conv_cbs["has_focus"] = conv_callback -conv_cbs["custom_smiley_add"] = conv_callback -conv_cbs["custom_smiley_write"] = conv_callback -conv_cbs["custom_smiley_close"] = conv_callback -conv_cbs["send_confirm"] = conv_callback - -cbs["conversation"] = conv_cbs - -def notify_callback(name): - print "---- notify callback example: %s" % name - -notify_cbs["notify_message"] = notify_callback -notify_cbs["notify_email"] = notify_callback -notify_cbs["notify_emails"] = notify_callback -notify_cbs["notify_formatted"] = notify_callback -notify_cbs["notify_searchresults"] = notify_callback -notify_cbs["notify_searchresults_new_rows"] = notify_callback -notify_cbs["notify_userinfo"] = notify_callback -notify_cbs["notify_uri"] = notify_callback -notify_cbs["close_notify"] = notify_callback - -cbs["notify"] = notify_cbs - -def request_callback(name): - print "---- request callback example: %s" % name - -request_cbs["request_input"] = request_callback -request_cbs["request_choice"] = request_callback -request_cbs["request_action"] = request_callback -request_cbs["request_fields"] = request_callback -request_cbs["request_file"] = request_callback -request_cbs["close_request"] = request_callback -request_cbs["request_folder"] = request_callback - -cbs["request"] = request_cbs - -def buddy_signed_off_cb(name): - print "---- (signal) sign off from buddy %s" % name - -def receiving_im_msg_cb(sender, name, message): - print "---- (signal) receiving IM message from %s: %s" % (name, message) - return False - -def jabber_received_xmlnode_cb(message): - xml = minidom.parse(message) - - for msg in xml.getElementsByTagName("message"): - who = msg.getAttribute("from") - for geoloc in msg.getElementsByTagNameNS("http://jabber.org/protocol/geoloc", "geoloc"): - lat = geoloc.getElementsByTagName("lat")[0].childNodes[0].nodeValue - lon = geoloc.getElementsByTagName("lon")[0].childNodes[0].nodeValue - print "who: %s lat: %s lon: %s" % (who, lat, lon) - -class NullClient: - def __init__(self): - self.p = purple.Purple(debug_enabled=False) - self.account = None - self.protocol_id = "prpl-jabber" - - def execute(self): - global cbs - self.p.purple_init(cbs) - - def new_account(self, username, password): - self.account = purple.Account(username, self.protocol_id) - self.account.password = password - - self.account.proxy.set_type(purple.ProxyInfoType().HTTP) - self.account.proxy.set_host("172.18.216.211") - self.account.proxy.set_port(8080) - - self.account.get_protocol_options() - - self.account.set_enabled("carman-purple-python", True) - def get_buddies(self): - buddies = self.account.get_buddies_online() - print buddies - -def getuser(): - sys.stdout.write("GTalk account: ") - username = sys.stdin.readline() - return username[:-1] - -def getpassword(): - return getpass.getpass() - -if __name__ == '__main__': - client = NullClient() - client.execute() - client.p.signal_connect("buddy-signed-off", buddy_signed_off_cb) - client.p.signal_connect("receiving-im-msg", receiving_im_msg_cb) - client.p.signal_connect("jabber-receiving-xmlnode", jabber_received_xmlnode_cb) - username = getuser() - password = getpassword() - - client.p.connect() - ecore.timer_add(20, client.get_buddies) - ecore.main_loop_begin() diff --git a/purple.pyx b/purple.pyx index 54be931..cabbbae 100644 --- a/purple.pyx +++ b/purple.pyx @@ -137,20 +137,9 @@ cdef class Purple: glib.g_main_context_iteration(NULL, False) return True - def purple_init(self, callbacks_dict=None): + def purple_init(self): """ Initializes libpurple """ - if callbacks_dict is not None: - global connection_cbs - global conversation_cbs - global notify_cbs - global request_cbs - - connection_cbs = callbacks_dict["connection"] - conversation_cbs = callbacks_dict["conversation"] - notify_cbs = callbacks_dict["notify"] - request_cbs = callbacks_dict["request"] - c_account_ui_ops.notify_added = notify_added c_account_ui_ops.status_changed = status_changed c_account_ui_ops.request_add = request_add @@ -251,13 +240,23 @@ cdef class Purple: return ret - def add_account_cb(self, name, func): + def add_callback(self, type, name, func): + """ Adds a callback 'func' with given name 'name' inside type 'type'. + Example: add_callback("account", "notify-added", notify_added_cb) + """ global account_cbs - account_cbs[name] = func - - def add_blist_cb(self, name, func): global blist_cbs - blist_cbs[name] = func + global connection_cbs + global conversation_cbs + global notify_cbs + global request_cbs + + { "account": account_cbs, + "blist": blist_cbs, + "connection": connection_cbs, + "conversation": conversation_cbs, + "notify": notify_cbs, + "request": request_cbs }[type][name] = func def connect(self): conn = Connection() diff --git a/request_cbs.pxd b/request_cbs.pxd index 3057bdc..22bbc40 100644 --- a/request_cbs.pxd +++ b/request_cbs.pxd @@ -35,9 +35,9 @@ cdef void *request_input (const_char *title, const_char *primary, account.PurpleAccount *account, const_char *who, conversation.PurpleConversation *conv, void *user_data): - debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "request", "request_input\n") + debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "request", "request-input\n") try: - (request_cbs["request_input"])("request_input") + (request_cbs["request-input"])("request-input: TODO") except KeyError: pass @@ -50,9 +50,9 @@ cdef void *request_choice (const_char *title, const_char *primary, conversation.PurpleConversation *conv, void *user_data, va_list choices): debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "request", - "request_choice\n") + "request-choice\n") try: - (request_cbs["request_choice"])("request_choice") + (request_cbs["request-choice"])("request-choice: TODO") except KeyError: pass @@ -63,9 +63,9 @@ cdef void *request_action (const_char *title, const_char *primary, void *user_data, size_t action_count, va_list actions): debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "request", - "request_action\n") + "request-action\n") try: - (request_cbs["request_action"])("request_action") + (request_cbs["request-action"])("request-action: TODo") except KeyError: pass @@ -78,9 +78,9 @@ cdef void *request_fields (const_char *title, const_char *primary, conversation.PurpleConversation *conv, void *user_data): debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "request", - "request_fields\n") + "request-fields\n") try: - (request_cbs["request_fields"])("request_fields") + (request_cbs["request-fields"])("request-fields: TODO") except KeyError: pass @@ -90,16 +90,16 @@ cdef void *request_file (const_char *title, const_char *filename, account.PurpleAccount *account, const_char *who, conversation.PurpleConversation *conv, void *user_data): - debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "request", "request_file\n") + debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "request", "request-file\n") try: - (request_cbs["request_file"])("request_file") + (request_cbs["request-file"])("request-file: TODO") except KeyError: pass cdef void close_request (request.PurpleRequestType type, void *ui_handle): - debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "request", "close_request\n") + debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "request", "close-request\n") try: - (request_cbs["close_request"])("close_request") + (request_cbs["close-request"])("close-request: TODO") except KeyError: pass @@ -111,8 +111,8 @@ cdef void *request_folder (const_char *title, const_char *dirname, conversation.PurpleConversation *conv, void *user_data): debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "request", - "request_folder\n") + "request-folder\n") try: - (request_cbs["request_folder"])("request_folder") + (request_cbs["request-folder"])("request-folder: TODO") except KeyError: pass -- 1.7.9.5 From a9c739f31cfa8cbb2a91e79f829a71f09406d73b Mon Sep 17 00:00:00 2001 From: Ragner Magalhaes Date: Tue, 2 Dec 2008 20:51:17 +0000 Subject: [PATCH 15/16] Fixed get_buddies_online return parameter. FIXES: - Now get_buddies_online returns a list of tuples (name, alias). Signed-off-by: Bruno Abinader git-svn-id: https://garage.maemo.org/svn/carman/branches/carman-0.7-beta2/python-purple@1360 596f6dd7-e928-0410-a184-9e12fd12cf7e --- account.pyx | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/account.pyx b/account.pyx index d3dbdbf..7dd484f 100644 --- a/account.pyx +++ b/account.pyx @@ -140,14 +140,28 @@ cdef class Account: def get_buddies_online(self): cdef glib.GSList *iter cdef blist.PurpleBuddy *buddy + cdef char *c_name = NULL + cdef char *c_alias = NULL buddies = [] iter = blist.c_purple_find_buddies(self.c_account, NULL) while iter: + c_name = NULL + c_alias = NULL buddy = iter.data if buddy and \ account.c_purple_account_is_connected(blist.c_purple_buddy_get_account(buddy)) and \ status.c_purple_presence_is_online(blist.c_purple_buddy_get_presence(buddy)): - buddies += [buddy.name] + 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 + buddies.append((name, alias)) iter = iter.next return buddies -- 1.7.9.5 From df4a5bcd4de039784ad2abbd8c82d1b934bc0203 Mon Sep 17 00:00:00 2001 From: Ragner Magalhaes Date: Tue, 2 Dec 2008 20:51:37 +0000 Subject: [PATCH 16/16] Added "markup_strip_html" method (outside Purple class). FIXES: - Added "markup_strip_html" method (outside Purple class). Signed-off-by: Bruno Abinader git-svn-id: https://garage.maemo.org/svn/carman/branches/carman-0.7-beta2/python-purple@1361 596f6dd7-e928-0410-a184-9e12fd12cf7e --- purple.pyx | 2 ++ util.pxd | 26 ++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 util.pxd diff --git a/purple.pyx b/purple.pyx index cabbbae..82c6035 100644 --- a/purple.pyx +++ b/purple.pyx @@ -55,6 +55,8 @@ include "request_cbs.pxd" #include "roomlist_cbs.pxd" include "signal_cbs.pxd" +include "util.pxd" + cdef class Purple: """ Purple class. diff --git a/util.pxd b/util.pxd new file mode 100644 index 0000000..fbdab01 --- /dev/null +++ b/util.pxd @@ -0,0 +1,26 @@ +# +# Copyright (c) 2008 INdT - Instituto Nokia de Tecnologia +# +# This file is part of python-purple. +# +# python-purple is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# python-purple is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +cimport purple + +def markup_strip_html(message): + if message is None: + return None + else: + return util.c_purple_markup_strip_html(message) -- 1.7.9.5