# HG changeset patch # User Tim Ringenbach # Date 1086547506 0 # Node ID 8054855f2bb9b93363adcac75630e481323a66fa # Parent f0488214826fa0aa591b6d00b62122a8f1d838b1 [gaim-migrate @ 10017] a yahoo japan patch from wing: 1. Recognize ISO2022 in Subject header 2. Go to mail.yahoo.co.jp if account is marked as "Yahoo Japan" 3. Make profiles.yahoo.co.jp a #define and use it in yahoo_profile.c I poked at it myself some too, to make it give the right profile url in the get info box for yahoo japan. I also added a new macro to connection.h to check if a connection is valid. I'm not very good at macros, however, and used its argument twice. Someone should fix that :) committer: Tailor Script diff -r f0488214826f -r 8054855f2bb9 src/connection.h --- a/src/connection.h Sun Jun 06 18:01:32 2004 +0000 +++ b/src/connection.h Sun Jun 06 18:45:06 2004 +0000 @@ -269,6 +269,13 @@ */ GList *gaim_connections_get_connecting(void); +/** + * Checks if gc is still a valid pointer to a gc. + * + * @return @c TRUE if gc is valid. + */ +#define GAIM_CONNECTION_IS_VALID(gc) (g_list_find(gaim_connections_get_all(), (gc)) || g_list_find(gaim_connections_get_connecting(), (gc))) + /*@}*/ /**************************************************************************/ diff -r f0488214826f -r 8054855f2bb9 src/protocols/yahoo/yahoo.c --- a/src/protocols/yahoo/yahoo.c Sun Jun 06 18:01:32 2004 +0000 +++ b/src/protocols/yahoo/yahoo.c Sun Jun 06 18:45:06 2004 +0000 @@ -894,7 +894,7 @@ static char *yahoo_decode(const char *text) { - char *converted; + char *converted = NULL; char *n, *new; const char *end, *p; int i, k; @@ -934,7 +934,10 @@ *n = '\0'; - converted = g_convert(new, n - new, OUT_CHARSET, "iso-8859-1", NULL, NULL, NULL); + 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; @@ -943,9 +946,11 @@ static void yahoo_process_mail(GaimConnection *gc, struct yahoo_packet *pkt) { GaimAccount *account = gaim_connection_get_account(gc); + struct yahoo_data *yd = gc->proto_data; char *who = NULL; char *email = NULL; char *subj = NULL; + char *yahoo_mail_url = (yd->jp? YAHOOJP_MAIL_URL: YAHOO_MAIL_URL); int count = 0; GSList *l = pkt->hash; @@ -971,14 +976,14 @@ char *from = g_strdup_printf("%s (%s)", dec_who, email); gaim_notify_email(gc, dec_subj, from, gaim_account_get_username(account), - "http://mail.yahoo.com/", NULL, NULL); + yahoo_mail_url, NULL, NULL); g_free(dec_who); g_free(dec_subj); g_free(from); } else if (count > 0) { const char *to = gaim_account_get_username(account); - const char *url = "http://mail.yahoo.com/"; + const char *url = yahoo_mail_url; gaim_notify_emails(gc, count, FALSE, NULL, NULL, &to, &url, NULL, NULL); diff -r f0488214826f -r 8054855f2bb9 src/protocols/yahoo/yahoo.h --- a/src/protocols/yahoo/yahoo.h Sun Jun 06 18:01:32 2004 +0000 +++ b/src/protocols/yahoo/yahoo.h Sun Jun 06 18:45:06 2004 +0000 @@ -30,6 +30,7 @@ #define YAHOO_PAGER_HOST "scs.msg.yahoo.com" #define YAHOO_PAGER_PORT 5050 #define YAHOO_PROFILE_URL "http://profiles.yahoo.com/" +#define YAHOO_MAIL_URL "http://mail.yahoo.com/" #define YAHOO_XFER_HOST "filetransfer.msg.yahoo.com" #define YAHOO_XFER_PORT 80 #define YAHOO_ROOMLIST_URL "http://insider.msg.yahoo.com/ycontent/" @@ -37,9 +38,10 @@ /* really we should get the list of servers from http://update.messenger.yahoo.co.jp/servers.html */ #define YAHOOJP_PAGER_HOST "cs.yahoo.co.jp" +#define YAHOOJP_PROFILE_URL "http://profiles.yahoo.co.jp/" +#define YAHOOJP_MAIL_URL "http://mail.yahoo.co.jp/" #define YAHOOJP_XFER_HOST "filetransfer.msg.yahoo.co.jp" #define YAHOOJP_WEBCAM_HOST "wc.yahoo.co.jp" -#define YAHOOJP_PROFILE_URL "profiles.yahoo.co.jp" #define WEBMESSENGER_URL "http://login.yahoo.com/config/login?.src=pg" diff -r f0488214826f -r 8054855f2bb9 src/protocols/yahoo/yahoo_profile.c --- a/src/protocols/yahoo/yahoo_profile.c Sun Jun 06 18:01:32 2004 +0000 +++ b/src/protocols/yahoo/yahoo_profile.c Sun Jun 06 18:45:06 2004 +0000 @@ -626,9 +626,18 @@ char *last_updated_utf8_string; int lang, strid; GaimBuddy *b; + struct yahoo_data *yd; + + if (!GAIM_CONNECTION_IS_VALID(info_data->gc)) { + g_free(info_data->name); + g_free(info_data); + return; + } gaim_debug_info("yahoo", "In yahoo_got_info\n"); + yd = info_data->gc->proto_data; + /* we failed to grab the profile URL. this should never happen */ if (url_text == NULL || strcmp(url_text, "") == 0) { gaim_notify_formatted(info_data->gc, NULL, _("Buddy Information"), NULL, @@ -673,7 +682,7 @@ } if (p) { for (strid = 0; profile_strings[strid].lang != XX; strid += 1) { - if (profile_strings[strid].lang == profile_langs[lang].lang) break; + if (profile_strings[strid].lang == profile_langs[lang].lang) break; } gaim_debug_info("yahoo", "detected profile lang = %s (%d)\n", profile_strings[strid].lang_string, lang); } @@ -895,8 +904,8 @@ /* put a link to the actual profile URL */ g_string_append_printf(s, _("%s: "), _("Profile URL")); g_string_append_printf(s, "%s%s
", - YAHOO_PROFILE_URL, info_data->name, - YAHOO_PROFILE_URL, info_data->name); + (yd->jp? YAHOOJP_PROFILE_URL: YAHOO_PROFILE_URL), info_data->name, + (yd->jp? YAHOOJP_PROFILE_URL: YAHOO_PROFILE_URL), info_data->name); /* finish off the html */ g_string_append(s, "\n"); @@ -934,11 +943,8 @@ data->gc = gc; data->name = g_strdup(name); - if (yd->jp) { - url = g_strdup_printf("%s%s", "http://profiles.yahoo.co.jp/", name); - } else { - url = g_strdup_printf("%s%s", YAHOO_PROFILE_URL, name); - } + url = g_strdup_printf("%s%s", + (yd->jp? YAHOOJP_PROFILE_URL: YAHOO_PROFILE_URL), name); gaim_url_fetch(url, FALSE, NULL, FALSE, yahoo_got_info, data);