X-Git-Url: http://git.maemo.org/git/?p=python-purple;a=blobdiff_plain;f=blist_cbs.pxd;h=52847dcca9f8b310e2c62e4c31703917069aa8de;hp=803c0ebb16cfdeff50b2a17e6a1567bf5b9fac3e;hb=1ebedbc8928e2e85faccc07f84da6b422040fb3e;hpb=c91fe1b6caf0ae1339fba5435b70d27fcffbe5fa diff --git a/blist_cbs.pxd b/blist_cbs.pxd index 803c0eb..52847dc 100644 --- a/blist_cbs.pxd +++ b/blist_cbs.pxd @@ -24,6 +24,84 @@ cdef extern from *: blist_cbs = {} +cdef void __group_node_cb(blist.PurpleBlistNode *node, object callback): + cdef blist.PurpleGroup *group = node + cdef char *c_name = NULL + + 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) + online = blist.c_purple_blist_get_group_online_count(group) + + try: + 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 *c_alias = NULL + + 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, \ + contact.online) + except KeyError: + pass + +cdef void __buddy_node_cb(blist.PurpleBlistNode *node, object callback): + cdef blist.PurpleBuddy *buddy = node + 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: + alias = c_alias + + try: + callback(node.type, name, alias) + except KeyError: + pass + +cdef void __chat_node_cb(blist.PurpleBlistNode *node, object callback): + cdef blist.PurpleChat *chat = node + cdef char *c_name = NULL + + c_name = blist.c_purple_chat_get_name(chat) + if c_name == NULL: + name = None + else: + name = c_name + + try: + callback(node.type, name) + except KeyError: + pass + +cdef void __other_node_cb(blist.PurpleBlistNode *node, object callback): + try: + callback(node.type) + except KeyError: + pass + cdef void new_list (blist.PurpleBuddyList *list): debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "blist", "new_list\n") try: @@ -34,66 +112,94 @@ 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: - (blist_cbs["new_node"])("new_node") + if node.type == blist.PURPLE_BLIST_GROUP_NODE: + __group_node_cb(node, blist_cbs["new_node"]) + elif node.type == blist.PURPLE_BLIST_CONTACT_NODE: + __contact_node_cb(node, blist_cbs["new_node"]) + elif node.type == blist.PURPLE_BLIST_BUDDY_NODE: + __buddy_node_cb(node, blist_cbs["new_node"]) + elif node.type == blist.PURPLE_BLIST_CHAT_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"]) 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") + (blist_cbs["show"])("show: TODO") 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") + if node.type == blist.PURPLE_BLIST_GROUP_NODE: + __group_node_cb(node, blist_cbs["update"]) + elif node.type == blist.PURPLE_BLIST_CONTACT_NODE: + __contact_node_cb(node, blist_cbs["update"]) + elif node.type == blist.PURPLE_BLIST_BUDDY_NODE: + __buddy_node_cb(node, blist_cbs["update"]) + elif node.type == blist.PURPLE_BLIST_CHAT_NODE: + __chat_node_cb(node, blist_cbs["update"]) + elif node.type == blist.PURPLE_BLIST_OTHER_NODE: + __other_node_cb(node, blist_cbs["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") + if node.type == blist.PURPLE_BLIST_GROUP_NODE: + __group_node_cb(node, blist_cbs["remove"]) + elif node.type == blist.PURPLE_BLIST_CONTACT_NODE: + __contact_node_cb(node, blist_cbs["remove"]) + elif node.type == blist.PURPLE_BLIST_BUDDY_NODE: + __buddy_node_cb(node, blist_cbs["remove"]) + elif node.type == blist.PURPLE_BLIST_CHAT_NODE: + __chat_node_cb(node, blist_cbs["remove"]) + elif node.type == blist.PURPLE_BLIST_OTHER_NODE: + __other_node_cb(node, blist_cbs["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") + (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 *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") + 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 -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") 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