Mercurial > pidgin.yaz
changeset 27653:7c055118a010
Prevent conference from splitting, when reinvited to one we are a member of. Fixes ticket #9601
author | Sulabh Mahajan <sulabh@soc.pidgin.im> |
---|---|
date | Thu, 16 Jul 2009 14:45:26 +0000 |
parents | a0ea1bcfa1c4 |
children | eeeb82903ef8 a0d2cf22a581 |
files | libpurple/protocols/yahoo/yahoochat.c |
diffstat | 1 files changed, 21 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- 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); } }