Updated signals with "signed-on", "signed-off" and "buddy-signed-on" signals.
authorRagner Magalhaes <ragner.magalhaes@openbossa.org>
Tue, 2 Dec 2008 20:52:01 +0000 (20:52 +0000)
committerAnderson Briglia <anderson.briglia@openbossa.org>
Sat, 28 Feb 2009 21:11:14 +0000 (17:11 -0400)
FIXES:
 - Updated signals with "signed-on", "signed-off" and "buddy-signed-on" signals.
 - Removed signed-on binding on Connection class.

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

connection.pyx
nullclient-ecore.py
purple.pyx
signal_cbs.pxd

index 19da891..fe9cb75 100644 (file)
 
 cimport purple
 
 
 cimport purple
 
-cdef void signed_on_cb (connection.PurpleConnection *gc, glib.gpointer null):
-    cdef account.PurpleAccount *acc = connection.c_purple_connection_get_account(gc)
-    print "Account connected: %s %s" % (acc.username, acc.protocol_id)
-
 cdef class Connection:
     """ Connection class """
     cdef connection.PurpleConnection *__conn
 
     def __init__(self):
         pass
 cdef class Connection:
     """ Connection class """
     cdef connection.PurpleConnection *__conn
 
     def __init__(self):
         pass
-
-    def connect(self):
-        cdef int handle
-
-        signals.c_purple_signal_connect(connection.c_purple_connections_get_handle(),
-            "signed-on", &handle, <signals.PurpleCallback> signed_on_cb, NULL)
index 0af42a8..fa7b1cd 100644 (file)
@@ -3,7 +3,7 @@
 import etk
 import ecore
 import purple
 import etk
 import ecore
 import purple
-from xml.dom import minidom
+#from xml.dom import minidom
 
 class MainWindow:
     def __init__(self, quit_cb):
 
 class MainWindow:
     def __init__(self, quit_cb):
@@ -200,22 +200,32 @@ class NullClientPurple(object):
                 self.window.txt_area.text += sender + ": " + message + "<br> "
             self.window.show()
 
                 self.window.txt_area.text += sender + ": " + message + "<br> "
             self.window.show()
 
+    def __purple_signal_signed_on_cb(self, username, protocol_id):
+        print "[DEBUG] Signed on: %s %s" % (username, protocol_id)
+
+    def __purple_signal_signed_off_cb(self, username, protocol_id):
+        print "[DEBUG] Signed off: %s %s" % (username, protocol_id)
+
+    def __purple_signal_buddy_signed_on_cb(self, name, alias):
+        print "[DEBUG]: Buddy signed on: %s %s" % (name, alias)
+
     def __purple_signal_buddy_signed_off_cb(self, name, alias):
         if self.buddies.has_key(name):
             self.buddies[name] = None
             self.buddies.pop(name)
     def __purple_signal_buddy_signed_off_cb(self, name, alias):
         if self.buddies.has_key(name):
             self.buddies[name] = None
             self.buddies.pop(name)
-            print "[DEBUG]: Buddy removed!"
+            print "[DEBUG]: Buddy signed off: %s %s" % (name, alias)
         self.window.remove_buddy(name)
 
         self.window.remove_buddy(name)
 
+    """
     def __purple_signal_jabber_receiving_xmlnode_cb(self, message):
     def __purple_signal_jabber_receiving_xmlnode_cb(self, message):
-    xml = minidom.parse(message)
-
-    for msg in xml.getElementsByTagName("message"):
-        who = msg.getAttribute("from")
-        for geoloc in msg.getElementsByTagNameNS("http://jabber.org/protocol/geoloc", "geoloc"):
-            lat = geoloc.getElementsByTagName("lat")[0].childNodes[0].nodeValue
-            lon = geoloc.getElementsByTagName("lon")[0].childNodes[0].nodeValue
-            print "who: %s lat: %s lon: %s" % (who, lat, lon)
+        xml = minidom.parse(message)
+        for msg in xml.getElementsByTagName("message"):
+            who = msg.getAttribute("from")
+            for geoloc in msg.getElementsByTagNameNS("http://jabber.org/protocol/geoloc", "geoloc"):
+                lat = geoloc.getElementsByTagName("lat")[0].childNodes[0].nodeValue
+                lon = geoloc.getElementsByTagName("lon")[0].childNodes[0].nodeValue
+                print "who: %s lat: %s lon: %s" % (who, lat, lon)
+    """
 
     def add_account(self):
         username = "carmanplugintest@gmail.com"
 
     def add_account(self):
         username = "carmanplugintest@gmail.com"
@@ -232,9 +242,11 @@ class NullClientPurple(object):
             self.account.get_protocol_options()
             self.account.set_enabled("carman-purple-python", True)
             self.account.password = password
             self.account.get_protocol_options()
             self.account.set_enabled("carman-purple-python", True)
             self.account.password = password
-            self.purple.connect()
+            self.purple.signal_connect("signed-on", self.__purple_signal_signed_on_cb)
+            self.purple.signal_connect("signed-off", self.__purple_signal_signed_off_cb)
+            self.purple.signal_connect("buddy-signed-on", self.__purple_signal_buddy_signed_on_cb)
             self.purple.signal_connect("buddy-signed-off", self.__purple_signal_buddy_signed_off_cb)
             self.purple.signal_connect("buddy-signed-off", self.__purple_signal_buddy_signed_off_cb)
