libpurple/protocols/msn/switchboard.c

branch
cpw.qulogic.msnp16
changeset 29440
8302e46e56c3
parent 29437
034f5db23ca7
child 29441
23390e8f463f
--- a/libpurple/protocols/msn/switchboard.c	Mon Dec 14 07:15:24 2009 +0000
+++ b/libpurple/protocols/msn/switchboard.c	Mon Dec 14 23:44:51 2009 +0000
@@ -222,13 +222,28 @@
 {
 	MsnCmdProc *cmdproc;
 	PurpleAccount *account;
+	char *semicolon;
+	char *passport;
 
 	g_return_if_fail(swboard != NULL);
 
 	cmdproc = swboard->cmdproc;
 	account = cmdproc->session->account;
 
-	swboard->users = g_list_prepend(swboard->users, g_strdup(user));
+	semicolon = strchr(user, ';');
+	/* We don't really care about the machine ID. */
+	if (semicolon)
+		passport = g_strndup(user, semicolon - user);
+	else
+		passport = g_strdup(user);
+
+	/* Don't add multiple endpoints to the conversation. */
+	if (g_list_find_custom(swboard->users, passport, (GCompareFunc)strcmp)) {
+		g_free(passport);
+		return;
+	}
+
+	swboard->users = g_list_prepend(swboard->users, passport);
 	swboard->current_users++;
 	swboard->empty = FALSE;
 

mercurial