Mercurial > pidgin.yaz
comparison 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 |
comparison
equal
deleted
inserted
replaced
31822:6c660dc7cb6a | 31823:d72d728226dc |
---|---|
108 static char buf[BUF_LEN]; | 108 static char buf[BUF_LEN]; |
109 char *tmp; | 109 char *tmp; |
110 | 110 |
111 g_return_val_if_fail(str != NULL, NULL); | 111 g_return_val_if_fail(str != NULL, NULL); |
112 | 112 |
113 g_snprintf(buf, sizeof(buf), "%s%s", str, | 113 tmp = g_strchomp(g_utf8_strdown(str, -1)); |
114 (strchr(str, '@') ? "" : "@hotmail.com")); | 114 g_snprintf(buf, sizeof(buf), "%s%s", tmp, |
115 | 115 (strchr(tmp, '@') ? "" : "@hotmail.com")); |
116 tmp = g_utf8_strdown(buf, -1); | |
117 strncpy(buf, tmp, sizeof(buf)); | |
118 g_free(tmp); | 116 g_free(tmp); |
119 | 117 |
120 return buf; | 118 return buf; |
121 } | 119 } |
122 | 120 |
929 if (ret) { | 927 if (ret) { |
930 MsnSession *session = gc->proto_data; | 928 MsnSession *session = gc->proto_data; |
931 if (session) { | 929 if (session) { |
932 MsnUser *user = msn_userlist_find_user(session->userlist, who); | 930 MsnUser *user = msn_userlist_find_user(session->userlist, who); |
933 if (user) { | 931 if (user) { |
934 /* Include these too: MSN_CLIENT_CAP_MSNMOBILE|MSN_CLIENT_CAP_MSNDIRECT ? */ | 932 /* Include these too: MSN_CAP_MOBILE_ON|MSN_CAP_WEB_WATCH ? */ |
935 if ((user->clientid & MSN_CLIENT_CAP_WEBMSGR) || | 933 if ((user->clientid & MSN_CAP_VIA_WEBIM) || |
936 user->networkid == MSN_NETWORK_YAHOO) | 934 user->networkid == MSN_NETWORK_YAHOO) |
937 ret = FALSE; | 935 ret = FALSE; |
938 else | 936 else |
939 ret = TRUE; | 937 ret = TRUE; |
940 } | 938 } |
959 msn_list_emblems(PurpleBuddy *b) | 957 msn_list_emblems(PurpleBuddy *b) |
960 { | 958 { |
961 MsnUser *user = purple_buddy_get_protocol_data(b); | 959 MsnUser *user = purple_buddy_get_protocol_data(b); |
962 | 960 |
963 if (user != NULL) { | 961 if (user != NULL) { |
964 if (user->clientid & MSN_CLIENT_CAP_BOT) | 962 if (user->clientid & MSN_CAP_BOT) |
965 return "bot"; | 963 return "bot"; |
966 if (user->clientid & MSN_CLIENT_CAP_WIN_MOBILE) | 964 if (user->clientid & MSN_CAP_VIA_MOBILE) |
967 return "mobile"; | 965 return "mobile"; |
968 #if 0 | 966 #if 0 |
969 /* XXX: Since we don't support this, there's no point in showing it just yet */ | 967 /* XXX: Since we don't support this, there's no point in showing it just yet */ |
970 if (user->clientid & MSN_CLIENT_CAP_SCHANNEL) | 968 if (user->clientid & MSN_CAP_SCHANNEL) |
971 return "secure"; | 969 return "secure"; |
972 #endif | 970 #endif |
973 if (user->clientid & MSN_CLIENT_CAP_WEBMSGR) | 971 if (user->clientid & MSN_CAP_VIA_WEBIM) |
974 return "external"; | 972 return "external"; |
975 if (user->networkid == MSN_NETWORK_YAHOO) | 973 if (user->networkid == MSN_NETWORK_YAHOO) |
976 return "yahoo"; | 974 return "yahoo"; |
977 } | 975 } |
978 | 976 |
1744 const char *who, | 1742 const char *who, |
1745 MsnNetwork network, | 1743 MsnNetwork network, |
1746 MsnUser *user) | 1744 MsnUser *user) |
1747 { | 1745 { |
1748 char *group; | 1746 char *group; |
1747 MsnUserList *userlist; | |
1748 MsnUser *user2; | |
1749 | 1749 |
1750 g_return_if_fail(user != NULL); | 1750 g_return_if_fail(user != NULL); |
1751 | 1751 |
1752 if (network == MSN_NETWORK_UNKNOWN) { | |
1753 purple_debug_error("msn", "Network in FQY response was unknown. " | |
1754 "Assuming %s is a passport user and adding anyway.\n", who); | |
1755 network = MSN_NETWORK_PASSPORT; | |
1756 } | |
1757 | |
1752 group = msn_user_remove_pending_group(user); | 1758 group = msn_user_remove_pending_group(user); |
1753 | 1759 |
1754 if (network != MSN_NETWORK_UNKNOWN) { | 1760 userlist = session->userlist; |
1755 MsnUserList *userlist = session->userlist; | 1761 user2 = msn_userlist_find_user(userlist, who); |
1756 MsnUser *user2 = msn_userlist_find_user(userlist, who); | 1762 if (user2 != NULL) { |
1757 if (user2 != NULL) { | 1763 /* User already in userlist, so just update it. */ |
1758 /* User already in userlist, so just update it. */ | |
1759 msn_user_unref(user); | |
1760 user = user2; | |
1761 } else { | |
1762 msn_userlist_add_user(userlist, user); | |
1763 } | |
1764 | |
1765 msn_user_set_network(user, network); | |
1766 msn_userlist_add_buddy(userlist, who, group); | |
1767 } | |
1768 else | |
1769 { | |
1770 PurpleBuddy * buddy = purple_find_buddy(session->account, who); | |
1771 gchar *buf; | |
1772 buf = g_strdup_printf(_("Unable to add the buddy %s because the username is invalid. Usernames must be valid email addresses."), who); | |
1773 if (!purple_conv_present_error(who, session->account, buf)) | |
1774 purple_notify_error(purple_account_get_connection(session->account), NULL, _("Unable to Add"), buf); | |
1775 g_free(buf); | |
1776 | |
1777 /* Remove from local list */ | |
1778 purple_blist_remove_buddy(buddy); | |
1779 msn_user_unref(user); | 1764 msn_user_unref(user); |
1780 } | 1765 user = user2; |
1766 } else { | |
1767 msn_userlist_add_user(userlist, user); | |
1768 msn_user_unref(user); | |
1769 } | |
1770 | |
1771 msn_user_set_network(user, network); | |
1772 msn_userlist_add_buddy(userlist, who, group); | |
1773 | |
1781 g_free(group); | 1774 g_free(group); |
1782 } | 1775 } |
1783 | 1776 |
1784 static void | 1777 static void |
1785 finish_auth_request(MsnAddReqData *data, char *msg) | 1778 finish_auth_request(MsnAddReqData *data, char *msg) |
1812 return; | 1805 return; |
1813 } | 1806 } |
1814 | 1807 |
1815 /* XXX - Would group ever be NULL here? I don't think so... | 1808 /* XXX - Would group ever be NULL here? I don't think so... |
1816 * shx: Yes it should; MSN handles non-grouped buddies, and this is only | 1809 * shx: Yes it should; MSN handles non-grouped buddies, and this is only |
1817 * internal. */ | 1810 * internal. |
1811 * KingAnt: But PurpleBuddys must always exist inside PurpleGroups, so | |
1812 * won't group always be non-NULL here? | |
1813 */ | |
1818 user = msn_userlist_find_user(userlist, who); | 1814 user = msn_userlist_find_user(userlist, who); |
1819 if ((user != NULL) && (user->networkid != MSN_NETWORK_UNKNOWN)) { | 1815 if ((user != NULL) && (user->networkid != MSN_NETWORK_UNKNOWN)) { |
1820 /* We already know this buddy and their network. This function knows | 1816 /* We already know this buddy and their network. This function knows |
1821 what to do with users already in the list and stuff... */ | 1817 what to do with users already in the list and stuff... */ |
1822 msn_user_set_invite_message(user, msg); | 1818 msn_user_set_invite_message(user, msg); |
1827 /* We need to check the network for this buddy first */ | 1823 /* We need to check the network for this buddy first */ |
1828 user = msn_user_new(userlist, who, NULL); | 1824 user = msn_user_new(userlist, who, NULL); |
1829 msn_user_set_invite_message(user, msg); | 1825 msn_user_set_invite_message(user, msg); |
1830 msn_user_set_pending_group(user, gname); | 1826 msn_user_set_pending_group(user, gname); |
1831 msn_user_set_network(user, MSN_NETWORK_UNKNOWN); | 1827 msn_user_set_network(user, MSN_NETWORK_UNKNOWN); |
1828 /* Should probably re-use the msn_add_contact_xml function here */ | |
1832 tokens = g_strsplit(who, "@", 2); | 1829 tokens = g_strsplit(who, "@", 2); |
1833 fqy = g_strdup_printf("<ml><d n=\"%s\"><c n=\"%s\"/></d></ml>", | 1830 fqy = g_strdup_printf("<ml><d n=\"%s\"><c n=\"%s\"/></d></ml>", |
1834 tokens[1], | 1831 tokens[1], |
1835 tokens[0]); | 1832 tokens[0]); |
1833 /* TODO: I think user will leak if we disconnect before receiving | |
1834 a response to this FQY request */ | |
1836 msn_notification_send_fqy(session, fqy, strlen(fqy), | 1835 msn_notification_send_fqy(session, fqy, strlen(fqy), |
1837 (MsnFqyCb)add_pending_buddy, user); | 1836 (MsnFqyCb)add_pending_buddy, user); |
1838 g_free(fqy); | 1837 g_free(fqy); |
1839 g_strfreev(tokens); | 1838 g_strfreev(tokens); |
1840 } | 1839 } |