* gmtpでEUC-JPなファイルが送れない [#bc7138af]
MTP経由で外部機器(Nexus7)とgmtpを使って通信する際に、送るファイルの名前がEUC-JPだと エラーになる。とりあえずUTF-8で同名のハードリンクを使ってごまかしているけど、 多分、gmtpの中で文字コード変換処理を追加してやればいいくらいのバグなので、 時間ができたら調べてみよう。
$ diff -u gMTP/src/mtp.c build/src/mtp.c --- gMTP/src/mtp.c 2012-11-14 13:34:36.000000000 +0900 +++ build/src/mtp.c 2013-01-03 00:39:50.000000000 +0900 @@ -655,9 +655,12 @@ return; } + GError *terror = NULL; + gchar *display_filename; filename_stripped = basename(filename); + display_filename = g_filename_to_utf8(filename_stripped, -1, NULL, NULL, &terror); displayProgressBar(_("File Upload")); - setProgressFilename(g_strdup(filename_stripped)); + setProgressFilename(display_filename); // What we need to do is work what type of file we are sending // and either use the general file send, or @@ -672,7 +675,8 @@ trackfile = LIBMTP_new_track_t(); trackfile->filesize = filesize; - trackfile->filename = g_strdup(filename_stripped); + // trackfile->filename = g_strdup(filename_stripped); + trackfile->filename = g_filename_to_utf8(filename_stripped, -1, NULL, NULL, &terror); trackfile->filetype = find_filetype(filename_stripped); trackfile->parent_id = currentFolderID; trackfile->storage_id = DeviceMgr.devicestorage->id; @@ -708,8 +712,10 @@ // Add some data if it's all blank so we don't freak out some players. if (trackfile->album == NULL) trackfile->album = NULL; - if (trackfile->title == NULL) - trackfile->title = g_strdup(filename_stripped); + if (trackfile->title == NULL) { + // trackfile->title = g_strdup(filename_stripped); + trackfile->title = g_filename_to_utf8(filename_stripped, -1, NULL, NULL, &terror); + } if (trackfile->artist == NULL) trackfile->artist = g_strdup(_("<Unknown>")); if (trackfile->date == NULL) { @@ -776,10 +782,12 @@ LIBMTP_destroy_track_t(trackfile); LIBMTP_destroy_album_t(albuminfo); } else { + GError *error = NULL; // Generic file upload. genfile = LIBMTP_new_file_t(); genfile->filesize = filesize; - genfile->filename = g_strdup(filename_stripped); + // genfile->filename = g_strdup(filename_stripped); + genfile->filename = g_filename_to_utf8(filename_stripped, -1, NULL, NULL, &error); genfile->filetype = find_filetype(filename_stripped); genfile->parent_id = currentFolderID; genfile->storage_id = DeviceMgr.devicestorage->id;