comparison libpurple/protocols/msn/switchboard.c @ 30677:e9c6be9e0ddf

When adding users to an MSN chat, don't add them again if the same passport is in the conversation. That is, ignore people logged in at more than one location.
author Elliott Sales de Andrade <qulogic@pidgin.im>
date Mon, 14 Dec 2009 23:44:51 +0000
parents 88a3135c5a23
children 17ee21b062f9
comparison
equal deleted inserted replaced
30676:43cf75e21702 30677:e9c6be9e0ddf
220 static void 220 static void
221 msn_switchboard_add_user(MsnSwitchBoard *swboard, const char *user) 221 msn_switchboard_add_user(MsnSwitchBoard *swboard, const char *user)
222 { 222 {
223 MsnCmdProc *cmdproc; 223 MsnCmdProc *cmdproc;
224 PurpleAccount *account; 224 PurpleAccount *account;
225 char *semicolon;
226 char *passport;
225 227
226 g_return_if_fail(swboard != NULL); 228 g_return_if_fail(swboard != NULL);
227 229
228 cmdproc = swboard->cmdproc; 230 cmdproc = swboard->cmdproc;
229 account = cmdproc->session->account; 231 account = cmdproc->session->account;
230 232
231 swboard->users = g_list_prepend(swboard->users, g_strdup(user)); 233 semicolon = strchr(user, ';');
234 /* We don't really care about the machine ID. */
235 if (semicolon)
236 passport = g_strndup(user, semicolon - user);
237 else
238 passport = g_strdup(user);
239
240 /* Don't add multiple endpoints to the conversation. */
241 if (g_list_find_custom(swboard->users, passport, (GCompareFunc)strcmp)) {
242 g_free(passport);
243 return;
244 }
245
246 swboard->users = g_list_prepend(swboard->users, passport);
232 swboard->current_users++; 247 swboard->current_users++;
233 swboard->empty = FALSE; 248 swboard->empty = FALSE;
234 249
235 if (purple_debug_is_verbose()) 250 if (purple_debug_is_verbose())
236 purple_debug_info("msn", "user=[%s], total=%d\n", 251 purple_debug_info("msn", "user=[%s], total=%d\n",