iPhotoのmixi用エクスポートプラグン改良版

追記 2008.6.2

別スレッドでexportされるiPhotoプラグインの仕様でRubyCocoaで動かすのが難しくて、けっきょくiPhotoからmixiにエクスポートするプラグイン(きちんと動くObjective-Cバージョン)を作ったのでそちらをご利用ください。

iPhotoのmixi用エクスポートプラグンを改良して比較的安定してまともな動作をするようになりました。ただRubyCocoaとiPhotoのエクスポートプラグインの仕様上の制約で一回エクスポートしたら一度再起動しないと二回目のエクスポートができないです(しようとすると何もしないで終了するようになっています)。

ダウンロード

バイナリ
mixiExporter.iPhotoExporter.zip
ソース
iphoto.exporter.mixi.20080509.zip

つかいかた

/Applications/iPhoto.app/Contents/PlugIns/
もしくは
~/Library/Application Support/iPhoto/Plugins/
mixiExporter.iPhotoExporter.zipの中にあるmixiExporter.iPhotoExporterをコピーしてください。もし前のバージョンのsimpleExporter.iPhotoExporterをインストールしていたらフォルダごと捨ててください(そのままにしていても動作に支障はありません)。

前のバージョンはエクスポートしている間フリーズしてた&ファイル数が多いと途中で止まってたのですが今回はフリーズもせず途中で止まったりもしなくなっています。また、ユーザ名・パスワード・アルバム名を記憶するようになりました。

RubyCocoaの何が問題になっていたか

iPhotoのエクスポートプラグインは、エクスポートを実行するたびに新しく作られたスレッド上で実行されるようになっているようで、実行するたびにコードを実行しているスレッドオブジェクトがかわります。

RubyCocoaのコードを見たかんじ、ひとつのプロセスの中で一度だけ初期化される前提で作られていて(それはたぶんRubyCocoaが内部で呼んでいるRuby本体がひとつのプロセスの中で一回しか初期化できない&同一スレッドで実行される前提になっているからだと思われます)、結果はじめにRubyCocoaを初期化したスレッドからしかRubyのコードを呼び出せないので(でもそのスレッドはもう一度エクスポートしようとしたときには存在しなくなっている)、二回以上エクスポートプラグインを呼び出すと問題が出るんだと思います。

やろうと思えばメインのスレッドでRubyCocoaを初期化して、ほかのスレッドからのイベント待ち状態にして、エクスポートプラグインからファイルをアップロードするときにメインのスレッドにリクエストを投げる実装にすればRUbyCocoaで問題なくいけるでしょうけど、そこまでやるならはじめからObjective-Cで書いたら?という気もするのでやりませんでした。

ゴールデンウィークあけて、前回iPhotoUploaderを参考にさせていただいたいとーけーさんのページを見たら

なんか、やってみたら意外にすんなりと出来てしまったので公開します。
いとーけーのページ – iPhotoUploader v0.0.2 公開しました(はてなフォトライフ対応)

と書かれてたので、たぶんObjective-Cに慣れている方ならSourceForge.JP: Project Info – iPhotoUploaderをベースにさくっとmixiにアップロードするバージョンも作れるんだと思います。

でも非同期サーバとか作るの楽しそうだし、難しそうなところができちゃえばほかのサービスも全部rubyで書けるようになるからやろうかなー。

コードは/platform/iphoto – CodeRepos::Share – Tracに入れときました。


About this entry