| 282 |
282 |
| 283 /* TODO: Find out why >8 is problematic. The web site lets you have |
283 /* TODO: Find out why >8 is problematic. The web site lets you have |
| 284 * long passwords, but reportedly the official IM client does not |
284 * long passwords, but reportedly the official IM client does not |
| 285 * allow more than 8 characters to be entered. Just entering the first |
285 * allow more than 8 characters to be entered. Just entering the first |
| 286 * 8 does not, on first try, appear to work. */ |
286 * 8 does not, on first try, appear to work. */ |
| 287 str = g_strdup_printf(_("Sorry, passwords over %d characters in length (yours is %d) are " |
287 /* Note: official client lets you have 10 characters in password. */ |
| 288 "currently not supported by the MySpaceIM plugin."), MSIM_MAX_PASSWORD_LENGTH, |
288 str = g_strdup_printf( |
| |
289 _("Sorry, passwords over %d characters in length (yours is " |
| |
290 "%d) are currently not supported by the MySpaceIM plugin."), |
| |
291 MSIM_MAX_PASSWORD_LENGTH, |
| 289 (int)strlen(acct->password)); |
292 (int)strlen(acct->password)); |
| 290 |
293 |
| 291 /* Notify an error message also, because this is important! */ |
294 /* Notify an error message also, because this is important! */ |
| 292 purple_notify_error(acct, g_strdup(_("MySpaceIM Error")), str, NULL); |
295 purple_notify_error(acct, g_strdup(_("MySpaceIM Error")), str, NULL); |
| 293 |
296 |
| 766 decor = atol(decor_str); |
769 decor = atol(decor_str); |
| 767 else |
770 else |
| 768 decor = 0; |
771 decor = 0; |
| 769 |
772 |
| 770 gs_begin = g_string_new(""); |
773 gs_begin = g_string_new(""); |
| 771 g_string_printf(gs_begin, "<font face='%s' size='%d'>", face, |
774 if (!face) |
| 772 msim_font_size_to_purple(msim_font_height_to_point(height))); |
775 g_string_printf(gs_begin, "<font size='%d'>", |
| |
776 msim_font_size_to_purple(msim_font_height_to_point(height))); |
| |
777 else |
| |
778 g_string_printf(gs_begin, "<font face='%s' size='%d'>", face, |
| |
779 msim_font_size_to_purple(msim_font_height_to_point(height))); |
| |
780 |
| 773 /* No support for font-size CSS? */ |
781 /* No support for font-size CSS? */ |
| 774 /* g_string_printf(gs_begin, "<span style='font-family: %s; font-size: %dpt'>", face, |
782 /* g_string_printf(gs_begin, "<span style='font-family: %s; font-size: %dpt'>", face, |
| 775 msim_font_height_to_point(height)); */ |
783 msim_font_height_to_point(height)); */ |
| 776 |
784 |
| 777 gs_end = g_string_new("</font>"); |
785 gs_end = g_string_new("</font>"); |
| 813 static void msim_markup_c_to_html(xmlnode *root, gchar **begin, gchar **end) |
821 static void msim_markup_c_to_html(xmlnode *root, gchar **begin, gchar **end) |
| 814 { |
822 { |
| 815 const gchar *color; |
823 const gchar *color; |
| 816 |
824 |
| 817 color = xmlnode_get_attrib(root, "v"); |
825 color = xmlnode_get_attrib(root, "v"); |
| |
826 if (!color) |
| |
827 { |
| |
828 purple_debug_info("msim", "msim_markup_c_to_html: <c> tag w/o v attr"); |
| |
829 *begin = g_strdup(""); |
| |
830 *end = g_strdup(""); |
| |
831 /* TODO: log as unrecognized */ |
| |
832 return; |
| |
833 } |
| 818 |
834 |
| 819 /* TODO: parse rgb(255,0,0) into #FF0000, etc. |
835 /* TODO: parse rgb(255,0,0) into #FF0000, etc. |
| 820 * And do something about rgba (alpha) and transparent. |
836 * And do something about rgba (alpha) and transparent. |
| 821 */ |
837 */ |
| 822 /* *begin = g_strdup_printf("<font color='%s'>", color); */ |
838 *begin = g_strdup_printf("<font color='%s'>", color); |
| 823 *begin = g_strdup_printf("<span style='color: %s'>", color); |
839 /* *begin = g_strdup_printf("<span style='color: %s'>", color); */ |
| 824 *end = g_strdup("</p>"); |
840 *end = g_strdup("</font>"); |
| 825 } |
841 } |
| 826 |
842 |
| 827 /** Convert the msim markup <b> tag (background color) into HTML. TODO: Test */ |
843 /** Convert the msim markup <b> tag (background color) into HTML. TODO: Test */ |
| 828 static void msim_markup_b_to_html(xmlnode *root, gchar **begin, gchar **end) |
844 static void msim_markup_b_to_html(xmlnode *root, gchar **begin, gchar **end) |
| 829 { |
845 { |
| 830 const gchar *color; |
846 const gchar *color; |
| 831 |
847 |
| 832 color = xmlnode_get_attrib(root, "v"); |
848 color = xmlnode_get_attrib(root, "v"); |
| |
849 if (!color) |
| |
850 { |
| |
851 *begin = g_strdup(""); |
| |
852 *end = g_strdup(""); |
| |
853 purple_debug_info("msim", "msim_markup_b_to_html: <b> w/o v attr"); |
| |
854 /* TODO: log as unrecognized. */ |
| |
855 return; |
| |
856 } |
| 833 |
857 |
| 834 /* TODO: parse color same as msim_markup_c_to_html(). */ |
858 /* TODO: parse color same as msim_markup_c_to_html(). */ |
| |
859 /* TODO: find out how to set background color. */ |
| 835 *begin = g_strdup_printf("<span style='background-color: %s'>", color); |
860 *begin = g_strdup_printf("<span style='background-color: %s'>", color); |
| 836 *end = g_strdup("</p>"); |
861 *end = g_strdup("</p>"); |
| 837 } |
862 } |
| 838 |
863 |
| 839 /** Convert the msim markup <i> tag (emoticon image) into HTML. TODO: Test */ |
864 /** Convert the msim markup <i> tag (emoticon image) into HTML. TODO: Test */ |
| 840 static void msim_markup_i_to_html(xmlnode *root, gchar **begin, gchar **end) |
865 static void msim_markup_i_to_html(xmlnode *root, gchar **begin, gchar **end) |
| 841 { |
866 { |
| 842 const gchar *name; |
867 const gchar *name; |
| 843 |
868 |
| 844 name = xmlnode_get_attrib(root, "n"); |
869 name = xmlnode_get_attrib(root, "n"); |
| |
870 if (!name) |
| |
871 { |
| |
872 purple_debug_info("msim", "msim_markup_i_to_html: <i> w/o n"); |
| |
873 *begin = g_strdup(""); |
| |
874 *end = g_strdup(""); |
| |
875 /* TODO: log as unrecognized */ |
| |
876 return; |
| |
877 } |
| 845 |
878 |
| 846 /* TODO: Support these emoticons: |
879 /* TODO: Support these emoticons: |
| 847 * |
880 * |
| 848 * bigsmile growl mad scared tongue devil happy messed sidefrown upset |
881 * bigsmile growl mad scared tongue devil happy messed sidefrown upset |
| 849 * frazzled heart nerd sinister wink geek laugh oops smirk worried |
882 * frazzled heart nerd sinister wink geek laugh oops smirk worried |
| 1097 gchar *body_str; |
1130 gchar *body_str; |
| 1098 MsimMessage *msg; |
1131 MsimMessage *msg; |
| 1099 gchar *user; |
1132 gchar *user; |
| 1100 PurpleNotifyUserInfo *user_info; |
1133 PurpleNotifyUserInfo *user_info; |
| 1101 PurpleBuddy *buddy; |
1134 PurpleBuddy *buddy; |
| 1102 gchar *song; |
1135 const gchar *str, *str2; |
| 1103 |
1136 |
| 1104 |
1137 |
| 1105 /* Get user{name,id} from msim_get_info, passed as an MsimMessage for orthogonality. */ |
1138 /* Get user{name,id} from msim_get_info, passed as an MsimMessage for |
| |
1139 orthogonality. */ |
| 1106 msg = (MsimMessage *)data; |
1140 msg = (MsimMessage *)data; |
| 1107 user = g_strdup(msim_msg_get_string(msg, "user")); |
1141 user = msim_msg_get_string(msg, "user"); |
| |
1142 if (!user) |
| |
1143 { |
| |
1144 purple_debug_info("msim", "msim_get_info_cb: no 'user' in msg"); |
| |
1145 return; |
| |
1146 } |
| |
1147 |
| 1108 purple_debug_info("msim", "msim_get_info_cb: got for user: %s\n", user); |
1148 purple_debug_info("msim", "msim_get_info_cb: got for user: %s\n", user); |
| 1109 msim_msg_free(msg); |
1149 msim_msg_free(msg); |
| 1110 |
1150 |
| 1111 |
1151 |
| 1112 body_str = msim_msg_get_string(user_info_msg, "body"); |
1152 body_str = msim_msg_get_string(user_info_msg, "body"); |
| 1117 /* Note: don't assume buddy is non-NULL; will be if lookup random user not on blist. */ |
1157 /* Note: don't assume buddy is non-NULL; will be if lookup random user not on blist. */ |
| 1118 |
1158 |
| 1119 user_info = purple_notify_user_info_new(); |
1159 user_info = purple_notify_user_info_new(); |
| 1120 |
1160 |
| 1121 /* Identification */ |
1161 /* Identification */ |
| 1122 purple_notify_user_info_add_pair(user_info, _("User"), user); |
1162 purple_notify_user_info_add_pair(user_info, _("User"), g_strdup(user)); |
| 1123 |
1163 |
| 1124 /* note: g_hash_table_lookup does not create a new string! */ |
1164 /* note: g_hash_table_lookup does not create a new string! */ |
| 1125 purple_notify_user_info_add_pair(user_info, _("User ID"), |
1165 str = g_hash_table_lookup(body, "UserID"); |
| 1126 g_strdup(g_hash_table_lookup(body, "UserID"))); |
1166 if (str) |
| |
1167 purple_notify_user_info_add_pair(user_info, _("User ID"), |
| |
1168 g_strdup(str)); |
| 1127 |
1169 |
| 1128 /* a/s/l...the vitals */ |
1170 /* a/s/l...the vitals */ |
| 1129 purple_notify_user_info_add_pair(user_info, _("Age"), |
1171 str = g_hash_table_lookup(body, "Age"); |
| 1130 g_strdup(g_hash_table_lookup(body, "Age"))); |
1172 if (str) |
| 1131 |
1173 purple_notify_user_info_add_pair(user_info, _("Age"), g_strdup(str)); |
| 1132 purple_notify_user_info_add_pair(user_info, _("Gender"), |
1174 |
| 1133 g_strdup(g_hash_table_lookup(body, "Gender"))); |
1175 str = g_hash_table_lookup(body, "Gender"); |
| 1134 |
1176 if (str) |
| 1135 purple_notify_user_info_add_pair(user_info, _("Location"), |
1177 purple_notify_user_info_add_pair(user_info, _("Gender"), g_strdup(str)); |
| 1136 g_strdup(g_hash_table_lookup(body, "Location"))); |
1178 |
| |
1179 str = g_hash_table_lookup(body, "Location"); |
| |
1180 if (str) |
| |
1181 purple_notify_user_info_add_pair(user_info, _("Location"), |
| |
1182 g_strdup(str)); |
| 1137 |
1183 |
| 1138 /* Other information */ |
1184 /* Other information */ |
| 1139 |
1185 |
| 1140 /* Headline comes from buddy status messages */ |
1186 /* Headline comes from buddy status messages */ |
| 1141 if (buddy && purple_blist_node_get_string(&buddy->node, "Headline")) |
1187 if (buddy) |
| 1142 purple_notify_user_info_add_pair(user_info, "Headline", |
1188 { |
| 1143 purple_blist_node_get_string(&buddy->node, "Headline")); |
1189 str = purple_blist_node_get_string(&buddy->node, "Headline"); |
| 1144 |
1190 if (str) |
| 1145 song = g_strdup_printf("%s - %s", |
1191 purple_notify_user_info_add_pair(user_info, "Headline", str); |
| 1146 (gchar *)g_hash_table_lookup(body, "BandName"), |
1192 } |
| 1147 (gchar *)g_hash_table_lookup(body, "SongName")); |
1193 |
| 1148 |
1194 |
| 1149 |
1195 str = g_hash_table_lookup(body, "BandName"); |
| 1150 purple_notify_user_info_add_pair(user_info, _("Song"), song); |
1196 str2 = g_hash_table_lookup(body, "SongName"); |
| 1151 /* Do not free song - used by user_info. */ |
1197 if (str || str2) |
| |
1198 { |
| |
1199 purple_notify_user_info_add_pair(user_info, _("Song"), |
| |
1200 g_strdup_printf("%s - %s", |
| |
1201 str ? str : "Unknown Artist", |
| |
1202 str2 ? str2 : "Unknown Song")); |
| |
1203 } |
| |
1204 |
| 1152 |
1205 |
| 1153 /* Total friends only available if looked up by uid, not username. */ |
1206 /* Total friends only available if looked up by uid, not username. */ |
| 1154 if (g_hash_table_lookup(body, "TotalFriends")) |
1207 str = g_hash_table_lookup(body, "TotalFriends"); |
| |
1208 if (str) |
| 1155 purple_notify_user_info_add_pair(user_info, _("Total Friends"), |
1209 purple_notify_user_info_add_pair(user_info, _("Total Friends"), |
| 1156 g_strdup(g_hash_table_lookup(body, "TotalFriends"))); |
1210 g_strdup(str)); |
| 1157 |
1211 |
| 1158 purple_notify_userinfo(session->gc, user, user_info, NULL, NULL); |
1212 purple_notify_userinfo(session->gc, user, user_info, NULL, NULL); |
| 1159 purple_debug_info("msim", "msim_get_info_cb: username=%s\n", user); |
1213 purple_debug_info("msim", "msim_get_info_cb: username=%s\n", user); |
| 1160 //purple_notify_user_info_destroy(user_info); |
1214 //purple_notify_user_info_destroy(user_info); |
| 1161 /* Do not free username, since it will be used by user_info. */ |
1215 /* Do not free username, since it will be used by user_info. */ |
| 2446 "dsn", MSIM_TYPE_INTEGER, dsn, |
2503 "dsn", MSIM_TYPE_INTEGER, dsn, |
| 2447 "uid", MSIM_TYPE_INTEGER, session->userid, |
2504 "uid", MSIM_TYPE_INTEGER, session->userid, |
| 2448 "lid", MSIM_TYPE_INTEGER, lid, |
2505 "lid", MSIM_TYPE_INTEGER, lid, |
| 2449 "rid", MSIM_TYPE_INTEGER, rid, |
2506 "rid", MSIM_TYPE_INTEGER, rid, |
| 2450 /* TODO: dictionary field type */ |
2507 /* TODO: dictionary field type */ |
| 2451 "body", MSIM_TYPE_STRING, g_strdup_printf("%s=%s", field_name, user), |
2508 "body", MSIM_TYPE_STRING, |
| |
2509 g_strdup_printf("%s=%s", field_name, user), |
| 2452 NULL)); |
2510 NULL)); |
| 2453 } |
2511 } |
| 2454 |
2512 |
| 2455 |
2513 |
| 2456 /** |
2514 /** |