Pages

2009-03-08

OpenMetaのバックアップ

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みたいな感じ。

そしてファイル名も少し面倒。

  1. ファイル名を40文字以内に切り詰める。元のファイル名が40文字を超える場合は最初と最後の20文字を抜き出してくっつける。
  2. ファイルの親ディレクトリのパスのELF Hashを得る。

で、(切り詰めたファイル名)__(親ディレクトリのハッシュ).ombackが保存するファイル名。ここにさっきの辞書を保存してやればバックアップは完了。ちなみにこのバックアップパスはkBackupStampOMって名前で対象ファイルのxattrにセットされるからいつでも取り出せます。

3 件のコメント:

  1. お聞きしたいのですが、どのようなイベントがトリガーとなってバックアップが作られる/更新されるのでしょうか?例えば、別のMac上でタグを付けたファイルをFinderでコピーするだけでも、バックアップが作られるのでしょうか?

    よくわからないので教えて頂けるとありがたいです。

    返信削除
  2. Ironicが公開しているOpenMetaの実装では、ファイルやフォルダにメタデータを設定するときにバックアップが作成・更新され、逆にメタデータを取得するときにバックアップを読み込むようになっています。

    よって、この実装を用いたOpenMeta対応アプリ(Tagitなど)でタグやレートを設定・変更したときにそのバックアップが作られます。Finderのような非対応アプリではどんなアクションを起こしても(移動、コピー、リネームなど…)バックアップは作られません。

    返信削除
  3. お礼が遅くなりましたが、ご返事、ありがとうございました。やはり、ユーザーの行動を全て先読みした上で作られたバックアップシステムではない訳なんですね。

    返信削除