Mercurial > pidgin.yaz
diff libpurple/protocols/msn/msn.c @ 31823:d72d728226dc
propagate from branch 'im.pidgin.pidgin' (head fb4d2b014576462db99d919dea15fbed03f1f48a)
to branch 'im.pidgin.pidgin.next.minor' (head 4a5878f91c824f207ed343b57b36ae74e1baa438)
author | John Bailey <rekkanoryo@rekkanoryo.org> |
---|---|
date | Sun, 13 Mar 2011 18:14:04 +0000 |
parents | ea2a155b4439 f3d11c84cc03 |
children | 7281d151e492 7c33eaed54e5 |
line wrap: on
line diff
--- a/libpurple/protocols/msn/msn.c Mon Feb 21 23:08:47 2011 +0000 +++ b/libpurple/protocols/msn/msn.c Sun Mar 13 18:14:04 2011 +0000 @@ -110,11 +110,9 @@ g_return_val_if_fail(str != NULL, NULL); - g_snprintf(buf, sizeof(buf), "%s%s", str, - (strchr(str, '@') ? "" : "@hotmail.com")); - - tmp = g_utf8_strdown(buf, -1); - strncpy(buf, tmp, sizeof(buf)); + tmp = g_strchomp(g_utf8_strdown(str, -1)); + g_snprintf(buf, sizeof(buf), "%s%s", tmp, + (strchr(tmp, '@') ? "" : "@hotmail.com")); g_free(tmp); return buf; @@ -931,8 +929,8 @@ if (session) { MsnUser *user = msn_userlist_find_user(session->userlist, who); if (user) { - /* Include these too: MSN_CLIENT_CAP_MSNMOBILE|MSN_CLIENT_CAP_MSNDIRECT ? */ - if ((user->clientid & MSN_CLIENT_CAP_WEBMSGR) || + /* Include these too: MSN_CAP_MOBILE_ON|MSN_CAP_WEB_WATCH ? */ + if ((user->clientid & MSN_CAP_VIA_WEBIM) || user->networkid == MSN_NETWORK_YAHOO) ret = FALSE; else @@ -961,16 +959,16 @@ MsnUser *user = purple_buddy_get_protocol_data(b); if (user != NULL) { - if (user->clientid & MSN_CLIENT_CAP_BOT) + if (user->clientid & MSN_CAP_BOT) return "bot"; - if (user->clientid & MSN_CLIENT_CAP_WIN_MOBILE) + if (user->clientid & MSN_CAP_VIA_MOBILE) return "mobile"; #if 0 /* XXX: Since we don't support this, there's no point in showing it just yet */ - if (user->clientid & MSN_CLIENT_CAP_SCHANNEL) + if (user->clientid & MSN_CAP_SCHANNEL) return "secure"; #endif - if (user->clientid & MSN_CLIENT_CAP_WEBMSGR) + if (user->clientid & MSN_CAP_VIA_WEBIM) return "external"; if (user->networkid == MSN_NETWORK_YAHOO) return "yahoo"; @@ -1746,38 +1744,33 @@ MsnUser *user) { char *group; + MsnUserList *userlist; + MsnUser *user2; g_return_if_fail(user != NULL); + if (network == MSN_NETWORK_UNKNOWN) { + purple_debug_error("msn", "Network in FQY response was unknown. " + "Assuming %s is a passport user and adding anyway.\n", who); + network = MSN_NETWORK_PASSPORT; + } + group = msn_user_remove_pending_group(user); - 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_unref(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 valid email addresses."), 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); + userlist = session->userlist; + user2 = msn_userlist_find_user(userlist, who); + if (user2 != NULL) { + /* User already in userlist, so just update it. */ + msn_user_unref(user); + user = user2; + } else { + msn_userlist_add_user(userlist, user); msn_user_unref(user); } + + msn_user_set_network(user, network); + msn_userlist_add_buddy(userlist, who, group); + g_free(group); } @@ -1814,7 +1807,10 @@ /* XXX - Would group ever be NULL here? I don't think so... * shx: Yes it should; MSN handles non-grouped buddies, and this is only - * internal. */ + * internal. + * KingAnt: But PurpleBuddys must always exist inside PurpleGroups, so + * won't group always be non-NULL here? + */ user = msn_userlist_find_user(userlist, who); if ((user != NULL) && (user->networkid != MSN_NETWORK_UNKNOWN)) { /* We already know this buddy and their network. This function knows @@ -1829,10 +1825,13 @@ msn_user_set_invite_message(user, msg); msn_user_set_pending_group(user, gname); msn_user_set_network(user, MSN_NETWORK_UNKNOWN); + /* Should probably re-use the msn_add_contact_xml function here */ tokens = g_strsplit(who, "@", 2); fqy = g_strdup_printf("<ml><d n=\"%s\"><c n=\"%s\"/></d></ml>", tokens[1], tokens[0]); + /* TODO: I think user will leak if we disconnect before receiving + a response to this FQY request */ msn_notification_send_fqy(session, fqy, strlen(fqy), (MsnFqyCb)add_pending_buddy, user); g_free(fqy);