From: Ragner Magalhaes Date: Tue, 2 Dec 2008 20:27:33 +0000 (+0000) Subject: Added PurpleBlistUiOps callbacks. X-Git-Url: http://git.maemo.org/git/?p=python-purple;a=commitdiff_plain;h=c91fe1b6caf0ae1339fba5435b70d27fcffbe5fa Added PurpleBlistUiOps callbacks. FIXES: - Added missing structures on blist.pxd. - Added blist callbacks forwarding on purple.pyx. - Added blist callbacks example on nullclient.py. - Added c-based callbacks on blist_cbs.pxd. Signed-off-by: Bruno Abinader git-svn-id: https://garage.maemo.org/svn/carman/branches/carman-0.7-beta2/python-purple@1306 596f6dd7-e928-0410-a184-9e12fd12cf7e --- diff --git a/blist_cbs.pxd b/blist_cbs.pxd new file mode 100644 index 0000000..803c0eb --- /dev/null +++ b/blist_cbs.pxd @@ -0,0 +1,99 @@ +# +# 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 + +cdef extern from *: + ctypedef char const_char "const char" + +blist_cbs = {} + +cdef void new_list (blist.PurpleBuddyList *list): + debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "blist", "new_list\n") + try: + (blist_cbs["new_list"])("new_list") + except KeyError: + pass + +cdef void new_node (blist.PurpleBlistNode *node): + debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "blist", "new_node\n") + try: + (blist_cbs["new_node"])("new_node") + except KeyError: + pass + +cdef void show (blist.PurpleBuddyList *list): + debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "blist", "show\n") + try: + (blist_cbs["show"])("show") + except KeyError: + pass + +cdef void update (blist.PurpleBuddyList *list, blist.PurpleBlistNode *node): + debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "blist", "update\n") + try: + (blist_cbs["update"])("update") + except KeyError: + pass + +cdef void remove (blist.PurpleBuddyList *list, blist.PurpleBlistNode *node): + debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "blist", "remove\n") + try: + (blist_cbs["remove"])("remove") + except KeyError: + pass + +cdef void destroy (blist.PurpleBuddyList *list): + debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "blist", "destroy\n") + try: + (blist_cbs["destroy"])("destroy") + 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") + try: + (blist_cbs["set_visible"])("set_visible") + except KeyError: + pass + +cdef void request_add_buddy (account.PurpleAccount *account, + const_char *username, const_char *group, + const_char *alias): + debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "blist", "request_add_buddy\n") + try: + (blist_cbs["request_add_buddy"])("request_add_buddy") + except KeyError: + pass + +cdef void request_add_chat (account.PurpleAccount *account, + blist.PurpleGroup *group, const_char *alias, + 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") + 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") + except KeyError: + pass diff --git a/libpurple/blist.pxd b/libpurple/blist.pxd index 37780fe..6176877 100644 --- a/libpurple/blist.pxd +++ b/libpurple/blist.pxd @@ -18,25 +18,64 @@ # cimport glib + cimport account cimport status +cdef extern from *: + ctypedef char const_char "const char" + cdef extern from "libpurple/blist.h": - ctypedef struct PurpleBlistNode: - pass + ctypedef struct PurpleBuddyList + ctypedef struct PurpleBlistUiOps + ctypedef struct PurpleBlistNode + ctypedef struct PurpleChat + ctypedef struct PurpleGroup + ctypedef struct PurpleContact + ctypedef struct PurpleBuddy - ctypedef struct PurpleBlistUiOps: + ctypedef enum PurpleBlistNodeType: + PURPLE_BLIST_GROUP_NODE + PURPLE_BLIST_CONTACT_NODE + PURPLE_BLIST_BUDDY_NODE + PURPLE_BLIST_CHAT_NODE + PURPLE_BLIST_OTHER_NODE + + ctypedef enum PurpleBlistNodeFlags: + PURPLE_BLIST_NODE_FLAG_NO_SAVE = 1 << 0 + + ctypedef struct PurpleBlistNode: pass ctypedef struct PurpleBuddy: char *name + char *alias + char *server_alias - ctypedef struct PurpleBuddyList: + ctypedef struct PurpleContact: + pass + + ctypedef struct PurpleGroup: + pass + + ctypedef struct PurpleChat: pass - ctypedef struct PurplePresence: + ctypedef struct PurpleBuddyList: pass + ctypedef struct PurpleBlistUiOps: + void (*new_list) (PurpleBuddyList *list) + void (*new_node) (PurpleBlistNode *node) + void (*show) (PurpleBuddyList *list) + void (*update) (PurpleBuddyList *list, PurpleBlistNode *node) + void (*remove) (PurpleBuddyList *list, PurpleBlistNode *node) + void (*destroy) (PurpleBuddyList *list) + void (*set_visible) (PurpleBuddyList *list, glib.gboolean show) + void (*request_add_buddy) (account.PurpleAccount *account, const_char *username, const_char *group, const_char *alias) + void (*request_add_chat) (account.PurpleAccount *account, PurpleGroup *group, const_char *alias, const_char *name) + void (*request_add_group) () + 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" () diff --git a/nullclient.py b/nullclient.py index 0e3a73c..4953a1f 100644 --- a/nullclient.py +++ b/nullclient.py @@ -5,6 +5,7 @@ import sys cbs = {} acc_cbs = {} +blist_cbs = {} conn_cbs = {} conv_cbs = {} @@ -19,6 +20,22 @@ 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["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 diff --git a/purple.pyx b/purple.pyx index b02c69c..10dcd62 100644 --- a/purple.pyx +++ b/purple.pyx @@ -29,7 +29,7 @@ __APP_NAME__ = "carman-purple-python" __APP_VERSION__ = "0.1" cdef account.PurpleAccountUiOps c_account_ui_ops -#cdef blist.PurpleBlistUiOps c_blist_ui_ops +cdef blist.PurpleBlistUiOps c_blist_ui_ops cdef connection.PurpleConnectionUiOps c_conn_ui_ops cdef conversation.PurpleConversationUiOps c_conv_ui_ops cdef core.PurpleCoreUiOps c_core_ui_ops @@ -44,6 +44,7 @@ cdef glib.GHashTable *c_ui_info c_ui_info = NULL include "account_cbs.pxd" +include "blist_cbs.pxd" include "connection_cbs.pxd" include "conversation_cbs.pxd" @@ -86,7 +87,7 @@ cdef class Purple: account.c_purple_accounts_set_ui_ops(&c_account_ui_ops) connection.c_purple_connections_set_ui_ops(&c_conn_ui_ops) - #blist.c_purple_blist_set_ui_ops(&c_blist_ui_ops) + blist.c_purple_blist_set_ui_ops(&c_blist_ui_ops) conversation.c_purple_conversations_set_ui_ops(&c_conv_ui_ops) #notify.c_purple_notify_set_ui_ops(&c_notify_ui_ops) #request.c_purple_request_set_ui_ops(&c_request_ui_ops) @@ -129,10 +130,12 @@ cdef class Purple: if callbacks_dict is not None: global account_cbs + global blist_cbs global connection_cbs global conversation_cbs account_cbs = callbacks_dict["account"] + blist_cbs = callbacks_dict["blist"] connection_cbs = callbacks_dict["connection"] conversation_cbs = callbacks_dict["conversation"] @@ -142,6 +145,17 @@ cdef class Purple: c_account_ui_ops.request_authorize = request_authorize c_account_ui_ops.close_account_request = close_account_request + c_blist_ui_ops.new_list = new_list + c_blist_ui_ops.new_node = new_node + c_blist_ui_ops.show = show + c_blist_ui_ops.update = update + c_blist_ui_ops.remove = remove + c_blist_ui_ops.destroy = destroy + c_blist_ui_ops.set_visible = set_visible + c_blist_ui_ops.request_add_buddy = request_add_buddy + c_blist_ui_ops.request_add_chat = request_add_chat + c_blist_ui_ops.request_add_group = request_add_group + c_conn_ui_ops.connect_progress = connect_progress c_conn_ui_ops.connected = connected c_conn_ui_ops.disconnected = disconnected