diff src/protocols/msn/user.c @ 5518:bf2a7a7b739d

[gaim-migrate @ 5918] Reworked the group support. You should now be able to delete groups by dragging a user into them and then back out. I stress _should_. This will likely have bugs. I cleaned up the ones I found, I think, but I'm not 100% confident here :) Please test! Preferably on test accounts, but it won't kill things, just reorder stuff. committer: Tailor Script <tailor@pidgin.im>
author Christian Hammond <chipx86@chipx86.com>
date Sun, 25 May 2003 22:51:19 +0000
parents ad9887c91a59
children b7e113a59b51
line wrap: on
line diff
--- a/src/protocols/msn/user.c	Sun May 25 19:47:13 2003 +0000
+++ b/src/protocols/msn/user.c	Sun May 25 22:51:19 2003 +0000
@@ -29,27 +29,20 @@
 
 	user = msn_users_find_with_passport(session->users, passport);
 
-	if (user != NULL) {
-		if (name != NULL)
-			msn_user_set_name(user, name);
+	if (user == NULL) {
+		user = g_new0(MsnUser, 1);
 
-		msn_user_ref(user);
+		user->session = session;
 
-		return user;
-	}
+		msn_user_set_passport(user, passport);
+		msn_user_set_group_id(user, -1);
 
-	user = g_new0(MsnUser, 1);
-
-	user->session = session;
+		msn_users_add(session->users, user);
+	}
 
 	if (name != NULL)
 		msn_user_set_name(user, name);
 
-	msn_user_set_passport(user, passport);
-	msn_user_set_group_id(user, -1);
-
-	msn_users_add(session->users, user);
-
 	msn_user_ref(user);
 
 	return user;
@@ -254,10 +247,17 @@
 void
 msn_users_destroy(MsnUsers *users)
 {
+	GList *l, *l_next = NULL;
+
 	g_return_if_fail(users != NULL);
 
-	while (users->users != NULL)
-		msn_user_destroy(users->users->data);
+	for (l = users->users; l != NULL; l = l_next) {
+		l_next = l->next;
+
+		msn_user_destroy(l->data);
+
+		users->users = g_list_remove(users->users, l->data);
+	}
 
 	/* See if we've leaked anybody. */
 	while (users->users != NULL) {
@@ -276,15 +276,27 @@
 	g_return_if_fail(user != NULL);
 
 	users->users = g_list_append(users->users, user);
+
+	users->count++;
 }
 
 void
 msn_users_remove(MsnUsers *users, MsnUser *user)
 {
 	g_return_if_fail(users != NULL);
-	g_return_if_fail(user != NULL);
+	g_return_if_fail(user  != NULL);
 
 	users->users = g_list_remove(users->users, user);
+
+	users->count--;
+}
+
+size_t
+msn_users_get_count(const MsnUsers *users)
+{
+	g_return_val_if_fail(users != NULL, 0);
+
+	return users->count;
 }
 
 MsnUser *