Index: src/xfmedia-common.c =================================================================== --- src/xfmedia-common.c (revision 18308) +++ src/xfmedia-common.c (working copy) @@ -158,7 +158,11 @@ startat = (gchar *)filename; } - utf8 = g_filename_to_utf8(startat, -1, NULL, NULL, &err); + if (g_utf8_validate(startat, -1, NULL)) + utf8 = g_strdup(startat); + else + utf8 = g_filename_to_utf8(startat, -1, NULL, NULL, &err); + if(!utf8) { if(err) { g_warning("Failed to convert filename to UTF-8 from filesystem encoding, attempting fallback (%d): %s ('%s')", Index: src/remote.c =================================================================== --- src/remote.c (revision 18308) +++ src/remote.c (working copy) @@ -133,8 +133,13 @@ DBUS_TYPE_INVALID) && filename && *filename) { - if(xfmedia_playlists_load(mwin->plist, filename)) - msg_ret = dbus_message_new_method_return(message); + gchar *lcfn = g_filename_from_utf8(filename, -1, NULL, NULL, NULL); + + if (lcfn) { + if(xfmedia_playlists_load(mwin->plist, lcfn)) + msg_ret = dbus_message_new_method_return(message); + g_free(lcfn); + } } else dbus_error_free(&derr); @@ -162,8 +167,13 @@ DBUS_TYPE_INVALID) && filename && *filename) { - if(xfmedia_playlists_save(mwin->plist, filename, XFMEDIA_PLAYLIST_FORMAT_UNKNOWN)) - msg_ret = dbus_message_new_method_return(message); + gchar *lcfn = g_filename_from_utf8(filename, -1, NULL, NULL, NULL); + + if (lcfn) { + if(xfmedia_playlists_save(mwin->plist, lcfn, XFMEDIA_PLAYLIST_FORMAT_UNKNOWN)) + msg_ret = dbus_message_new_method_return(message); + g_free(lcfn); + } } else dbus_error_free(&derr); @@ -194,20 +204,26 @@ gint length = -1; if(xfmedia_playlist_get(mwin->plist, idx, &title, &length, &filename)) { - if(!title) - title = g_strdup(_("(no title)")); - msg_ret = dbus_message_new_method_return(message); - dbus_message_append_args(msg_ret, + gchar *utf8_fn = g_filename_to_utf8(filename, -1, NULL, NULL, NULL); + + if (utf8_fn) { + if(!title) + title = g_strdup(_("(no title)")); + msg_ret = dbus_message_new_method_return(message); + dbus_message_append_args(msg_ret, #ifdef DBUS_USE_OLD_API - DBUS_TYPE_STRING, title, - DBUS_TYPE_INT32, length, - DBUS_TYPE_STRING, filename, + DBUS_TYPE_STRING, title, + DBUS_TYPE_INT32, length, + DBUS_TYPE_STRING, utf8_fn, #else - DBUS_TYPE_STRING, &title, - DBUS_TYPE_INT32, &length, - DBUS_TYPE_STRING, &filename, + DBUS_TYPE_STRING, &title, + DBUS_TYPE_INT32, &length, + DBUS_TYPE_STRING, &utf8_fn, #endif - DBUS_TYPE_INVALID); + DBUS_TYPE_INVALID); + + g_free(utf8_fn); + } } g_free(title); g_free(filename); @@ -264,30 +280,35 @@ DBUS_TYPE_INVALID) && filename && *filename) { - gchar *name_utf8 = xfmedia_filename_to_name(filename); - if(idx < 0) - idx = xfmedia_playlist_append_entry(mwin->plist, name_utf8, -1, filename, FALSE); - else - idx = xfmedia_playlist_insert_entry(mwin->plist, idx, name_utf8, -1, filename, FALSE); - g_free(name_utf8); + gchar *lcfn = g_filename_from_utf8(filename, -1, NULL, NULL, NULL); + + if (lcfn) { + gchar *name_utf8 = xfmedia_filename_to_name(filename); + if(idx < 0) + idx = xfmedia_playlist_append_entry(mwin->plist, name_utf8, -1, lcfn, FALSE); + else + idx = xfmedia_playlist_insert_entry(mwin->plist, idx, name_utf8, -1, lcfn, FALSE); + g_free(name_utf8); - msg_ret = dbus_message_new_method_return(message); - dbus_message_append_args(msg_ret, + msg_ret = dbus_message_new_method_return(message); + dbus_message_append_args(msg_ret, #ifdef DBUS_USE_OLD_API - DBUS_TYPE_INT32, idx, + DBUS_TYPE_INT32, idx, #else - DBUS_TYPE_INT32, &idx, + DBUS_TYPE_INT32, &idx, #endif - DBUS_TYPE_INVALID); - dbus_connection_send(connection, msg_ret, NULL); - dbus_message_unref(msg_ret); - } else { + DBUS_TYPE_INVALID); + + g_free(lcfn); + } + } + + if (!msg_ret) msg_ret = dbus_message_new_error(message, XFMEDIA_DBUS_ERROR, XFMEDIA_REMOTE_ADD_FILE); - dbus_connection_send(connection, msg_ret, NULL); - dbus_message_unref(msg_ret); - } + dbus_connection_send(connection, msg_ret, NULL); + dbus_message_unref(msg_ret); #ifdef DBUS_USE_OLD_API if(filename) dbus_free(filename); @@ -426,27 +447,35 @@ && (now_playing = xfmedia_playlist_entry_ref_get_index(mwin->cur_playing)) != -1 && xfmedia_playlist_get(mwin->plist, now_playing, &title, &length, &filename)) { - if(!title) - title = g_strdup(_("(no title)")); + gchar *utf8_fn = g_filename_to_utf8(filename, -1, NULL, NULL, NULL); - msg_ret = dbus_message_new_method_return(message); - dbus_message_append_args(msg_ret, + if (utf8_fn) { + if(!title) + title = g_strdup(_("(no title)")); + + msg_ret = dbus_message_new_method_return(message); + dbus_message_append_args(msg_ret, #ifdef DBUS_USE_OLD_API - DBUS_TYPE_INT32, now_playing, - DBUS_TYPE_STRING, title, - DBUS_TYPE_INT32, length, - DBUS_TYPE_STRING, filename, + DBUS_TYPE_INT32, now_playing, + DBUS_TYPE_STRING, title, + DBUS_TYPE_INT32, length, + DBUS_TYPE_STRING, utf8_fn, #else - DBUS_TYPE_INT32, &now_playing, - DBUS_TYPE_STRING, &title, - DBUS_TYPE_INT32, &length, - DBUS_TYPE_STRING, &filename, + DBUS_TYPE_INT32, &now_playing, + DBUS_TYPE_STRING, &title, + DBUS_TYPE_INT32, &length, + DBUS_TYPE_STRING, &utf8_fn, #endif - DBUS_TYPE_INVALID); - + DBUS_TYPE_INVALID); + + g_free(utf8_fn); + } + + g_free(filename); g_free(title); - g_free(filename); - } else { + } + + if (!msg_ret) { msg_ret = dbus_message_new_error(message, XFMEDIA_DBUS_ERROR, XFMEDIA_REMOTE_NOW_PLAYING); }