Mercurial > pidgin.yaz
diff libpurple/protocols/msn/userlist.c @ 31292:47b6eda87723
propagate from branch 'im.pidgin.pidgin' (head 07d0765c444a097af45c2650f54323afb900a07b)
to branch 'im.pidgin.soc.2010.msn-tlc' (head f3998422a4724ab424e4e2328f58fc0504856557)
author | masca@cpw.pidgin.im |
---|---|
date | Mon, 19 Jul 2010 21:11:32 +0000 |
parents | 56ef12440d52 |
children | ac9035aeb087 |
line wrap: on
line diff
--- a/libpurple/protocols/msn/userlist.c Mon Jul 19 18:25:47 2010 +0000 +++ b/libpurple/protocols/msn/userlist.c Mon Jul 19 21:11:32 2010 +0000 @@ -21,7 +21,13 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA */ + +#include "internal.h" +#include "debug.h" +#include "request.h" + #include "msn.h" +#include "msnutils.h" #include "userlist.h" #include "contact.h" @@ -107,31 +113,6 @@ } /************************************************************************** - * Utility functions - **************************************************************************/ - -gboolean -msn_userlist_user_is_in_group(MsnUser *user, const char * group_id) -{ - if (user == NULL) - return FALSE; - - if (group_id == NULL) - return FALSE; - - return (g_list_find_custom(user->group_ids, group_id, (GCompareFunc)strcmp)) != NULL; -} - -gboolean -msn_userlist_user_is_in_list(MsnUser *user, MsnListId list_id) -{ - if (user == NULL) - return FALSE; - - return (user->list_op & (1 << list_id)); -} - -/************************************************************************** * Server functions **************************************************************************/ @@ -235,7 +216,7 @@ /*destroy userlist*/ for (l = userlist->users; l != NULL; l = l->next) { - msn_user_destroy(l->data); + msn_user_unref(l->data); } g_list_free(userlist->users); @@ -503,7 +484,7 @@ g_return_if_fail(user != NULL); - if ( !msn_userlist_user_is_in_list(user, list_id)) { + if ( !msn_user_is_in_list(user, list_id)) { list = lists[list_id]; purple_debug_info("msn", "User %s is not in list %s, not removing.\n", who, list); return; @@ -569,13 +550,13 @@ user = msn_userlist_find_add_user(userlist, who, who); - if ( msn_userlist_user_is_in_list(user, MSN_LIST_FL) ) { + if ( msn_user_is_in_list(user, MSN_LIST_FL) ) { purple_debug_info("msn", "User %s already exists\n", who); msn_userlist_rem_buddy_from_list(userlist, who, MSN_LIST_BL); - if (msn_userlist_user_is_in_group(user, group_id)) { + if (msn_user_is_in_group(user, group_id)) { purple_debug_info("msn", "User %s is already in group %s, returning\n", who, new_group_name); msn_callback_state_free(state); return; @@ -604,7 +585,7 @@ user = msn_userlist_find_add_user(userlist, who, who); /* First we're going to check if it's already there. */ - if (msn_userlist_user_is_in_list(user, list_id)) + if (msn_user_is_in_list(user, list_id)) { list = lists[list_id]; purple_debug_info("msn", "User '%s' is already in list: %s\n", who, list); @@ -706,6 +687,42 @@ msn_add_contact_to_group(userlist->session, state, who, new_group_id); } +void +msn_release_buddy_icon_request(MsnUserList *userlist) +{ + MsnUser *user; + + g_return_if_fail(userlist != NULL); + + if (purple_debug_is_verbose()) + purple_debug_info("msn", "Releasing buddy icon request\n"); + + if (userlist->buddy_icon_window > 0) { + GQueue *queue; + PurpleAccount *account; + const char *username; + + queue = userlist->buddy_icon_requests; + + if (g_queue_is_empty(userlist->buddy_icon_requests)) + return; + + user = g_queue_pop_head(queue); + + account = userlist->session->account; + username = user->passport; + + userlist->buddy_icon_window--; + + msn_request_user_display(user); + + if (purple_debug_is_verbose()) + purple_debug_info("msn", + "msn_release_buddy_icon_request(): buddy_icon_window-- yields =%d\n", + userlist->buddy_icon_window); + } +} + /*load userlist from the Blist file cache*/ void msn_userlist_load(MsnSession *session)