X-Git-Url: http://git.maemo.org/git/?p=python-purple;a=blobdiff_plain;f=buddy.pyx;h=934ef6855da6395991be2d6a5ae001e15528cdb9;hp=1c3be6ca70bb5dbb7031280909325e743f4d183b;hb=80d8a8e4ec823f17c63c3ddd5e9e3db629303ab5;hpb=5cf9ef61f1ac6ccb0b3eaea65988873baf0a483a;ds=sidebyside diff --git a/buddy.pyx b/buddy.pyx index 1c3be6c..934ef68 100644 --- a/buddy.pyx +++ b/buddy.pyx @@ -20,28 +20,125 @@ cimport purple cdef class Buddy: - """ Buddy class """ - cdef blist.PurpleBuddy *c_buddy - cdef Account __acc + """ + Buddy class + @param name + @param account + """ - def __init__(self): - self.c_buddy = NULL + cdef object __account + cdef object __name + cdef object __exists - def new_buddy(self, acc, char *scr, char *alias): - self.__acc = acc - self.c_buddy = blist.c_purple_buddy_new(\ - self.__acc.c_account, scr, alias) + def __init__(self, name, account): + self.__name = name + self.__account = account - def __get_alias(self): - return blist.c_purple_buddy_get_alias_only(self.c_buddy) - alias = property(__get_alias) + if self._get_structure() != NULL: + self.__exists = True + else: + self.__exists = False + + cdef blist.PurpleBuddy *_get_structure(self): + return blist.purple_find_buddy(account.purple_accounts_find( \ + self.__account.username, self.__account.protocol.id), \ + self.__name) def __get_name(self): - return blist.c_purple_buddy_get_name(self.c_buddy) + if self.__exists: + return blist.purple_buddy_get_name(self._get_structure()) + else: + return self.__name name = property(__get_name) + def __get_account(self): + if self.__exists: + return self.__account + else: + return None + account = property(__get_account) + + def __get_alias(self): + cdef char *c_alias = NULL + c_alias = blist.purple_buddy_get_alias_only( \ + self._get_structure()) + if c_alias: + return c_alias + else: + return None + alias = property(__get_alias) + + def __get_server_alias(self): + cdef char *c_server_alias = NULL + c_server_alias = blist.purple_buddy_get_server_alias( \ + self._get_structure()) + if c_server_alias: + return c_server_alias + else: + return None + server_alias = property(__get_server_alias) + + def __get_contact_alias(self): + cdef char *c_contact_alias = NULL + c_contact_alias = blist.purple_buddy_get_contact_alias( \ + self._get_structure()) + if c_contact_alias: + return c_contact_alias + else: + return None + contact_alias = property(__get_contact_alias) + + def __get_local_alias(self): + cdef char *c_local_alias = NULL + c_local_alias = blist.purple_buddy_get_local_alias( \ + self._get_structure()) + if c_local_alias: + return c_local_alias + else: + return None + local_alias = property(__get_local_alias) + + def __get_available(self): + if self.__exists: + return status.purple_presence_is_available( \ + blist.purple_buddy_get_presence(self._get_structure())) + else: + return None + available = property(__get_available) + def __get_online(self): - 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)) + if self.__exists: + return status.purple_presence_is_online( \ + blist.purple_buddy_get_presence(self._get_structure())) + else: + return None online = property(__get_online) + + def __get_idle(self): + if self.__exists: + return status.purple_presence_is_idle( \ + blist.purple_buddy_get_presence(self._get_structure())) + else: + return None + idle = property(__get_idle) + + def new(self, alias=None): + """ + Created a new buddy. + + @param alias (optional) + @return True if successful, False if buddy already exists + """ + cdef char *c_alias = NULL + + if alias: + c_alias = alias + else: + c_alias = NULL + + if self.__exists: + return False + else: + blist.purple_buddy_new(account.purple_accounts_find( \ + self.__account.username, self.__account.protocol.id), \ + self.__name, c_alias)