* gmtpでEUC-JPなファイルが送れない [#bc7138af]

- ページ: [[不具合報告/5.0 x86]]
- 投稿者: [[kojima]]
- 優先順位: 低
- 状態: 提案
- カテゴリー: 不具合報告
- 投稿日: 2012-12-23 (日) 22:50:52
- バージョン: Plamo-5.0

** メッセージ [#y462812c]
MTP経由で外部機器(Nexus7)とgmtpを使って通信する際に、送るファイルの名前がEUC-JPだと
エラーになる。とりあえずUTF-8で同名のハードリンクを使ってごまかしているけど、
多分、gmtpの中で文字コード変換処理を追加してやればいいくらいのバグなので、
時間ができたら調べてみよう。

--------
- まだgmtpはパッケージとしてはあげていないけど、個人的な備忘録。 -- [[kojima]] &new{2012-12-23 (日) 22:54:19};
- とりあえずこれくらいの修正でeuc-jpなファイルを送ることができた。 音楽データのトラック名も変換するようにしてみたけどテストはしていない。あとダウンロードはどこかでg_filename_from_utf8()な処理が必要っぽい -- [[kojima]] &new{2013-01-03 (木) 00:57:57};

 $ 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;
- ざっと見、データをダウンロードしてくる際のファイル名の変換処理はlibmtpの側でやらないといけない感じ。そうすると、文字コードの変換機能はlibmtp側にもたせる方がよさげだが、libmtpのコードは見ていない -- [[kojima]] &new{2013-01-03 (木) 08:59:58};

#comment

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS