Mercurial > pidgin.yaz
diff libpurple/protocols/yahoo/yahoo.c @ 27940:b623c1824f29
propagate from branch 'im.pidgin.pidgin' (head 58fbcc161c5eadf3f307cd460a6ce0a209d908df)
to branch 'im.pidgin.pidgin.yaz' (head a378a1d9618c47f5b0e6c67daf613d3c4275f7cf)
author | Yoshiki Yazawa <yaz@honeyplanet.jp> |
---|---|
date | Thu, 16 Apr 2009 05:51:42 +0000 |
parents | 3712d32363dd 26f40c154689 |
children | 684690dbda4a |
line wrap: on
line diff
--- a/libpurple/protocols/yahoo/yahoo.c Wed Apr 15 15:46:31 2009 +0000 +++ b/libpurple/protocols/yahoo/yahoo.c Thu Apr 16 05:51:42 2009 +0000 @@ -1430,8 +1430,9 @@ #define OUT_CHARSET "utf-8" -static char *yahoo_decode(const char *text) +static char *yahoo_decode(PurpleConnection *gc, const char *text) { + struct yahoo_data *yd = gc->proto_data; char *converted = NULL; char *n, *new; const char *end, *p; @@ -1472,11 +1473,16 @@ *n = '\0'; - if (strstr(text, "\033$B")) - converted = g_convert(new, n - new, OUT_CHARSET, "iso-2022-jp", NULL, NULL, NULL); - if (!converted) - converted = g_convert(new, n - new, OUT_CHARSET, "iso-8859-1", NULL, NULL, NULL); - g_free(new); + if (yd->jp) { + converted = g_convert(new, n - new, OUT_CHARSET, "UTF-8", NULL, NULL, NULL); + } + if (!yd->jp || !converted) { + if (strstr(text, "\033$B")) + converted = g_convert(new, n - new, OUT_CHARSET, "iso-2022-jp", NULL, NULL, NULL); + if (!converted) + converted = g_convert(new, n - new, OUT_CHARSET, "iso-8859-1", NULL, NULL, NULL); + g_free(new); + } return converted; } @@ -1509,8 +1515,8 @@ } if (who && subj && email && *email) { - char *dec_who = yahoo_decode(who); - char *dec_subj = yahoo_decode(subj); + char *dec_who = yahoo_decode(gc, who); + char *dec_subj = yahoo_decode(gc, subj); char *from = g_strdup_printf("%s (%s)", dec_who, email); purple_notify_email(gc, dec_subj, from, purple_account_get_username(account), @@ -1667,11 +1673,12 @@ pack = yahoo_packet_new(YAHOO_SERVICE_AUTHRESP, YAHOO_STATUS_AVAILABLE, 0); if(yd->jp) { - yahoo_packet_hash(pack, "sssss", + yahoo_packet_hash(pack, "ssssss", 0, name, 6, result6, 96, result96, 1, name, + 244, YAHOOJP_CLIENT_VERSION_ID, 135, YAHOOJP_CLIENT_VERSION); } else { yahoo_packet_hash(pack, "ssssss", @@ -2130,11 +2137,12 @@ pack = yahoo_packet_new(YAHOO_SERVICE_AUTHRESP, yd->current_status, 0); if(yd->jp) { - yahoo_packet_hash(pack, "sssss", + yahoo_packet_hash(pack, "ssssss", 0, name, 6, resp_6, 96, resp_96, 1, name, + 244, YAHOOJP_CLIENT_VERSION_ID, 135, YAHOOJP_CLIENT_VERSION); } else { yahoo_packet_hash(pack, "ssssss", @@ -4264,7 +4272,10 @@ use_whole_url ? base_url : "", yd->cookie_t, yd->cookie_y); - url_data = purple_util_fetch_url_request(base_url, use_whole_url, + if (yd->jp) + url_data = NULL; + else + url_data = purple_util_fetch_url_request(base_url, use_whole_url, "Mozilla/4.0 (compatible; MSIE 5.5)", TRUE, request, FALSE, yahoo_get_inbox_token_cb, gc); @@ -4688,6 +4699,11 @@ } pkt = yahoo_packet_new(YAHOO_SERVICE_Y6_STATUS_UPDATE, YAHOO_STATUS_AVAILABLE, 0); + if(!pkt) { // yaz + purple_debug_info("yahoo", "yahoo_set_idle: pkt == NULL\n"); + return; + } + yahoo_packet_hash_int(pkt, 10, yd->current_status); if (yd->current_status == YAHOO_STATUS_CUSTOM) { @@ -4732,20 +4748,27 @@ } pkt = yahoo_packet_new(YAHOO_SERVICE_Y6_STATUS_UPDATE, YAHOO_STATUS_AVAILABLE, 0); + if(!pkt) { + purple_debug_info("yahoo", "yahoo_set_idle: pkt == NULL\n"); + return; + } yahoo_packet_hash_int(pkt, 10, yd->current_status); if (yd->current_status == YAHOO_STATUS_CUSTOM) { const char *tmp; + gboolean utf8 = TRUE; if (status == NULL) status = purple_presence_get_active_status(purple_account_get_presence(purple_connection_get_account(gc))); tmp = purple_status_get_attr_string(status, "message"); if (tmp != NULL) { - msg = yahoo_string_encode(gc, tmp, NULL); + msg = yahoo_string_encode(gc, tmp, &utf8); msg2 = purple_markup_strip_html(msg); - yahoo_packet_hash_str(pkt, 19, msg2); + yahoo_packet_hash_str(pkt, 97, utf8 ? "1" : 0); + yahoo_packet_hash_str(pkt, 19, msg2); // yaz: pkt may be NULL. } else { /* get_yahoo_status_from_purple_status() returns YAHOO_STATUS_CUSTOM for * the generic away state (YAHOO_STATUS_TYPE_AWAY) with no message */ + yahoo_packet_hash_str(pkt, 97, utf8 ? "1" : 0); yahoo_packet_hash_str(pkt, 19, _("Away")); } } else { @@ -5484,11 +5507,11 @@ option = purple_account_option_bool_new(_("Ignore conference and chatroom invitations"), "ignore_invites", FALSE); prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); - option = purple_account_option_string_new(_("Encoding"), "local_charset", "ISO-8859-1"); + option = purple_account_option_string_new(_("Encoding"), "local_charset", "UTF-8"); prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); -#if 0 +#if 1 option = purple_account_option_string_new(_("Chat room list URL"), "room_list", YAHOO_ROOMLIST_URL); prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);