From 3ac088be4b86dfb87718586f7a095f88b566ce42 Mon Sep 17 00:00:00 2001 From: Ragner Magalhaes Date: Tue, 2 Dec 2008 20:28:53 +0000 Subject: [PATCH 1/1] Added signal callbacks used by pidgin-carman. FIXES: - Added signal callbacks used by pidgin-carman. Signed-off-by: Bruno Abinader git-svn-id: https://garage.maemo.org/svn/carman/branches/carman-0.7-beta2/python-purple@1309 596f6dd7-e928-0410-a184-9e12fd12cf7e --- nullclient.py | 12 ++++++++++++ purple.pyx | 17 +++++++++++++++++ signal_cbs.pxd | 42 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 71 insertions(+) create mode 100644 signal_cbs.pxd diff --git a/nullclient.py b/nullclient.py index 76f5e74..81a5ac2 100644 --- a/nullclient.py +++ b/nullclient.py @@ -10,6 +10,7 @@ conn_cbs = {} conv_cbs = {} notify_cbs = {} request_cbs = {} +signal_cbs = {} def account_callback(name): print "---- account callback example: %s" % name @@ -101,6 +102,16 @@ request_cbs["request_folder"] = request_callback cbs["request"] = request_cbs +def buddy_signed_off_cb(name): + print "---- signal callback example: sign off from buddy %s" % name + +def receiving_im_msg_cb(sender, message): + print "---- signal callback example: receiving im message from %s" % sender + print "---- message: %s" % message + +signal_cbs["buddy_signed_off"] = buddy_signed_off_cb +signal_cbs["receiving_im_msg"] = receiving_im_msg_cb + class NullClient: def __init__(self): self.p = purple.Purple(debug_enabled=False) @@ -144,5 +155,6 @@ if __name__ == '__main__': client.new_account(username, client.protocol, password) client.p.connect() + client.p.attach_signals(signal_cbs) ecore.timer_add(20, client.get_buddies) ecore.main_loop_begin() diff --git a/purple.pyx b/purple.pyx index bd2bed5..0c4be9a 100644 --- a/purple.pyx +++ b/purple.pyx @@ -51,6 +51,7 @@ include "conversation_cbs.pxd" include "notify_cbs.pxd" include "request_cbs.pxd" #include "roomlist_cbs.pxd" +include "signal_cbs.pxd" cdef class Purple: """ Purple class. @@ -260,6 +261,22 @@ cdef class Purple: conn = Connection() conn.connect() + def attach_signals(self, __signal_cbs=None): + if __signal_cbs is not None: + global signal_cbs + signal_cbs = __signal_cbs + + cdef int handle + + signals.c_purple_signal_connect(blist.c_purple_blist_get_handle(), + "buddy-signed-off", &handle, + signal_buddy_signed_off_cb, NULL) + + signals.c_purple_signal_connect( + conversation.c_purple_conversations_get_handle(), + "receiving-im-msg", &handle, + signal_receiving_im_msg_cb, NULL) + include "proxy.pyx" include "account.pyx" include "buddy.pyx" diff --git a/signal_cbs.pxd b/signal_cbs.pxd new file mode 100644 index 0000000..00369e8 --- /dev/null +++ b/signal_cbs.pxd @@ -0,0 +1,42 @@ +# +# 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 + +signal_cbs = {} + +cdef void signal_buddy_signed_off_cb (blist.PurpleBuddy *buddy): + debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "signal", + "buddy_signed_off\n") + try: + (signal_cbs["buddy_signed_off"])(buddy.name) + except KeyError: + pass + +cdef glib.gboolean signal_receiving_im_msg_cb (account.PurpleAccount *account, + char **sender, + char **message, + conversation.PurpleConversation *conv, + conversation.PurpleMessageFlags *flags): + debug.c_purple_debug(debug.PURPLE_DEBUG_INFO, "signal", + "receivinv_im_msg_cb\n") + try: + (signal_cbs["receiving_im_msg"])(sender[0], message[0]) + except KeyError: + pass -- 1.7.9.5