Added PurpleBlistUiOps callbacks.
authorRagner Magalhaes <ragner.magalhaes@openbossa.org>
Tue, 2 Dec 2008 20:27:33 +0000 (20:27 +0000)
committerAnderson Briglia <anderson.briglia@openbossa.org>
Sat, 28 Feb 2009 21:11:10 +0000 (17:11 -0400)
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 <bruno.abinader@indt.org.br>

git-svn-id: https://garage.maemo.org/svn/carman/branches/carman-0.7-beta2/python-purple@1306 596f6dd7-e928-0410-a184-9e12fd12cf7e

blist_cbs.pxd [new file with mode: 0644]
libpurple/blist.pxd
nullclient.py
purple.pyx

diff --git a/blist_cbs.pxd b/blist_cbs.pxd
new file mode 100644 (file)
index 0000000..803c0eb
--- /dev/null
@@ -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 <http://www.gnu.org/licenses/>.
+#
+
+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:
+        (<object>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:
+        (<object>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:
+        (<object>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:
+        (<object>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:
+        (<object>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:
+        (<object>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:
+        (<object>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:
+        (<object>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:
+        (<object>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:
+        (<object>blist_cbs["request_add_chat"])("request_add_group")
+    except KeyError:
+        pass
index 37780fe..6176877 100644 (file)
 #
 
 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" ()
index 0e3a73c..4953a1f 100644 (file)
@@ -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
 
index b02c69c..10dcd62 100644 (file)
@@ -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