# HG changeset patch # User Sulabh Mahajan # Date 1247755526 0 # Node ID 7c055118a010fb361e773ec9f53317315ca67d24 # Parent a0ea1bcfa1c4d790485f222117477564d6a10447 Prevent conference from splitting, when reinvited to one we are a member of. Fixes ticket #9601 diff -r a0ea1bcfa1c4 -r 7c055118a010 libpurple/protocols/yahoo/yahoochat.c --- a/libpurple/protocols/yahoo/yahoochat.c Thu Jul 16 12:55:06 2009 +0000 +++ b/libpurple/protocols/yahoo/yahoochat.c Thu Jul 16 14:45:26 2009 +0000 @@ -121,12 +121,29 @@ char *msg = NULL; GString *members = NULL; GHashTable *components; + PurpleConversation *c = NULL; if ( (pkt->status == 2) || (pkt->status == 11) ) return; /* Status is 11 when we are being notified about invitation being sent to someone else */ account = purple_connection_get_account(gc); + for (l = pkt->hash; l; l = l->next) { + struct yahoo_pair *pair = l->data; + if (pair->key == 57) + { + room = yahoo_string_decode(gc, pair->value, FALSE); + if((c = yahoo_find_conference(gc, room))) + { + /* Looks like we got invited to an already open conference. */ + /* Laters: Should we accept this conference rather than ignoring the invitation ? */ + purple_debug_info("yahoo","Ignoring invitation for an already existing chat, room:%s\n",room); + g_free(room); + return; + } + } + } + members = g_string_sized_new(512); for (l = pkt->hash; l; l = l->next) { @@ -254,7 +271,10 @@ if (who && room) { c = yahoo_find_conference(gc, room); if (c) - yahoo_chat_add_user(PURPLE_CONV_CHAT(c), who, NULL); + { /* Prevent duplicate users in the chat */ + if( !purple_conv_chat_find_user(PURPLE_CONV_CHAT(c), who) ) + yahoo_chat_add_user(PURPLE_CONV_CHAT(c), who, NULL); + } g_free(room); } }