Mercurial > pidgin
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", |