Added PurpleAccountUiOps callbacks. (Updated)
authorRagner Magalhaes <ragner.magalhaes@openbossa.org>
Tue, 2 Dec 2008 20:26:15 +0000 (20:26 +0000)
committerAnderson Briglia <anderson.briglia@openbossa.org>
Sat, 28 Feb 2009 21:11:10 +0000 (17:11 -0400)
FIXES:
 - Added missing structures on account.pxd (PurpleAccountUiOps) and status.pxd (PurpleStatus).
 - Added account callbacks forwarding on purple.pyx.
 - Added account callbacks example on nullclient.py.
 - Added c-based callbacks on account_cbs.pxd.
 - Renamed conversations_cbs to conversation_cbs.

ps: Fixed typo when renaming conversations_cbs to conversation_cbs.

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@1303 596f6dd7-e928-0410-a184-9e12fd12cf7e

account_cbs.pxd [new file with mode: 0644]
conversation_cbs.pxd
libpurple/account.pxd
libpurple/status.pxd
nullclient.py
purple.pyx

diff --git a/account_cbs.pxd b/account_cbs.pxd
new file mode 100644 (file)
index 0000000..e0f767a
--- /dev/null
@@ -0,0 +1,66 @@
+#
+#  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"
+
+account_cbs = {}
+
+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")
+    global account_cbs
+    try:
+        (<object>account_cbs["notify_added"])("notify_added")
+    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")
+    global account_cbs
+    try:
+        (<object>account_cbs["status_changed"])("status_changed")
+    except KeyError:
+        pass
+
+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")
+    global account_cbs
+    try:
+        (<object>account_cbs["request_add"])("request_add")
+    except KeyError:
+        pass
+
+cdef void *request_authorize (account.PurpleAccount *account, const_char *remote_user, const_char *id, const_char *alias, const_char *message, glib.gboolean on_list, account.PurpleAccountRequestAuthorizationCb authorize_cb, account.PurpleAccountRequestAuthorizationCb deny_cb, void *user_data):
+    debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "account", "request_authorize\n")
+    global account_cbs
+    try:
+        (<object>account_cbs["request_authorize"])("request_authorize")
+        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")
+    global account_cbs
+    try:
+        (<object>account_cbs["close_account_request"])("close_account_request")
+    except KeyError:
+        pass
index 3c5aec1..a0aa262 100644 (file)
@@ -26,21 +26,21 @@ cdef extern from *:
 cdef extern from "time.h":
     ctypedef long int time_t
 
 cdef extern from "time.h":
     ctypedef long int time_t
 
-conversations_cbs = {}
+conversation_cbs = {}
 
 cdef void create_conversation (conversation.PurpleConversation *conv):
     debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "conversation", "create_conversation\n")
 
 cdef void create_conversation (conversation.PurpleConversation *conv):
     debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "conversation", "create_conversation\n")
-    global conversations_cbs
+    global conversation_cbs
     try:
     try:
-        (<object>conversations_cbs["create_conversation"])("create_conversation")
+        (<object>conversation_cbs["create_conversation"])("create_conversation")
     except KeyError:
         pass
 
 cdef void destroy_conversation (conversation.PurpleConversation *conv):
     debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "conversation", "destroy_conversation\n")
     except KeyError:
         pass
 
 cdef void destroy_conversation (conversation.PurpleConversation *conv):
     debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "conversation", "destroy_conversation\n")
-    global conversations_cbs
+    global conversation_cbs
     try:
     try:
-        (<object>conversations_cbs["destroy_conversation"])("destroy_conversation")
+        (<object>conversation_cbs["destroy_conversation"])("destroy_conversation")
     except KeyError:
         pass
 
     except KeyError:
         pass
 
@@ -48,9 +48,9 @@ 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")
                       const_char *message, conversation.PurpleMessageFlags flags,
                       time_t mtime):
     debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "conversation", "write_chat\n")
-    global conversations_cbs
+    global conversation_cbs
     try:
     try:
-        (<object>conversations_cbs["write_chat"])("write_chat")
+        (<object>conversation_cbs["write_chat"])("write_chat")
     except KeyError:
         pass
 
     except KeyError:
         pass
 
@@ -58,9 +58,9 @@ 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")
                     const_char *message, conversation.PurpleMessageFlags flags,
                     time_t mtime):
     debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "conversation", "write_im\n")
-    global conversations_cbs
+    global conversation_cbs
     try:
     try:
-        (<object>conversations_cbs["write_im"])("write_im")
+        (<object>conversation_cbs["write_im"])("write_im")
     except KeyError:
         pass
 
     except KeyError:
         pass
 
@@ -68,18 +68,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")
                       const_char *alias, const_char *message,
                       conversation.PurpleMessageFlags flags, time_t mtime):
     debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "conversation", "write_conv\n")
-    global conversations_cbs
+    global conversation_cbs
     try:
     try:
-        (<object>conversations_cbs["write_conv"])("write_conv")
+        (<object>conversation_cbs["write_conv"])("write_conv")
     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")
     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")
-    global conversations_cbs
+    global conversation_cbs
     try:
     try:
