comparison 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
comparison
equal deleted inserted replaced
20485:87eea1c5be97 20486:ff4ae9dde291
41 msn_accept_add_cb(gpointer data) 41 msn_accept_add_cb(gpointer data)
42 { 42 {
43 MsnPermitAdd *pa = data; 43 MsnPermitAdd *pa = data;
44 MsnSession *session = pa->gc->proto_data; 44 MsnSession *session = pa->gc->proto_data;
45 MsnUserList *userlist = session->userlist; 45 MsnUserList *userlist = session->userlist;
46 46 MsnUser *user = msn_userlist_find_add_user(userlist, pa->who, pa->who);
47
48 purple_debug_misc("MSN Userlist", "Accepted the new buddy: %s\n", pa->who);
49
47 msn_userlist_add_buddy_to_list(userlist, pa->who, MSN_LIST_AL); 50 msn_userlist_add_buddy_to_list(userlist, pa->who, MSN_LIST_AL);
48 msn_userlist_add_buddy(userlist, pa->who, NULL); 51
52 if (msn_userlist_user_is_in_list(user, MSN_LIST_FL)) {
53 msn_del_contact_from_list(session->contact, NULL, pa->who, MSN_LIST_PL);
54 }
49 55
50 g_free(pa->who); 56 g_free(pa->who);
51 g_free(pa->friendly); 57 g_free(pa->friendly);
52 g_free(pa); 58 g_free(pa);
53 } 59 }
55 static void 61 static void
56 msn_cancel_add_cb(gpointer data) 62 msn_cancel_add_cb(gpointer data)
57 { 63 {
58 MsnPermitAdd *pa = data; 64 MsnPermitAdd *pa = data;
59 65
66 purple_debug_misc("MSN Userlist", "Deniedthe new buddy: %s\n", pa->who);
67
60 if (g_list_find(purple_connections_get_all(), pa->gc) != NULL) 68 if (g_list_find(purple_connections_get_all(), pa->gc) != NULL)
61 { 69 {
62 MsnSession *session = pa->gc->proto_data; 70 MsnSession *session = pa->gc->proto_data;
63 MsnUserList *userlist = session->userlist; 71 MsnUserList *userlist = session->userlist;
72 MsnCallbackState *state = msn_callback_state_new();
73
74 msn_callback_state_set_action(state, MSN_DENIED_BUDDY);
64 75
65 msn_userlist_add_buddy_to_list(userlist, pa->who, MSN_LIST_BL); 76 msn_userlist_add_buddy_to_list(userlist, pa->who, MSN_LIST_BL);
77 msn_del_contact_from_list(session->contact, state, pa->who, MSN_LIST_PL);
66 } 78 }
67 79
68 g_free(pa->who); 80 g_free(pa->who);
69 g_free(pa->friendly); 81 g_free(pa->friendly);
70 g_free(pa); 82 g_free(pa);
88 100
89 /************************************************************************** 101 /**************************************************************************
90 * Utility functions 102 * Utility functions
91 **************************************************************************/ 103 **************************************************************************/
92 104
93 static gboolean 105 gboolean
94 msn_userlist_user_is_in_group(MsnUser *user, const char * group_id) 106 msn_userlist_user_is_in_group(MsnUser *user, const char * group_id)
95 { 107 {
96 if (user == NULL) 108 if (user == NULL)
97 return FALSE; 109 return FALSE;
98 110
103 return TRUE; 115 return TRUE;
104 116
105 return FALSE; 117 return FALSE;
106 } 118 }
107 119
108 static gboolean 120 gboolean
109 msn_userlist_user_is_in_list(MsnUser *user, MsnListId list_id) 121 msn_userlist_user_is_in_list(MsnUser *user, MsnListId list_id)
110 { 122 {
111 int list_op; 123 int list_op;
112 124
113 if (user == NULL) 125 if (user == NULL)
325 account = session->account; 337 account = session->account;
326 gc = purple_account_get_connection(account); 338 gc = purple_account_get_connection(account);
327 339
328 passport = msn_user_get_passport(user); 340 passport = msn_user_get_passport(user);
329 store = msn_user_get_store_name(user); 341 store = msn_user_get_store_name(user);
342
343 msn_user_set_op(user, list_op);
330 344
331 if (list_op & MSN_LIST_FL_OP) 345 if (list_op & MSN_LIST_FL_OP)
332 { 346 {
333 GSList *c; 347 GSList *c;
334 for (c = group_ids; c != NULL; c = g_slist_next(c)) 348 for (c = group_ids; c != NULL; c = g_slist_next(c))
375 389
376 if (list_op & MSN_LIST_PL_OP) 390 if (list_op & MSN_LIST_PL_OP)
377 { 391 {
378 got_new_entry(gc, passport, store); 392 got_new_entry(gc, passport, store);
379 } 393 }
380
381 user->list_op |= list_op;
382 } 394 }
383 395
384 /************************************************************************** 396 /**************************************************************************
385 * UserList functions 397 * UserList functions
386 **************************************************************************/ 398 **************************************************************************/
607 msn_userlist_rem_buddy_from_list(MsnUserList *userlist, const char *who, 619 msn_userlist_rem_buddy_from_list(MsnUserList *userlist, const char *who,
608 MsnListId list_id) 620 MsnListId list_id)
609 { 621 {
610 MsnUser *user; 622 MsnUser *user;
611 const gchar *list; 623 const gchar *list;
612 624 MsnListOp list_op = 1 << list_id;
625
613 user = msn_userlist_find_user(userlist, who); 626 user = msn_userlist_find_user(userlist, who);
614 627
615 g_return_if_fail(user != NULL); 628 g_return_if_fail(user != NULL);
616 629
617 if ( !msn_userlist_user_is_in_list(user, list_id)) { 630 if ( !msn_userlist_user_is_in_list(user, list_id)) {
618 list = lists[list_id]; 631 list = lists[list_id];
619 purple_debug_info("MSN Userlist", "User %s is not in list %s, not removing.\n", who, list); 632 purple_debug_info("MSN Userlist", "User %s is not in list %s, not removing.\n", who, list);
620 return; 633 return;
621 } 634 }
622 635
636 msn_user_unset_op(user, list_op);
637
623 msn_notification_rem_buddy_from_list(userlist->session->notification, list_id, who); 638 msn_notification_rem_buddy_from_list(userlist->session->notification, list_id, who);
624 } 639 }
625 640
626 /*add buddy*/ 641 /*add buddy*/
627 void 642 void
628 msn_userlist_add_buddy(MsnUserList *userlist, const char *who, 643 msn_userlist_add_buddy(MsnUserList *userlist, const char *who, const char *group_name)
629 const char *group_name)
630 { 644 {
631 MsnUser *user; 645 MsnUser *user;
632 MsnCallbackState *state = NULL; 646 MsnCallbackState *state = NULL;
633 const char *group_id = NULL, *new_group_name; 647 const char *group_id = NULL, *new_group_name;
634 648