diary/Kojima

・Nexus 7とMTP(その3)

とりあえず日本語のファイル名をUTF8にすることでgMTPから Nexus 7へファイルを送ることはできるようになったのだけど, やっぱり一々UTF8なファイル名のリンクを貼るのは面倒なので, gMTPのソースコードをイジってみるか,と考えた.

この手のエラーは,たいていGTK/GLIBレベルでのファイル名操作の手抜き (GTK/GLIBの内部で処理する際の文字コードはUTF8になっている必要があるけど, ファイルシステム上ではlocale依存なので, GTK/GLIBレベルに持ち込む前にg_filename_to_utf8()で変換してやる必要がある. locale=UTF8な場合のみ,この処理を省いてもエラーにならない)だろう, と見当をつけて,gMTPのソースコードを眺めてみたら,mtp.c のこのあたりが怪しそうだ.

658     filename_stripped = basename(filename);
659     displayProgressBar(_("File Upload"));
660     setProgressFilename(g_strdup(filename_stripped));

コピー処理等のプログレスバーを表示する setProgressFilename() も 表示するファイル名はUTF8である必要があるけど, このコードではfilenameのlocaleを考慮せずにbasename()で切り出して, g_strdup()しているだけっぽい.

filename_strippedを手掛りに,もう少し見ていくと, ファイルをアップロードすると思わしい処理にもこういう部分があった.

779         // Generic file upload.
780         genfile = LIBMTP_new_file_t();
781         genfile->filesize = filesize;
782         genfile->filename = g_strdup(filename_stripped);
783         genfile->filetype = find_filetype(filename_stripped);
784         genfile->parent_id = currentFolderID;

この genfile->filename をUTF8にしてやればよさそうなので, こんな感じのパッチにしてみた.

-        genfile->filename = g_strdup(filename_stripped);
+        // genfile->filename = g_strdup(filename_stripped);
+       genfile->filename = g_filename_to_utf8(filename_stripped, -1, NULL, NULL, &error);

あちこちに散在する g_strdup()でfilename_strippedを操作している部分も 同様に g_filename_to_utf8()を介して操作するようにイジってみたら, どうやらEUC-JPなファイルもそのまま転送できるようになったっぽい.

gmtp03.png

このパッチではファイル名のみをUTF8にしているので, パスの途中にEUC-JPな文字コードがあるとうまく行かない感じだったり, ダウンロードしてきたファイル名をlocaleに変換するような処理はgMTPにないので, libmtpのレベルで操作する必要がありそうだったりするのだけど, とりあえず手元の目的は果したので,そう深く追求しないことにする(苦笑

とりあえずこのパッチをあてたgMTPを使うことで, 手元のPC上のファイルを自由にNexus 7上に送ることができるようになったので, 「らじる☆らじる」の録音スクリプトで録音した語学講座の音声データと,

Screenshot1.jpg

自炊したテキストをNexus 7上に持っていて,

Screenshot2.jpg

Nexus 7上での「どこでも語学教室」が可能になった :-)

音声データをバックグラウンドで流しながら画像データを閲覧できるのか, というあたりを少し心配していたのだけど, Nexus 7のGoogle謹製の"Music"という音楽プレイヤーは, 再生を開始するとそのままバックグラウンドで動き続けるので, 表でコミックビューワー(今は"ComittoN"がお気に入り)を使って 自炊テキストを問題なく表示できた.

これで通勤中にも語学が勉強できる,と言いたいところだけど, 最近は田舎に引きこもっているので,通勤時間が無いのであった(苦笑



添付ファイル: filegmtp03.png 139件 [詳細] fileScreenshot1.jpg 128件 [詳細] fileScreenshot2.jpg 134件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-12-17 (金) 16:35:42