-        (<object>conversations_cbs["chat_add_users"])("chat_add_users")
+        (<object>conversation_cbs["chat_add_users"])("chat_add_users")
     except KeyError:
         pass
 
     except KeyError:
         pass
 
@@ -87,42 +87,42 @@ 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")
                             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")
-    global conversations_cbs
+    global conversation_cbs
     try:
     try:
-        (<object>conversations_cbs["chat_rename_user"])("chat_rename_user")
+        (<object>conversation_cbs["chat_rename_user"])("chat_rename_user")
     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")
     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")
-    global conversations_cbs
+    global conversation_cbs
     try:
     try:
-        (<object>conversations_cbs["chat_remove_users"])("chat_remove_users")
+        (<object>conversation_cbs["chat_remove_users"])("chat_remove_users")
     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")
     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")
-    global conversations_cbs
+    global conversation_cbs
     try:
     try:
-        (<object>conversations_cbs["chat_update_user"])("chat_update_user")
+        (<object>conversation_cbs["chat_update_user"])("chat_update_user")
     except KeyError:
         pass
 
 cdef void present (conversation.PurpleConversation *conv):
     debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "conversation", "present\n")
     except KeyError:
         pass
 
 cdef void present (conversation.PurpleConversation *conv):
     debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "conversation", "present\n")
-    global conversations_cbs
+    global conversation_cbs
     try:
     try:
-        (<object>conversations_cbs["present"])("present")
+        (<object>conversation_cbs["present"])("present")
     except KeyError:
         pass
 
 cdef glib.gboolean has_focus (conversation.PurpleConversation *conv):
     debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "conversation", "has_focus\n")
     except KeyError:
         pass
 
 cdef glib.gboolean has_focus (conversation.PurpleConversation *conv):
     debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "conversation", "has_focus\n")
-    global conversations_cbs
+    global conversation_cbs
     try:
     try:
-        (<object>conversations_cbs["has_focus"])("has_focus")
+        (<object>conversation_cbs["has_focus"])("has_focus")
         return False
     except KeyError:
         return False
         return False
     except KeyError:
         return False
@@ -130,9 +130,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")
 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")
-    global conversations_cbs
+    global conversation_cbs
     try:
     try:
-        (<object>conversations_cbs["custom_smiley_add"])("custom_smiley_add")
+        (<object>conversation_cbs["custom_smiley_add"])("custom_smiley_add")
         return False
     except KeyError:
         return False
         return False
     except KeyError:
         return False
@@ -142,7 +142,7 @@ cdef void custom_smiley_write (conversation.PurpleConversation *conv,
                                glib.gsize size):
     debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "conversation", "custom_smiley_write\n")
     try:
                                glib.gsize size):
     debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "conversation", "custom_smiley_write\n")
     try:
-        (<object>conversations_cbs["custom_smiley_write"])("custom_smiley_write")
+        (<object>conversation_cbs["custom_smiley_write"])("custom_smiley_write")
     except KeyError:
         pass
 
     except KeyError:
         pass
 
@@ -151,13 +151,13 @@ cdef void custom_smiley_close (conversation.PurpleConversation *conv,
                                const_char *smile):
     debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "conversation", "custom_smiley_close\n")
     try:
                                const_char *smile):
     debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "conversation", "custom_smiley_close\n")
     try:
-        (<object>conversations_cbs["custom_smiley_close"])("custom_smiley_close")
+        (<object>conversation_cbs["custom_smiley_close"])("custom_smiley_close")
     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")
     try:
     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")
     try:
-        (<object>conversations_cbs["send_confirm"])("send_confirm")
+        (<object>conversation_cbs["send_confirm"])("send_confirm")
     except KeyError:
         pass
     except KeyError:
         pass
index c260065..7c06738 100644 (file)
 #
 
 cimport glib
 #
 
 cimport glib
+
 cimport proxy
 cimport proxy
+cimport status
+
+cdef extern from *:
+    ctypedef char const_char "const char"
 
 cdef extern from "libpurple/account.h":
 
 cdef extern from "libpurple/account.h":
+    ctypedef void (*PurpleAccountRequestAuthorizationCb) (void *)
+
     ctypedef struct PurpleAccount:
         char *username
         char *alias
     ctypedef struct PurpleAccount:
         char *username
         char *alias
@@ -31,7 +38,18 @@ cdef extern from "libpurple/account.h":
         char *protocol_id
 
     ctypedef struct PurpleAccountUiOps:
         char *protocol_id
 
     ctypedef struct PurpleAccountUiOps:
-        pass
+        void (*notify_added) (PurpleAccount *account, const_char *remote_user, \
+                const_char *id, const_char *alias, const_char *message)
+        void (*status_changed) (PurpleAccount *account, \
+                status.PurpleStatus *status)
+        void (*request_add) (PurpleAccount *account, const_char *remote_user, \
+                const_char *id, const_char *alias, const_char *message)
+        void *(*request_authorize) (PurpleAccount *account, \
+                const_char *remote_user, const_char *id, const_char *alias, \
+                const_char *message, glib.gboolean on_list, \
+                PurpleAccountRequestAuthorizationCb authorize_cb, \
+                PurpleAccountRequestAuthorizationCb deny_cb, void *user_data)
+        void (*close_account_request) (void *ui_handle)
 
     PurpleAccount *c_purple_account_new "purple_account_new" \
             (char *username, char *protocol_id)
 
     PurpleAccount *c_purple_account_new "purple_account_new" \
             (char *username, char *protocol_id)
