# HG changeset patch # User Elliott Sales de Andrade # Date 1246940189 0 # Node ID d375ef85519f4ddc173353e805214a5310851a05 # Parent 66425e99d7410f35ec3a1ef787933923efa9c9ae Add some checks before attempting to add a buddy on MSN. Also, if the FQY query fails, then the server is not going to like it, so throw an error there, too. diff -r 66425e99d741 -r d375ef85519f libpurple/protocols/msn/msn.c --- a/libpurple/protocols/msn/msn.c Tue Jul 07 00:23:09 2009 +0000 +++ b/libpurple/protocols/msn/msn.c Tue Jul 07 04:16:29 2009 +0000 @@ -1389,40 +1389,70 @@ MsnNetwork network, MsnUser *user) { - MsnUserList *userlist = session->userlist; - MsnUser *user2; char *group; g_return_if_fail(user != NULL); group = msn_user_remove_pending_group(user); - user2 = msn_userlist_find_user(userlist, who); - if (user2 != NULL) { - /* User already in userlist, so just update it. */ + if (network != MSN_NETWORK_UNKNOWN) { + MsnUserList *userlist = session->userlist; + MsnUser *user2 = msn_userlist_find_user(userlist, who); + if (user2 != NULL) { + /* User already in userlist, so just update it. */ + msn_user_destroy(user); + user = user2; + } else { + msn_userlist_add_user(userlist, user); + } + + msn_user_set_network(user, network); + msn_userlist_add_buddy(userlist, who, group); + } + else + { + PurpleBuddy * buddy = purple_find_buddy(session->account, who); + gchar *buf; + buf = g_strdup_printf(_("Unable to add the buddy %s because the username is invalid. Usernames must be a valid email address."), who); + if (!purple_conv_present_error(who, session->account, buf)) + purple_notify_error(purple_account_get_connection(session->account), NULL, _("Unable to Add"), buf); + g_free(buf); + + /* Remove from local list */ + purple_blist_remove_buddy(buddy); msn_user_destroy(user); - user = user2; - } else { - msn_userlist_add_user(userlist, user); } - - msn_user_set_network(user, network); - msn_userlist_add_buddy(userlist, who, group); g_free(group); } static void msn_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) { + PurpleAccount *account; MsnSession *session; MsnUserList *userlist; - const char *who, *gname; + const char *bname, *who, *gname; MsnUser *user; + account = purple_connection_get_account(gc); session = gc->proto_data; userlist = session->userlist; - who = msn_normalize(purple_connection_get_account(gc), purple_buddy_get_name(buddy)); - + bname = purple_buddy_get_name(buddy); + + if (!purple_email_is_valid(bname)) { + gchar *buf; + buf = g_strdup_printf(_("Unable to add the buddy %s because the username is invalid. Usernames must be a valid email address."), bname); + if (!purple_conv_present_error(bname, account, buf)) + purple_notify_error(gc, NULL, _("Unable to Add"), buf); + g_free(buf); + + /* Remove from local list */ + purple_blist_remove_buddy(buddy); + + return; + } + + who = msn_normalize(account, bname); gname = group ? purple_group_get_name(group) : NULL; purple_debug_info("msn", "Add user:%s to group:%s\n", who, gname ? gname : "(null)"); if (!session->logged_in)