Manage switchboards with users not on our list. soc.2010.msn-tlc

Wed, 26 May 2010 23:47:19 +0000

author
Jorge Villaseñor <masca@cpw.pidgin.im>
date
Wed, 26 May 2010 23:47:19 +0000
branch
soc.2010.msn-tlc
changeset 30943
c505e5a35e55
parent 30942
03270380ad75
child 30944
4f1fc7c401fd

Manage switchboards with users not on our list.

libpurple/protocols/msn/switchboard.c file | annotate | diff | comparison | revisions
--- a/libpurple/protocols/msn/switchboard.c	Wed May 26 23:39:02 2010 +0000
+++ b/libpurple/protocols/msn/switchboard.c	Wed May 26 23:47:19 2010 +0000
@@ -124,6 +124,7 @@
 	g_free(swboard->session_id);
 
 	for (; swboard->users; swboard->users = g_list_delete_link(swboard->users, swboard->users))
+		msn_user_unref(swboard->users->data);
 
 	session = swboard->session;
 	session->switches = g_list_remove(session->switches, swboard);
@@ -261,9 +262,6 @@
 	userlist = swboard->session->userlist;
 	msnuser = msn_userlist_find_user(userlist, passport);
 
-	if (!msnuser)
-		purple_debug_error("msn","User %s is not on our list.\n", passport);
-
 	/* Don't add multiple endpoints to the conversation. */
 	if (g_list_find_custom(swboard->users, passport, (GCompareFunc)user_passport_cmp)) {
 		g_free(passport);
@@ -276,6 +274,12 @@
 		return;
 	}
 	
+	if (!msnuser) {
+		purple_debug_info("msn","User %s is not on our list.\n", passport);
+		msnuser = msn_user_new(userlist, passport, NULL);
+	} else
+		msn_user_ref(msnuser);
+
 	g_free(passport);
 
 	swboard->users = g_list_prepend(swboard->users, msnuser);

mercurial