iTunesにコンテキストメニューから曲を追加

iTunesにできるだけ簡単にmp3ファイルを追加したい。できればエクスプローラーからファイルを右クリックしてコンテキストメニューで追加できるといいかんじ。調べてみると、iTunesのCOM APIを使えばできそうだったので試してみた。

まず、iTunesをたたくスクリプトを作成。mylistというプレイリストに曲を追加するなら以下のような感じで。これをadd_mp3.jsとしておく。

var iTunesApp = WScript.CreateObject("iTunes.Application");
var mainLibrary = iTunesApp.LibrarySource;
var playlist = mainLibrary.Playlists.ItemByName("mylist");

for (var i = 0; i < WScript.Arguments.Count(); i++)
{
    playlist.AddFile(WScript.Arguments(i));
}

あとは、.mp3のコンテキストメニューにこのスクリプトを呼ぶメニューを追加してやればよい。

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\iTunes.mp3\shell\add]
@="iTunesに登録"

[HKEY_CLASSES_ROOT\iTunes.mp3\shell\add\command]
@="wscript.exe F:\\media\\add_mp3.js \"%1\""

mp3ファイルがiTunesに関連づけられているなら、こんな感じで。

影舞のUTF-8対応

影舞のUTF-8版が欲しいけど、trunkを使っても大丈夫かとkagemai-usersで聞かれた。

trunkのUTF-8版を0.9としてリリースしていないのは、いろいろやりたいことがあるうちに、時間がとれなくなって放置してしまっただけなので、たぶん、動くはず。

ニーズがあるならリリースを考えてもいいんだけど。。。

ODBC接続

午前中はかなり体調が悪かったけど、午後になってだいぶましになったので、ODBC 接続を試してみることに。

まず ODBCドライバをインストール。

$ gem install dbd-odbc

接続文字列は、"DBI:ODBC:DSN名" でいいらしい。接続は簡単にできたけど、select_one でデータを読もうとすると、failed to allocate memory (NoMemoryError) というエラーがでて読み込めない。

いろいろ探しまわった結果、ODBC NoMemoryError に、set textsize をしろという情報を見つける。

DBI.connect("DBI:ODBC:#{dsn}", dbuser, dbpass) do |db|
  db.do("set textsize 1048576")
  p db.select_one("select * from odbctest")
end

こんな感じでできた。

一応動くところまでいったけど、ODBCドライバに cp932 でデータを渡さないといけないあたりがどうにもいまいち。0.8 ブランチはいいけど、trunk はせっかく全部 UTF8 になってるのに。

ブランチの変更の trunk へのマージ

よく忘れるのでメモ。

作業コピーで

  $ svn log --stop-on-copy

を実行して、どのリビジョンからマージしないといけないかをチェック

トランクの作業コピーで HEAD のリビジョンをチェック

  $ svn update
  617

マージ予定の変更分をチェック

  $ svn diff -r 616:617 https://svn.sourceforge.jp/svnroot/kagemai/kagemai/branches/0.8

トランクの作業コピーにマージしてコミット

  $ svn merge -r 616:617 https://svn.sourceforge.jp/svnroot/kagemai/kagemai/branches/0.8
  $ svn commit -m "Merged 0.8 branch changes r616:617 into the trunk"

ruby-dbi 0.4.x

ruby-dbi 0.4以降は ADO をサポートしてないんですね。メンテナがいなくてサポートされなくなったっぽい?

そのおかげで、最新の ruby-dbi だと影舞と SQL Server の組み合わせは動かないようです。ODBC は使えるようなので、そっちでなんとかするしかないんでしょうね。

あと、MySQL との組み合わせでも検索でエラーがでたり。なんか MySQL driver から quoteメソッドがなくなっていてエラーになるんだけど、これは代替手段があるんだろうか・・・

久しぶりにバグ修正

すっかり更新してませんでしたが、その間、影舞もおおむね触っていませんでした。

とりあえず、 MySQL にデータ保存したときにメールの Reference ヘッダがおかしくなるというバグがあがっていたのを修正。MySQLタイムゾーンを保存してくれないけど、DBI が必ず UTC の Time オブジェクトを返すのが原因。

ちなみに、UTC の Time オブジェクト(本当はローカル時間)を、ローカル時間の Time オブジェクトに変換するには、

Time.local(*time.to_a)

まあ、あまり使わなさそうな技だ。