-            self.purple.signal_connect("jabber-receiving-xmlnode", self.__purple_signal_jabber_receiving_xmlnode_cb)
+            #self.purple.signal_connect("jabber-receiving-xmlnode", self.__purple_signal_jabber_receiving_xmlnode_cb)
 
     def send_msg(self, name, msg):
         if not self.conversations.has_key(name):
 
     def send_msg(self, name, msg):
         if not self.conversations.has_key(name):
index 82c6035..8d0eba9 100644 (file)
@@ -260,10 +260,6 @@ cdef class Purple:
           "notify": notify_cbs,
           "request": request_cbs }[type][name] = func
 
           "notify": notify_cbs,
           "request": request_cbs }[type][name] = func
 
-    def connect(self):
-        conn = Connection()
-        conn.connect()
-
     def signal_connect(self, name=None, cb=None):
         cdef int handle
         cdef plugin.PurplePlugin *jabber
     def signal_connect(self, name=None, cb=None):
         cdef int handle
         cdef plugin.PurplePlugin *jabber
@@ -278,7 +274,22 @@ cdef class Purple:
         global signal_cbs
         signal_cbs[name] = cb
 
         global signal_cbs
         signal_cbs[name] = cb
 
-        if name == "buddy-signed-off":
+        if name == "signed-on":
+            signals.c_purple_signal_connect(
+                    connection.c_purple_connections_get_handle(),
+                    "signed-on", &handle,
+                    <signals.PurpleCallback> signal_signed_on_cb, NULL)
+        elif name == "signed-off":
+            signals.c_purple_signal_connect(
+                    connection.c_purple_connections_get_handle(),
+                    "signed-off", &handle,
+                    <signals.PurpleCallback> signal_signed_off_cb, NULL)
+        elif name == "buddy-signed-on":
+            signals.c_purple_signal_connect(
+                    blist.c_purple_blist_get_handle(),
+                    "buddy-signed-on", &handle,
+                    <signals.PurpleCallback> signal_buddy_signed_on_cb, NULL)
+        elif name == "buddy-signed-off":
             signals.c_purple_signal_connect(
                     blist.c_purple_blist_get_handle(),
                     "buddy-signed-off", &handle,
             signals.c_purple_signal_connect(
                     blist.c_purple_blist_get_handle(),
                     "buddy-signed-off", &handle,
@@ -334,5 +345,5 @@ cdef class Purple:
 include "proxy.pyx"
 include "account.pyx"
 include "buddy.pyx"
 include "proxy.pyx"
 include "account.pyx"
 include "buddy.pyx"
-include "connection.pyx"
+#include "connection.pyx"
 include "conversation.pyx"
 include "conversation.pyx"
index 8155b74..14a7434 100644 (file)
@@ -21,6 +21,73 @@ cimport purple
 
 signal_cbs = {}
 
 
 signal_cbs = {}
 
+cdef void signal_signed_on_cb (connection.PurpleConnection *gc, \
+                               glib.gpointer null):
+    cdef account.PurpleAccount *acc = connection.c_purple_connection_get_account(gc)
+    cdef char *c_username = NULL
+    cdef char *c_protocol_id = NULL
+
+    c_username = <char *> account.c_purple_account_get_username(acc)
+    if c_username == NULL:
+        username = None
+    else:
+        username = c_username
+
+    c_protocol_id = <char *> account.c_purple_account_get_protocol_id(acc)
+    if c_protocol_id == NULL:
+        protocol_id = None
+    else:
+        protocol_id = c_protocol_id
+
+    try:
+        (<object> signal_cbs["signed-on"])(username, protocol_id)
+    except KeyError:
+        pass
+
+cdef void signal_signed_off_cb (connection.PurpleConnection *gc, \
+                               glib.gpointer null):
+    cdef account.PurpleAccount *acc = connection.c_purple_connection_get_account(gc)
+    cdef char *c_username = NULL
+    cdef char *c_protocol_id = NULL
+
+    c_username = <char *> account.c_purple_account_get_username(acc)
+    if c_username == NULL:
+        username = None
+    else:
+        username = c_username
+
+    c_protocol_id = <char *> account.c_purple_account_get_protocol_id(acc)
+    if c_protocol_id == NULL:
+        protocol_id = None
+    else:
+        protocol_id = c_protocol_id
+
+    try:
+        (<object> signal_cbs["signed-off"])(username, protocol_id)
+    except KeyError:
+        pass
+
+cdef void signal_buddy_signed_on_cb (blist.PurpleBuddy *buddy):
+    cdef char *c_name = NULL
+    cdef char *c_alias = NULL
+
+    c_name = <char *> blist.c_purple_buddy_get_name(buddy)
+    if c_name == NULL:
+        name = None
+    else:
+        name = c_name
+
+    c_alias = <char *> blist.c_purple_buddy_get_alias_only(buddy)
+    if c_alias == NULL:
+        alias = None
+    else:
+        alias = c_alias
+
+    try:
+        (<object> signal_cbs["buddy-signed-on"])(name, alias)
+    except KeyError:
+        pass
+
 cdef void signal_buddy_signed_off_cb (blist.PurpleBuddy *buddy):
     cdef char *c_name = NULL
     cdef char *c_alias = NULL
 cdef void signal_buddy_signed_off_cb (blist.PurpleBuddy *buddy):
     cdef char *c_name = NULL
     cdef char *c_alias = NULL