From: Ragner Magalhaes Date: Tue, 2 Dec 2008 20:52:01 +0000 (+0000) Subject: Updated signals with "signed-on", "signed-off" and "buddy-signed-on" signals. X-Git-Url: http://git.maemo.org/git/?p=python-purple;a=commitdiff_plain;h=8876038da92fb092bab29fdc149b536d0aea1264;ds=sidebyside Updated signals with "signed-on", "signed-off" and "buddy-signed-on" signals. 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 git-svn-id: https://garage.maemo.org/svn/carman/branches/carman-0.7-beta2/python-purple@1362 596f6dd7-e928-0410-a184-9e12fd12cf7e --- diff --git a/connection.pyx b/connection.pyx index 19da891..fe9cb75 100644 --- a/connection.pyx +++ b/connection.pyx @@ -19,19 +19,9 @@ 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 - - def connect(self): - cdef int handle - - signals.c_purple_signal_connect(connection.c_purple_connections_get_handle(), - "signed-on", &handle, signed_on_cb, NULL) diff --git a/nullclient-ecore.py b/nullclient-ecore.py index 0af42a8..fa7b1cd 100644 --- a/nullclient-ecore.py +++ b/nullclient-ecore.py @@ -3,7 +3,7 @@ import etk import ecore import purple -from xml.dom import minidom +#from xml.dom import minidom class MainWindow: def __init__(self, quit_cb): @@ -200,22 +200,32 @@ class NullClientPurple(object): self.window.txt_area.text += sender + ": " + message + "
" 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) - print "[DEBUG]: Buddy removed!" + print "[DEBUG]: Buddy signed off: %s %s" % (name, alias) self.window.remove_buddy(name) + """ 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" @@ -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.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("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): diff --git a/purple.pyx b/purple.pyx index 82c6035..8d0eba9 100644 --- a/purple.pyx +++ b/purple.pyx @@ -260,10 +260,6 @@ cdef class Purple: "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 @@ -278,7 +274,22 @@ cdef class Purple: 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, + signal_signed_on_cb, NULL) + elif name == "signed-off": + signals.c_purple_signal_connect( + connection.c_purple_connections_get_handle(), + "signed-off", &handle, + 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, + 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, @@ -334,5 +345,5 @@ cdef class Purple: include "proxy.pyx" include "account.pyx" include "buddy.pyx" -include "connection.pyx" +#include "connection.pyx" include "conversation.pyx" diff --git a/signal_cbs.pxd b/signal_cbs.pxd index 8155b74..14a7434 100644 --- a/signal_cbs.pxd +++ b/signal_cbs.pxd @@ -21,6 +21,73 @@ cimport purple 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 = account.c_purple_account_get_username(acc) + if c_username == NULL: + username = None + else: + username = c_username + + c_protocol_id = account.c_purple_account_get_protocol_id(acc) + if c_protocol_id == NULL: + protocol_id = None + else: + protocol_id = c_protocol_id + + try: + ( 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 = account.c_purple_account_get_username(acc) + if c_username == NULL: + username = None + else: + username = c_username + + c_protocol_id = account.c_purple_account_get_protocol_id(acc) + if c_protocol_id == NULL: + protocol_id = None + else: + protocol_id = c_protocol_id + + try: + ( 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 = blist.c_purple_buddy_get_name(buddy) + if c_name == NULL: + name = None + else: + name = c_name + + c_alias = blist.c_purple_buddy_get_alias_only(buddy) + if c_alias == NULL: + alias = None + else: + alias = c_alias + + try: + ( 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