index 1460ffa..56747e5 100644 (file)
@@ -20,6 +20,8 @@
 cimport glib
 
 cdef extern from "libpurple/status.h":
 cimport glib
 
 cdef extern from "libpurple/status.h":
+    ctypedef struct PurpleStatus
+
     ctypedef struct PurplePresence:
         pass
 
     ctypedef struct PurplePresence:
         pass
 
index 2e82c9c..eafc95d 100644 (file)
@@ -4,26 +4,38 @@ import getpass
 import sys
 
 cbs = {}
 import sys
 
 cbs = {}
+acc_cbs = {}
 conv_cbs = {}
 
 conv_cbs = {}
 
-def callback(name):
-    print "---- callback example: %s" % name
-
-conv_cbs["create_conversation"] = callback
-conv_cbs["destroy_conversation"] = callback
-conv_cbs["write_chat"] = callback
-conv_cbs["write_im"] = callback
-conv_cbs["write_conv"] = callback
-conv_cbs["chat_add_users"] = callback
-conv_cbs["chat_rename_user"] = callback
-conv_cbs["chat_remove_users"] = callback
-conv_cbs["chat_update_user"] = callback
-conv_cbs["present"] = callback
-conv_cbs["has_focus"] = callback
-conv_cbs["custom_smiley_add"] = callback
-conv_cbs["custom_smiley_write"] = callback
-conv_cbs["custom_smiley_close"] = callback
-conv_cbs["send_confirm"] = callback
+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 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_im"] = conv_callback
+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
 
 
 cbs["conversation"] = conv_cbs
 
index df17ba0..8136de8 100644 (file)
@@ -29,12 +29,14 @@ __APP_NAME__ = "carman-purple-python"
 __APP_VERSION__ = "0.1"
 
 cdef core.PurpleCoreUiOps c_core_ui_ops
 __APP_VERSION__ = "0.1"
 
 cdef core.PurpleCoreUiOps c_core_ui_ops
+cdef account.PurpleAccountUiOps c_account_ui_ops
 cdef conversation.PurpleConversationUiOps c_conv_ui_ops
 cdef eventloop.PurpleEventLoopUiOps c_eventloop_ui_ops
 cdef glib.GHashTable *c_ui_info
 
 c_ui_info = NULL
 
 cdef conversation.PurpleConversationUiOps c_conv_ui_ops
 cdef eventloop.PurpleEventLoopUiOps c_eventloop_ui_ops
 cdef glib.GHashTable *c_ui_info
 
 c_ui_info = NULL
 
+include "account_cbs.pxd"
 include "conversation_cbs.pxd"
 
 cdef class Purple:
 include "conversation_cbs.pxd"
 
 cdef class Purple:
@@ -74,8 +76,10 @@ cdef class Purple:
     cdef void __core_ui_ops_ui_init(self):
         debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "core_ui_ops", "ui_init\n")
 
     cdef void __core_ui_ops_ui_init(self):
         debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "core_ui_ops", "ui_init\n")
 
+        global c_account_ui_ops
         global c_conv_ui_ops
 
         global c_conv_ui_ops
 
+        account.c_purple_accounts_set_ui_ops(&c_account_ui_ops)
         conversation.c_purple_conversations_set_ui_ops(&c_conv_ui_ops)
         # FIXME: Add core ui initialization here
 
         conversation.c_purple_conversations_set_ui_ops(&c_conv_ui_ops)
         # FIXME: Add core ui initialization here
 
@@ -113,13 +117,23 @@ cdef class Purple:
     def purple_init(self, callbacks_dict=None):
         """ Initializes libpurple """
 
     def purple_init(self, callbacks_dict=None):
         """ Initializes libpurple """
 
+        global c_account_ui_ops
         global c_conv_ui_ops
         global c_core_ui_ops
         global c_eventloop_ui_ops
 
         if callbacks_dict is not None:
         global c_conv_ui_ops
         global c_core_ui_ops
         global c_eventloop_ui_ops
 
         if callbacks_dict is not None:
-            global conversations_cbs
-            conversations_cbs = callbacks_dict["conversation"]
+            global account_cbs
+            global conversation_cbs
+
+            account_cbs = callbacks_dict["account"]
+            conversation_cbs = callbacks_dict["conversation"]
+
+        c_account_ui_ops.notify_added = notify_added
+        c_account_ui_ops.status_changed = status_changed
+        c_account_ui_ops.request_add = request_add
+        c_account_ui_ops.request_authorize = request_authorize
+        c_account_ui_ops.close_account_request = close_account_request
 
         c_conv_ui_ops.create_conversation = create_conversation
         c_conv_ui_ops.destroy_conversation = destroy_conversation
 
         c_conv_ui_ops.create_conversation = create_conversation
         c_conv_ui_ops.destroy_conversation = destroy_conversation