GList * empathy_chatroom_manager_get_chatrooms (EmpathyChatroomManager *manager, TpAccount *account) { EmpathyChatroomManagerPriv *priv; GList *chatrooms, *l; g_return_val_if_fail (EMPATHY_IS_CHATROOM_MANAGER (manager), NULL); priv = GET_PRIV (manager); if (!account) return g_list_copy (priv->chatrooms); chatrooms = NULL; for (l = priv->chatrooms; l; l = l->next) { EmpathyChatroom *chatroom; chatroom = l->data; if (account == empathy_chatroom_get_account (chatroom)) chatrooms = g_list_append (chatrooms, chatroom); } return chatrooms; }
EmpathyChatroom * empathy_chatroom_manager_find (EmpathyChatroomManager *manager, TpAccount *account, const gchar *room) { EmpathyChatroomManagerPriv *priv; GList *l; g_return_val_if_fail (EMPATHY_IS_CHATROOM_MANAGER (manager), NULL); g_return_val_if_fail (room != NULL, NULL); priv = GET_PRIV (manager); for (l = priv->chatrooms; l; l = l->next) { EmpathyChatroom *chatroom; TpAccount *this_account; const gchar *this_room; chatroom = l->data; this_account = empathy_chatroom_get_account (chatroom); this_room = empathy_chatroom_get_room (chatroom); if (this_account && this_room && account == this_account && strcmp (this_room, room) == 0) return chatroom; } return NULL; }
guint empathy_chatroom_manager_get_count (EmpathyChatroomManager *manager, EmpathyAccount *account) { EmpathyChatroomManagerPriv *priv; GList *l; guint count = 0; g_return_val_if_fail (EMPATHY_IS_CHATROOM_MANAGER (manager), 0); priv = GET_PRIV (manager); if (!account) { return g_list_length (priv->chatrooms); } for (l = priv->chatrooms; l; l = l->next) { EmpathyChatroom *chatroom; chatroom = l->data; if (account == empathy_chatroom_get_account (chatroom)) { count++; } } return count; }
void empathy_chatroom_manager_remove (EmpathyChatroomManager *manager, EmpathyChatroom *chatroom) { EmpathyChatroomManagerPriv *priv; GList *l; g_return_if_fail (EMPATHY_IS_CHATROOM_MANAGER (manager)); g_return_if_fail (EMPATHY_IS_CHATROOM (chatroom)); priv = GET_PRIV (manager); for (l = priv->chatrooms; l; l = l->next) { EmpathyChatroom *this_chatroom; this_chatroom = l->data; if (this_chatroom == chatroom || empathy_chatroom_equal (chatroom, this_chatroom)) { chatroom_manager_remove_link (manager, l); break; } } }
gboolean empathy_chatroom_manager_add (EmpathyChatroomManager *manager, EmpathyChatroom *chatroom) { EmpathyChatroomManagerPriv *priv; g_return_val_if_fail (EMPATHY_IS_CHATROOM_MANAGER (manager), FALSE); g_return_val_if_fail (EMPATHY_IS_CHATROOM (chatroom), FALSE); priv = GET_PRIV (manager); /* don't add more than once */ if (!empathy_chatroom_manager_find (manager, empathy_chatroom_get_account (chatroom), empathy_chatroom_get_room (chatroom))) { add_chatroom (manager, chatroom); if (empathy_chatroom_is_favorite (chatroom)) reset_save_timeout (manager); g_signal_emit (manager, signals[CHATROOM_ADDED], 0, chatroom); return TRUE; } return FALSE; }