Mercurial > pidgin
diff libpurple/protocols/myspace/myspace.c @ 24783:75ecd41a64ba
Fix a bug where if "Show our presence only to people on our buddy list"
is true and we remove someone from our buddy list then re-add them they
would not see our presence until the next time we logged out and back on.
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Wed, 17 Dec 2008 00:06:05 +0000 |
parents | 722732726d91 |
children | 5f93e67a8bd7 a4a17fe80160 |
line wrap: on
line diff
--- a/libpurple/protocols/myspace/myspace.c Tue Dec 16 23:43:25 2008 +0000 +++ b/libpurple/protocols/myspace/myspace.c Wed Dec 17 00:06:05 2008 +0000 @@ -2549,6 +2549,7 @@ MsimMessage *msg; MsimMessage *msg_persist; MsimMessage *body; + GList *blocklist_updates; session = (MsimSession *)gc->proto_data; purple_debug_info("msim", "msim_add_buddy: want to add %s to %s\n", @@ -2601,6 +2602,27 @@ return; } msim_msg_free(msg_persist); + + /* Remove the buddy from our block list and add them to our accept list, I think */ + blocklist_updates = NULL; + blocklist_updates = g_list_prepend(blocklist_updates, "a+"); + blocklist_updates = g_list_prepend(blocklist_updates, "<uid>"); + blocklist_updates = g_list_prepend(blocklist_updates, "b-"); + blocklist_updates = g_list_prepend(blocklist_updates, "<uid>"); + blocklist_updates = g_list_reverse(blocklist_updates); + + msg = msim_msg_new( + "blocklist", MSIM_TYPE_BOOLEAN, TRUE, + "sesskey", MSIM_TYPE_INTEGER, session->sesskey, + /* TODO: MsimMessage lists. Currently <uid> isn't replaced in lists. */ + /* "idlist", MSIM_TYPE_STRING, g_strdup("a-|<uid>|b-|<uid>"), */ + "idlist", MSIM_TYPE_LIST, blocklist_updates, + NULL); + + if (!msim_postprocess_outgoing(session, msg, buddy->name, "idlist", NULL)) + purple_debug_error("myspace", "blocklist command failed\n"); + + msim_msg_free(msg); } /** @@ -2649,6 +2671,7 @@ } msim_msg_free(persist_msg); + /* Remove the buddy from our block list(huh?) and our accept list */ blocklist_updates = NULL; blocklist_updates = g_list_prepend(blocklist_updates, "a-"); blocklist_updates = g_list_prepend(blocklist_updates, "<uid>");