conv_cbs = {}
notify_cbs = {}
request_cbs = {}
+signal_cbs = {}
def account_callback(name):
print "---- account callback example: %s" % name
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)
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()
include "notify_cbs.pxd"
include "request_cbs.pxd"
#include "roomlist_cbs.pxd"
+include "signal_cbs.pxd"
cdef class Purple:
""" Purple class.
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,
+ <signals.PurpleCallback> signal_buddy_signed_off_cb, NULL)
+
+ signals.c_purple_signal_connect(
+ conversation.c_purple_conversations_get_handle(),
+ "receiving-im-msg", &handle,
+ <signals.PurpleCallback> signal_receiving_im_msg_cb, NULL)
+
include "proxy.pyx"
include "account.pyx"
include "buddy.pyx"
--- /dev/null
+#
+# 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
+
+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:
+ (<object>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:
+ (<object>signal_cbs["receiving_im_msg"])(sender[0], message[0])
+ except KeyError:
+ pass