Mercurial > pidgin
diff libpurple/protocols/msn/userlist.c @ 20486:ff4ae9dde291
Make block/unblock work right, as well as being add by a buddy. Finally fixes #723
author | Carlos Silva <typ0@pidgin.im> |
---|---|
date | Mon, 03 Sep 2007 05:47:52 +0000 |
parents | 98613886411a |
children | 64c322c3b1b0 |
line wrap: on
line diff
--- a/libpurple/protocols/msn/userlist.c Fri Aug 31 18:15:23 2007 +0000 +++ b/libpurple/protocols/msn/userlist.c Mon Sep 03 05:47:52 2007 +0000 @@ -43,9 +43,15 @@ MsnPermitAdd *pa = data; MsnSession *session = pa->gc->proto_data; MsnUserList *userlist = session->userlist; + MsnUser *user = msn_userlist_find_add_user(userlist, pa->who, pa->who); + purple_debug_misc("MSN Userlist", "Accepted the new buddy: %s\n", pa->who); + msn_userlist_add_buddy_to_list(userlist, pa->who, MSN_LIST_AL); - msn_userlist_add_buddy(userlist, pa->who, NULL); + + if (msn_userlist_user_is_in_list(user, MSN_LIST_FL)) { + msn_del_contact_from_list(session->contact, NULL, pa->who, MSN_LIST_PL); + } g_free(pa->who); g_free(pa->friendly); @@ -57,12 +63,18 @@ { MsnPermitAdd *pa = data; + purple_debug_misc("MSN Userlist", "Deniedthe new buddy: %s\n", pa->who); + if (g_list_find(purple_connections_get_all(), pa->gc) != NULL) { MsnSession *session = pa->gc->proto_data; MsnUserList *userlist = session->userlist; + MsnCallbackState *state = msn_callback_state_new(); + + msn_callback_state_set_action(state, MSN_DENIED_BUDDY); msn_userlist_add_buddy_to_list(userlist, pa->who, MSN_LIST_BL); + msn_del_contact_from_list(session->contact, state, pa->who, MSN_LIST_PL); } g_free(pa->who); @@ -90,7 +102,7 @@ * Utility functions **************************************************************************/ -static gboolean +gboolean msn_userlist_user_is_in_group(MsnUser *user, const char * group_id) { if (user == NULL) @@ -105,7 +117,7 @@ return FALSE; } -static gboolean +gboolean msn_userlist_user_is_in_list(MsnUser *user, MsnListId list_id) { int list_op; @@ -327,6 +339,8 @@ passport = msn_user_get_passport(user); store = msn_user_get_store_name(user); + + msn_user_set_op(user, list_op); if (list_op & MSN_LIST_FL_OP) { @@ -377,8 +391,6 @@ { got_new_entry(gc, passport, store); } - - user->list_op |= list_op; } /************************************************************************** @@ -609,7 +621,8 @@ { MsnUser *user; const gchar *list; - + MsnListOp list_op = 1 << list_id; + user = msn_userlist_find_user(userlist, who); g_return_if_fail(user != NULL); @@ -619,14 +632,15 @@ purple_debug_info("MSN Userlist", "User %s is not in list %s, not removing.\n", who, list); return; } - + + msn_user_unset_op(user, list_op); + msn_notification_rem_buddy_from_list(userlist->session->notification, list_id, who); } /*add buddy*/ void -msn_userlist_add_buddy(MsnUserList *userlist, const char *who, - const char *group_name) +msn_userlist_add_buddy(MsnUserList *userlist, const char *who, const char *group_name) { MsnUser *user; MsnCallbackState *state = NULL;