sett = str(<char *> setting)
+ if not po.has_key(sett):
+ iter = iter.next
+ continue
+
if type == prefs.PURPLE_PREF_STRING:
str_value = <char *> po[sett]
if self.__exists:
return False
else:
- account.purple_account_new(self.__username, self.__protocol.id)
+ # FIXME: Using purple_accounts_add(...) to save to xml
+ # I think we could improve this ..
+ account.purple_accounts_add(account.purple_account_new( \
+ self.__username, self.__protocol.id))
+
self.__exists = True
return True
+
+ def remove_account(self, username, protocol_id):
+ """
+ Removes as existing account.
+
+ @return True if successful, False if account doesnt exists
+ """
+ who = account.purple_accounts_find(username, protocol_id)
+
+ if who == NULL:
+ return False
+ else
+ account.purple_accounts_remove( who )
+ return True
def connect(self):
"""
else:
return False
+ def add_buddy(self, name, alias=None, group=None):
+ """
+ Adds a buddy to account's buddy list.
+
+ @param name Buddy name
+ @param alias Buddy alias (optional)
+ @return True if successfull, False otherwise
+ """
+ cdef blist.PurpleBuddy *c_buddy = NULL
+ cdef blist.PurpleGroup *c_group = NULL
+ cdef char *c_alias = NULL
+
+ if alias:
+ c_alias = alias
+ else:
+ c_alias = NULL
+
+ if self.__exists and \
+ account.purple_account_is_connected(self._get_structure()):
+ if blist.purple_find_buddy(self._get_structure(), name):
+ return False
+
+ if group:
+ c_group = blist.purple_find_group(group)
+ if c_group == NULL:
+ c_group = blist.purple_group_new(group)
+
+ c_buddy = blist.purple_buddy_new(self._get_structure(), \
+ name, c_alias)
+ if c_buddy == NULL:
+ return False
+
+ blist.purple_blist_add_buddy(c_buddy, NULL, c_group, NULL)
+ account.purple_account_add_buddy(self._get_structure(), c_buddy)
+ return True
+
+ else:
+ return None
+
+ def remove_buddy(self, name):
+ """
+ Removes a buddy from account's buddy list.
+
+ @param name Buddy name
+ @return True if successful, False otherwise
+ """
+ cdef blist.PurpleBuddy *c_buddy = NULL
+ cdef blist.PurpleGroup *c_group = NULL
+
+ if self.__exists and \
+ account.purple_account_is_connected(self._get_structure()):
+ c_buddy = blist.purple_find_buddy(self._get_structure(), name)
+ if c_buddy == NULL:
+ return False
+
+ c_group = blist.purple_buddy_get_group(c_buddy)
+
+ account.purple_account_remove_buddy(self._get_structure(), \
+ c_buddy, c_group)
+ blist.purple_blist_remove_buddy(c_buddy)
+ return True
+ else:
+ return None
+
+ def get_buddies_online(self):
+ cdef glib.GSList *iter = NULL
+ cdef blist.PurpleBuddy *c_buddy = NULL
+ cdef char *c_alias = NULL
+
+ if self.__exists and \
+ account.purple_account_is_connected(self._get_structure()):
+ iter = blist.purple_find_buddies(self._get_structure(), NULL)
+
+ buddies_list = []
+ while iter:
+ c_alias = NULL
+ c_buddy = <blist.PurpleBuddy *> iter.data
+ if <blist.PurpleBuddy *> c_buddy and \
+ status.purple_presence_is_online( \
+ blist.purple_buddy_get_presence(c_buddy)):
+ name = <char *> blist.purple_buddy_get_name(c_buddy)
+
+ new_buddy = Buddy(name, self)
+
+ c_alias = <char *> blist.purple_buddy_get_alias_only(c_buddy)
+ if c_alias:
+ new_buddy.set_alias(c_alias)
+
+ buddies_list.append(new_buddy)
+ iter = iter.next
+ return buddies_list
+ else:
+ return None