Added signal callbacks used by pidgin-carman.
authorRagner Magalhaes <ragner.magalhaes@openbossa.org>
Tue, 2 Dec 2008 20:28:53 +0000 (20:28 +0000)
committerAnderson Briglia <anderson.briglia@openbossa.org>
Sat, 28 Feb 2009 21:11:11 +0000 (17:11 -0400)
FIXES:
 - Added signal callbacks used by pidgin-carman.

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

nullclient.py
purple.pyx
signal_cbs.pxd [new file with mode: 0644]

index 76f5e74..81a5ac2 100644 (file)
@@ -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()
index bd2bed5..0c4be9a 100644 (file)
@@ -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,
+                <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"
diff --git a/signal_cbs.pxd b/signal_cbs.pxd
new file mode 100644 (file)
index 0000000..00369e8
--- /dev/null
@@ -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 <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