Removind Account's dependency and adding _get_structure() function
[python-purple] / buddy.pyx
index fa3be79..5238396 100644 (file)
--- a/buddy.pyx
+++ b/buddy.pyx
 #  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 
 #  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 
+cimport purple
+
 cdef class Buddy:
     """ Buddy class """
 cdef class Buddy:
     """ Buddy class """
-    cdef PurpleBuddy *__buddy
+    cdef blist.PurpleBuddy *c_buddy
+    cdef Account __acc
+
+    def __init__(self):
+        self.c_buddy = NULL
+
+    def __get_account(self):
+        return self.__acc
+    def __set_account(self, acc):
+        self.__acc = acc
+    account = property(__get_account, __set_account)
+
+    def __get_alias(self):
+        if self.c_buddy:
+            return <char *>blist.c_purple_buddy_get_alias_only(self.c_buddy)
+        else:
+            return None
+    alias = property(__get_alias)
+
+    def __get_name(self):
+        if self.c_buddy:
+            return <char *>blist.c_purple_buddy_get_name(self.c_buddy)
+        else:
+            return None
+    name = property(__get_name)
+
+    """
+    def __get_online(self): # FIXME
+        name = self.name
+        self.c_buddy = blist.c_purple_find_buddy(self.__acc.c_account, name)
+        return status.c_purple_presence_is_online(blist.c_purple_buddy_get_presence(self.c_buddy))
+    online = property(__get_online)
+    """
 
 
-    def __cinit__(self):
-        self.__buddy = NULL
+    def new_buddy(self, acc, name, alias):
+        self.__acc = acc
+        cdef char *c_name = NULL
+        cdef char *c_alias = NULL
 
 
-    def new_buddy(self, acc, const_char_ptr scr, const_char_ptr alias):
-        self.__buddy = c_purple_buddy_new(<PurpleAccount *>acc.__account, scr, alias)
+        if name is not None:
+            c_name = name
 
 
-    def get_alias(self):
-        return c_purple_buddy_get_alias_only(self.__buddy)
+        if alias is not None:
+            c_alias = alias
 
 
-    def get_name(self):
-        return c_purple_buddy_get_name(self.__buddy)
+        self.c_buddy = blist.c_purple_buddy_new(<account.PurpleAccount *>\
+                self.__acc.c_account, c_name, c_alias)