comparison libpurple/protocols/msn/userlist.c @ 25237:401f548e3544

propagate from branch 'im.pidgin.pidgin' (head df6eba32e5b6b34d7483cbfb7e9f2e4c836ac35f) to branch 'org.darkrain42.pidgin.buddy-add' (head 6831808999a270f8c1a128c7430a73d3dc0bfae2)
author Paul Aurich <paul@darkrain42.org>
date Sun, 21 Dec 2008 18:32:37 +0000
parents f3950234b164
children fd5eedf131b4 ca01403251f1
comparison
equal deleted inserted replaced
25172:125cac3e24ee 25237:401f548e3544
182 182
183 if (group_id != NULL) 183 if (group_id != NULL)
184 { 184 {
185 msn_user_add_group_id(user, group_id); 185 msn_user_add_group_id(user, group_id);
186 } 186 }
187 else
188 {
189 /* session->sync->fl_users_count++; */
190 }
191 } 187 }
192 else if (list_id == MSN_LIST_AL) 188 else if (list_id == MSN_LIST_AL)
193 { 189 {
194 purple_privacy_permit_add(account, passport, TRUE); 190 purple_privacy_permit_add(account, passport, TRUE);
195 } 191 }
250 /* TODO: When is the user totally removed? */ 246 /* TODO: When is the user totally removed? */
251 if (group_id != NULL) 247 if (group_id != NULL)
252 { 248 {
253 msn_user_remove_group_id(user, group_id); 249 msn_user_remove_group_id(user, group_id);
254 return; 250 return;
255 }
256 else
257 {
258 /* session->sync->fl_users_count--; */
259 } 251 }
260 } 252 }
261 else if (list_id == MSN_LIST_AL) 253 else if (list_id == MSN_LIST_AL)
262 { 254 {
263 purple_privacy_permit_remove(account, passport, TRUE); 255 purple_privacy_permit_remove(account, passport, TRUE);
674 return; 666 return;
675 } 667 }
676 668
677 msn_user_unset_op(user, list_op); 669 msn_user_unset_op(user, list_op);
678 670
679 msn_notification_rem_buddy_from_list(userlist->session->notification, list_id, who); 671 msn_notification_rem_buddy_from_list(userlist->session->notification, list_id, user);
680 } 672 }
681 673
682 /*add buddy*/ 674 /*add buddy*/
683 void 675 void
684 msn_userlist_add_buddy(MsnUserList *userlist, const char *who, const char *group_name) 676 msn_userlist_add_buddy(MsnUserList *userlist, const char *who, const char *group_name)
754 /* Add contact in the Contact server with a SOAP request and if 746 /* Add contact in the Contact server with a SOAP request and if
755 successful, send ADL with MSN_LIST_AL and MSN_LIST_FL and a FQY */ 747 successful, send ADL with MSN_LIST_AL and MSN_LIST_FL and a FQY */
756 msn_add_contact_to_group(userlist->session, state, who, group_id); 748 msn_add_contact_to_group(userlist->session, state, who, group_id);
757 } 749 }
758 750
751 /*
752 * Save a buddy address/group until we get back response from FQY
753 */
754 void
755 msn_userlist_save_pending_buddy(MsnUserList *userlist,
756 const char *who,
757 const char *group_name)
758 {
759 MsnUser *user;
760
761 g_return_if_fail(userlist != NULL);
762
763 user = msn_user_new(userlist, who, NULL);
764 msn_user_set_pending_group(user, group_name);
765 msn_user_set_network(user, MSN_NETWORK_UNKNOWN);
766 userlist->pending = g_list_prepend(userlist->pending, user);
767 }
768
769 /*
770 * Actually adds a buddy once we have the response from FQY
771 */
772 void
773 msn_userlist_add_pending_buddy(MsnUserList *userlist,
774 const char *who,
775 /*MsnNetwork*/ int network)
776 {
777 MsnUser *user = NULL;
778 MsnUser *user2;
779 GList *l;
780 char *group;
781
782 for (l = userlist->pending; l != NULL; l = l->next)
783 {
784 user = (MsnUser *)l->data;
785
786 if (!g_strcasecmp(who, user->passport)) {
787 userlist->pending = g_list_delete_link(userlist->pending, l);
788 break;
789 }
790 }
791
792 if (user == NULL) {
793 purple_debug_error("msn", "Attempting to add a pending user that does not exist.\n");
794 return;
795 }
796
797 group = msn_user_remove_pending_group(user);
798
799 user2 = msn_userlist_find_user(userlist, who);
800 if (user2 != NULL) {
801 /* User already in userlist, so just update it. */
802 msn_user_destroy(user);
803 user = user2;
804 } else {
805 msn_userlist_add_user(userlist, user);
806 }
807
808 msn_user_set_network(user, network);
809 msn_userlist_add_buddy(userlist, who, group);
810 g_free(group);
811 }
812
759 void 813 void
760 msn_userlist_add_buddy_to_list(MsnUserList *userlist, const char *who, 814 msn_userlist_add_buddy_to_list(MsnUserList *userlist, const char *who,
761 MsnListId list_id) 815 MsnListId list_id)
762 { 816 {
763 MsnUser *user = NULL; 817 MsnUser *user = NULL;
779 /* XXX: see XXX above, this should really be done when we get the response from 833 /* XXX: see XXX above, this should really be done when we get the response from
780 the server */ 834 the server */
781 835
782 msn_user_set_op(user, list_op); 836 msn_user_set_op(user, list_op);
783 837
784 msn_notification_add_buddy_to_list(userlist->session->notification, list_id, who); 838 msn_notification_add_buddy_to_list(userlist->session->notification, list_id, user);
785 } 839 }
786 840
787 gboolean 841 gboolean
788 msn_userlist_add_buddy_to_group(MsnUserList *userlist, const char *who, 842 msn_userlist_add_buddy_to_group(MsnUserList *userlist, const char *who,
789 const char *group_name) 843 const char *group_name)