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;
}
Ejemplo n.º 3
0
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;
        }
    }
}
Ejemplo n.º 5
0
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;
}