TagitなどのIronic製OpenMetaツールはOMメタデータのバックアップ機構を備えています。OMSavePanelとかもIronicのライブラリを使っているのでこれに対応してるんですが、ちょっと自分で実装する機会があったのでどんな仕様になっているか簡単に調べてみました。
まず、バックアップの実体はプロパティリスト。次の3つのキーをもつ辞書。
omDict
- ファイルに付けられたOMメタデータ(com.apple.metadata:kOMか単にkOMで始まるのも)の辞書
bu_path
- バックアップするファイルのパス文字列
bu_alias
- バックアップするファイルのaliasのデータ
で、これを保存するんだけど、バックアップは全部~/Library/Application Support/OpenMeta/backups
以下に保存されることになっている。だけどここに直接保存されるんじゃなくて、バックアップする時点の年と月をパスに追加する。例えば2009年3が月だったら/Library/Application Support/OpenMeta/backups/2009/3
みたいな感じ。
そしてファイル名も少し面倒。
- ファイル名を40文字以内に切り詰める。元のファイル名が40文字を超える場合は最初と最後の20文字を抜き出してくっつける。
- ファイルの親ディレクトリのパスのELF Hashを得る。
で、(切り詰めたファイル名)__(親ディレクトリのハッシュ).omback
が保存するファイル名。ここにさっきの辞書を保存してやればバックアップは完了。ちなみにこのバックアップパスはkBackupStampOMって名前で対象ファイルのxattrにセットされるからいつでも取り出せます。
お聞きしたいのですが、どのようなイベントがトリガーとなってバックアップが作られる/更新されるのでしょうか?例えば、別のMac上でタグを付けたファイルをFinderでコピーするだけでも、バックアップが作られるのでしょうか?
返信削除よくわからないので教えて頂けるとありがたいです。
Ironicが公開しているOpenMetaの実装では、ファイルやフォルダにメタデータを設定するときにバックアップが作成・更新され、逆にメタデータを取得するときにバックアップを読み込むようになっています。
返信削除よって、この実装を用いたOpenMeta対応アプリ(Tagitなど)でタグやレートを設定・変更したときにそのバックアップが作られます。Finderのような非対応アプリではどんなアクションを起こしても(移動、コピー、リネームなど…)バックアップは作られません。
お礼が遅くなりましたが、ご返事、ありがとうございました。やはり、ユーザーの行動を全て先読みした上で作られたバックアップシステムではない訳なんですね。
返信削除