# HG changeset patch # User Daniel Atallah # Date 1247758205 0 # Node ID a0d2cf22a581ee7cd1b51dddfdda97844affec13 # Parent 8dc4e726f8f7282fe73c621f08ee2d811a9fac49# Parent 7c055118a010fb361e773ec9f53317315ca67d24 merge of '14624d95d88444c69810193d3cddea741c692fea' and 'd9664c539826147542563d03569001aa35a20e0a' diff -r 8dc4e726f8f7 -r a0d2cf22a581 libpurple/protocols/yahoo/yahoochat.c --- a/libpurple/protocols/yahoo/yahoochat.c Thu Jul 16 11:08:10 2009 +0000 +++ b/libpurple/protocols/yahoo/yahoochat.c Thu Jul 16 15:30:05 2009 +0000 @@ -121,12 +121,29 @@ char *msg = NULL; GString *members = NULL; GHashTable *components; + PurpleConversation *c = NULL; - if (pkt->status == 2) - return; /* XXX */ + 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); } }