X-Git-Url: http://git.maemo.org/git/?p=python-purple;a=blobdiff_plain;f=blist_cbs.pxd;h=763cf51a160fa72aaff01e75aac297b604f8378c;hp=803c0ebb16cfdeff50b2a17e6a1567bf5b9fac3e;hb=6545aaed50154028f8e6fbac3cd08c972940cb40;hpb=c91fe1b6caf0ae1339fba5435b70d27fcffbe5fa diff --git a/blist_cbs.pxd b/blist_cbs.pxd index 803c0eb..763cf51 100644 --- a/blist_cbs.pxd +++ b/blist_cbs.pxd @@ -24,6 +24,73 @@ cdef extern from *: blist_cbs = {} +cdef void __group_node_cb(blist.PurpleBlistNode *node, object callback): + cdef blist.PurpleGroup *group = node + + if group.name: + name = group.name + else: + name = None + + try: + callback(node.type, name, group.totalsize, group.currentsize, \ + group.online) + except KeyError: + pass + +cdef void __contact_node_cb(blist.PurpleBlistNode *node, object callback): + cdef blist.PurpleContact *contact = node + + if contact.alias: + alias = contact.alias + else: + alias = None + + 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 + + if buddy.server_alias: + alias = buddy.server_alias + elif buddy.alias: + alias = buddy.alias + else: + alias = None + + if buddy.name: + name = buddy.name + else: + name = None + + try: + callback(node.type, name, alias) + except KeyError: + pass + +cdef void __chat_node_cb(blist.PurpleBlistNode *node, object callback): + cdef blist.PurpleChat *chat = node + + if chat.alias: + alias = chat.alias + else: + alias = None + + try: + callback(node.type, alias) + 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: @@ -33,8 +100,20 @@ 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"]) + else: + (blist_cbs["new_node"])(node.type) except KeyError: pass @@ -47,15 +126,39 @@ 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: - (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"]) + else: + (blist_cbs["update"])(node.type) 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"]) + else: + (blist_cbs["remove"])(node.type) except KeyError: pass