Mercurial > pidgin.yaz
changeset 27656:a0d2cf22a581
merge of '14624d95d88444c69810193d3cddea741c692fea'
and 'd9664c539826147542563d03569001aa35a20e0a'
author | Daniel Atallah <daniel.atallah@gmail.com> |
---|---|
date | Thu, 16 Jul 2009 15:30:05 +0000 |
parents | 8dc4e726f8f7 (current diff) 7c055118a010 (diff) |
children | db0be613925b |
files | |
diffstat | 1 files changed, 23 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- 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); } }