X-Git-Url: http://git.maemo.org/git/?p=python-purple;a=blobdiff_plain;f=purple.pyx;h=6bf24282d4be41eebd07b9b70a64dcd965d6bd6b;hp=94613f2bbd37bb36fc91f1d5bb19511462a823c6;hb=88af0d43860a99bcd5a6229c76b62344615b4451;hpb=61d2c35c5084836d751dda7bd0ee63ad09a9e9ea diff --git a/purple.pyx b/purple.pyx index 94613f2..6bf2428 100644 --- a/purple.pyx +++ b/purple.pyx @@ -19,6 +19,8 @@ include "glib.pxd" +import ecore + cdef extern from *: ctypedef char* const_char_ptr "const char *" @@ -39,7 +41,7 @@ cdef extern from "libpurple/core.h": void (*debug_ui_init) () void (*ui_init) () void (*quit) () - GHashTable (*get_ui_info) () + GHashTable* (*get_ui_info) () gboolean c_purple_core_init "purple_core_init" (const_char_ptr ui_name) void c_purple_core_quit "purple_core_quit" () @@ -76,7 +78,19 @@ cdef extern from "libpurple/eventloop.h": void c_purple_eventloop_set_ui_ops "purple_eventloop_set_ui_ops" (PurpleEventLoopUiOps *ops) cdef extern from "libpurple/plugin.h": + ctypedef struct PurplePlugin + + cdef struct _PurplePluginInfo: + char *id + char *name + ctypedef _PurplePluginInfo PurplePluginInfo + + cdef struct _PurplePlugin: + PurplePluginInfo *info # The plugin information. + ctypedef _PurplePlugin PurplePlugin + void c_purple_plugins_add_search_path "purple_plugins_add_search_path" (const_char_ptr path) + GList *c_purple_plugins_get_protocols "purple_plugins_get_protocols" () cdef extern from "libpurple/pounce.h": gboolean c_purple_pounces_load "purple_pounces_load" () @@ -92,8 +106,9 @@ cdef extern from "libpurple/util.h": cdef extern from "c_purple.h": guint glib_input_add(gint fd, PurpleInputCondition condition, PurpleInputFunction function, gpointer data) + void glib_main_loop() -__DEFAULT_PATH__ = "/home/user/MyDocs/Carman" +__DEFAULT_PATH__ = "/tmp" __APP_NAME__ = "carman-purple-python" __APP_VERSION__ = "0.1" @@ -119,6 +134,9 @@ cdef class Purple: c_purple_debug_set_enabled(debug_enabled) c_purple_util_set_user_dir(default_path) c_purple_plugins_add_search_path(default_path) + + # adds glib iteration inside ecore main loop + ecore.idler_add(self.__glib_iteration_when_idle) # __cinit__ def __del__(self): @@ -146,7 +164,6 @@ cdef class Purple: # __core_ui_ops_quit cdef GHashTable *__core_ui_ops_get_ui_info(self): - # FIXME: warning: assignment from incompatible pointer type if self.c_ui_info == NULL: self.c_ui_info = g_hash_table_new(g_str_hash, g_str_equal) @@ -155,6 +172,11 @@ cdef class Purple: return self.c_ui_info # __core_ui_ops_get_ui_info + def __glib_iteration_when_idle(self): + g_main_context_iteration(NULL, False) + return True + # __glib_iteration_when_idle + def purple_init(self): """ Initializes libpurple """ # initialize c_core_ui_ops structure @@ -162,7 +184,7 @@ cdef class Purple: self.c_core_ui_ops.debug_ui_init = self.__core_ui_ops_debug_init self.c_core_ui_ops.ui_init = self.__core_ui_ops_ui_init self.c_core_ui_ops.quit = self.__core_ui_ops_quit - self.c_core_ui_ops.get_ui_info = self.__core_ui_ops_get_ui_info + self.c_core_ui_ops.get_ui_info = self.__core_ui_ops_get_ui_info c_purple_core_set_ui_ops(&self.c_core_ui_ops) @@ -194,13 +216,35 @@ cdef class Purple: # load pounces c_purple_pounces_load() + return ret # core_init # Purple + def get_protocols(self): + cdef GList *iter + cdef PurplePlugin *plugin + protocols = [] + iter = c_purple_plugins_get_protocols() + while iter: + plugin = iter.data + if plugin.info and plugin.info.name: + protocols += [(plugin.info.id, plugin.info.name)] + iter = iter.next + return protocols + + def connect(self): + conn = Connection() + conn.connect() + + def run_loop(self): + glib_main_loop() + include "core/account.pxd" include "core/buddy.pxd" -#include "core/connection.pxd" +include "glib.pxd" +#include "core/blist.pxd" +include "core/connection.pxd" #include "core/core.pxd" #include "core/idle.pxd"