diff -urNp realplay-10.0.3.orig/player/app/gtk/clipdetails.cpp realplay-10.0.3/player/app/gtk/clipdetails.cpp --- realplay-10.0.3.orig/player/app/gtk/clipdetails.cpp 2004-10-19 02:53:31.000000000 +0800 +++ realplay-10.0.3/player/app/gtk/clipdetails.cpp 2005-03-05 03:32:57.000000000 +0800 @@ -80,14 +80,27 @@ static void update_clip_info(HXClipDetailsDialog* dialog) { const gchar* url; + gchar *url_utf8; GValue value; gboolean result; const gchar* prop; memset(&value, 0, sizeof(value)); - url = hx_player_get_url(dialog->player); - gtk_label_set_text(GTK_LABEL(dialog->url_label), url? url: ""); + url = hx_player_get_url(dialog->player); + url_utf8 = NULL; + if (!g_utf8_validate(url, -1, NULL)) { + url_utf8 = g_locale_to_utf8(url, -1, NULL, NULL, NULL); + } + + + if (url_utf8) + gtk_label_set_text(GTK_LABEL(dialog->url_label), url_utf8); + else + gtk_label_set_text(GTK_LABEL(dialog->url_label), url ? url: ""); + + if (url_utf8) + g_free(url_utf8); result = hx_player_get_statistic(dialog->player, "title", &value); if(result) @@ -96,6 +109,10 @@ update_clip_info(HXClipDetailsDialog* di gtk_label_set_text(GTK_LABEL(dialog->title_label), prop); g_value_unset(&value); } + else + { + gtk_label_set_text(GTK_LABEL(dialog->title_label), ""); + } result = hx_player_get_statistic(dialog->player, "author", &value); if(result) @@ -104,6 +121,10 @@ update_clip_info(HXClipDetailsDialog* di gtk_label_set_text(GTK_LABEL(dialog->author_label), prop); g_value_unset(&value); } + else + { + gtk_label_set_text(GTK_LABEL(dialog->author_label), ""); + } result = hx_player_get_statistic(dialog->player, "copyright", &value); if(result) @@ -112,6 +133,11 @@ update_clip_info(HXClipDetailsDialog* di gtk_label_set_text(GTK_LABEL(dialog->copyright_label), prop); g_value_unset(&value); } + else + { + gtk_label_set_text(GTK_LABEL(dialog->copyright_label), ""); + } + result = hx_player_get_statistic(dialog->player, "abstract", &value); if(result) @@ -120,7 +146,11 @@ update_clip_info(HXClipDetailsDialog* di gtk_label_set_text(GTK_LABEL(dialog->abstract_label), prop); g_value_unset(&value); } - + else + { + gtk_label_set_text(GTK_LABEL(dialog->abstract_label), ""); + } + result = hx_player_get_statistic(dialog->player, "description", &value); if(result) { @@ -128,6 +158,10 @@ update_clip_info(HXClipDetailsDialog* di gtk_label_set_text(GTK_LABEL(dialog->description_label), prop); g_value_unset(&value); } + else + { + gtk_label_set_text(GTK_LABEL(dialog->description_label), ""); + } result = hx_player_get_statistic(dialog->player, "keywords", &value); if(result) @@ -136,6 +170,11 @@ update_clip_info(HXClipDetailsDialog* di gtk_label_set_text(GTK_LABEL(dialog->keywords_label), prop); g_value_unset(&value); } + else + { + gtk_label_set_text(GTK_LABEL(dialog->keywords_label), ""); + } + } static void diff -urNp realplay-10.0.3.orig/player/app/gtk/mainapp.cpp realplay-10.0.3/player/app/gtk/mainapp.cpp --- realplay-10.0.3.orig/player/app/gtk/mainapp.cpp 2004-11-23 08:24:25.000000000 +0800 +++ realplay-10.0.3/player/app/gtk/mainapp.cpp 2005-03-05 03:33:12.000000000 +0800 @@ -552,9 +552,17 @@ recent_urls_add(HXMainWindow* window, /* Check for duplicates */ iter = window->recent_urls_list; + gchar *url_utf8 = NULL; + + + if (url && !g_utf8_validate(url, -1, NULL)) { + url_utf8 = g_locale_to_utf8 (url, -1, NULL, NULL, NULL); + } + + while(iter) { - if(strcmp(url, (gchar*)iter->data) == 0) + if(strcmp(url_utf8 ? url_utf8 : url, (gchar*)iter->data) == 0) { /* Already in our list */ return; @@ -583,13 +591,13 @@ recent_urls_add(HXMainWindow* window, { window->recent_urls_list = g_list_append(window->recent_urls_list, - g_strdup(url)); + url_utf8 ? url_utf8 : g_strdup(url)); } else { window->recent_urls_list = g_list_prepend(window->recent_urls_list, - g_strdup(url)); + url_utf8 ? url_utf8 : g_strdup(url)); } /* Refresh the menu */ @@ -1426,6 +1434,14 @@ hxwindow_save_preferences(HXMainWindow* while(recent_iter) { line = g_strdup_printf("url%d=%s\n", i, (gchar*)recent_iter->data); + /*printf ("usrls: %s\n", line);*/ + if (!g_utf8_validate(line, -1, NULL)) { + gchar * line_utf8 = g_locale_to_utf8 (line, -1, NULL, NULL, NULL); + if (line_utf8) { + free(line); + line = line_utf8; + } + } result = hxcommon_channel_write(chan, line); g_free(line); @@ -1447,10 +1463,26 @@ hxwindow_save_preferences(HXMainWindow* HXFavorite* favorite = (HXFavorite*)favorites_iter->data; line = g_strdup_printf("favorite_title%d=%s\n", i, favorite->title); + + if (!g_utf8_validate(line, -1, NULL)) { + gchar * line_utf8 = g_locale_to_utf8 (line, -1, NULL, NULL, NULL); + if (line_utf8) { + free(line); + line = line_utf8; + } + } result = hxcommon_channel_write(chan, line); g_free(line); line = g_strdup_printf("favorite_url%d=%s\n", i, favorite->url); + + if (!g_utf8_validate(line, -1, NULL)) { + gchar * line_utf8 = g_locale_to_utf8 (line, -1, NULL, NULL, NULL); + if (line_utf8) { + free(line); + line = line_utf8; + } + } result = hxcommon_channel_write(chan, line); g_free(line); @@ -3611,6 +3643,7 @@ hpw_play(HXMainWindow* window) /* Update the window title */ gchar* window_title; + gchar* window_title_utf8 = NULL; const gchar* title = hx_player_get_title(HX_PLAYER(window->player)); if(title && *title) @@ -3631,7 +3664,14 @@ hpw_play(HXMainWindow* window) window_title = g_strdup(APP_NAME_LONG); } } - + + if (!g_utf8_validate(window_title, -1, NULL)) { + window_title_utf8 = g_locale_to_utf8(window_title, -1, NULL, NULL, NULL); + if (window_title_utf8) { + g_free(window_title); + window_title = window_title_utf8; + } + } gtk_window_set_title(GTK_WINDOW(window->window), window_title); g_free(window_title); diff -urNp realplay-10.0.3.orig/player/common/gtk/hxplayer.cpp realplay-10.0.3/player/common/gtk/hxplayer.cpp --- realplay-10.0.3.orig/player/common/gtk/hxplayer.cpp 2004-10-19 02:55:17.000000000 +0800 +++ realplay-10.0.3/player/common/gtk/hxplayer.cpp 2005-03-05 03:33:32.000000000 +0800 @@ -290,7 +290,9 @@ OnTitleChanged(void* userInfo, { in = strlen(pTitle) + 1; out = 0; - title = g_convert(pTitle, in - 1, "UTF-8", "ISO-8859-1", &in, &out, NULL); + + title = g_locale_to_utf8(pTitle, -1, NULL, NULL, NULL); + } g_signal_emit (G_OBJECT (player), signals[TITLE_CHANGED_SIGNAL], 0, title); @@ -1118,12 +1120,25 @@ hx_player_open_url(HXPlayer* player, const gchar* url) { bool bResult; + gchar *lc_url = NULL; g_return_val_if_fail(HX_IS_PLAYER(player), FALSE); g_return_val_if_fail(url != NULL, FALSE); g_return_val_if_fail(player->player != NULL, FALSE); - bResult = ClientPlayerOpenURL(player->player, url, NULL); + + + if (g_utf8_validate(url, -1, NULL)) { + lc_url = g_locale_from_utf8(url, -1, NULL, NULL, NULL); + } + + + bResult = ClientPlayerOpenURL(player->player, lc_url ? lc_url : url, NULL); + + if (lc_url) { + g_free(lc_url); + } + if(player->shuffle) { @@ -1191,14 +1206,24 @@ hx_player_open_url_with_mime_type(HXPlay const gchar* mime_type) { bool bResult; - + gchar *lc_url = NULL; + g_return_val_if_fail(HX_IS_PLAYER(player), FALSE); g_return_val_if_fail(url != NULL, FALSE); g_return_val_if_fail(mime_type != NULL, FALSE); g_return_val_if_fail(player->player != NULL, FALSE); - - bResult = ClientPlayerOpenURL(player->player, url, mime_type); - + + if (g_utf8_validate(url, -1, NULL)) { + lc_url = g_locale_from_utf8(url, -1, NULL, NULL, NULL); + } + + + bResult = ClientPlayerOpenURL(player->player, lc_url ? lc_url : url, mime_type); + + if (lc_url) { + g_free(lc_url); + } + if(player->shuffle) { hx_player_shuffle(player); @@ -1231,6 +1256,7 @@ hx_player_open_file(HXPlayer* player, url = g_strdup_printf("file://%s", filename); + result = hx_player_open_url(player, url); g_free(url); @@ -2167,12 +2193,13 @@ hx_player_get_title(HXPlayer* player) } else { - gsize in; + /*gsize in; gsize out; in = strlen(szTitle) + 1; out = 0; - player->title_buf = g_convert(szTitle, in - 1, "UTF-8", "ISO-8859-1", &in, &out, NULL); + player->title_buf = g_convert(szTitle, in - 1, "UTF-8", "ISO-8859-1", &in, &out, NULL);*/ + player->title_buf = g_locale_to_utf8(szTitle, -1, NULL, NULL, NULL); } } @@ -2231,12 +2258,14 @@ hx_player_get_group_title(HXPlayer* play else { /* Convert to utf-8 */ - gsize in; + /*gsize in; gsize out; in = strlen(buf) + 1; out = 0; - player->group_title_buf = g_convert(buf, in - 1, "UTF-8", "ISO-8859-1", &in, &out, NULL); + player->group_title_buf = g_convert(buf, in - 1, "UTF-8", "ISO-8859-1", &in, &out, NULL);*/ + //donot convert utf-8 from ISO-8859-1, locale is better + player->group_title_buf = g_locale_to_utf8(buf, -1, NULL, NULL, NULL); g_free(buf); } @@ -2296,16 +2325,17 @@ hx_player_get_statistic(HXPlayer* pla } g_assert(buf_used == buf_desired); str_value[buf_used] = '\0'; - + printf ("str_value%s\n", str_value); if(g_utf8_validate(str_value, -1, NULL)) { utf8_val = str_value; } else { - in = buf_used + 1; + /*in = buf_used + 1; out = 0; - utf8_val = g_convert(str_value, buf_used, "UTF-8", "ISO-8859-1", &in, &out, NULL); + utf8_val = g_convert(str_value, buf_used, "UTF-8", "ISO-8859-1", &in, &out, NULL);*/ + utf8_val = g_locale_to_utf8 (str_value, -1, NULL, NULL, NULL); g_assert(utf8_val); g_free(str_value); }