最終更新: 2015-02-09T01:58+0900
PCとリーダーのディレクトリ構成が決め打ちなので、きったねえなー、という感想を漏らすぐらいしか使い道がないでしょうが。
Sony Readerを繋いだら実行する。$1-$4のスクリプトを引数付きで順番に実行するためのもの。前提条件
カレントディレクトリをスキャンして $で始まるファイルと隠しファイルを除いたファイルのリストを $Collections.txtというファイルに保存する。カレントディレクトリはバッチファイルによって READER MS (E:)か READER SD (F:)になっている。以降のスクリプトのカレントディレクトリも同様。
内容はこんな感じ。
____1 [カイ サワベ] ヘンな感じの日本人.pdf __1__ [森博嗣] 四季.pdf __1__ [須賀しのぶ] 芙蓉千里.pdf -__1__ [沢村凜] 瞳の中の大河.pdf -__1__ [範乃秋晴] 特異領域の特異点.pdf -1____ $コレクション名 マンガ -_1___ $コレクション名 実用的なマンガ -__1__ $コレクション名 小説 -___1_ $コレクション名 実用的な小説 -____1 $コレクション名 実用書
行頭のマイナスは $Collections.txtに記載されていたファイルが現在は見えなくなってることを示す。アンダースコアはコレクションに属していないことを、1はコレクションに属していることを示す。$コレクション名(スペース)で始まるファイル名は特殊で、コレクション名を定義するための行。行頭にマイナスが付いてるのは「$コレクション名 マンガ」という名前のファイルが存在しないから。自分で付ける必要はないが $1スクリプトの実行で付加される。行の並びは自由。ただし見えないファイルと新しく出現したファイルは末尾に集められる。コレクションを追加するときは全ての行の頭にアンダースコアを追加する。コレクション名のデフォルトはコレクションN(※Nは連番)。
例えば、[森博嗣] 四季.pdfと [須賀しのぶ] 芙蓉千里.pdfは同じコレクションに属していて、そのコレクションの名前は小説。[沢村凜] 瞳の中の大河.pdfというファイルは以前存在していたが今は見えない。ファイルが削除されていて見えないのであれば $2のスクリプトがミラーリングを行ったときに Sony Readerからも削除される(はず)。隠しファイルになっていて見えないのであれば Readerから削除はされない(これは robocopyのミラーリングの仕様による)。
READERDRIVE:/Sony Reader/database/cache.xmlに ./$Collections.txtの内容を反映させ、READERDRIVE:/自炊.pdf/とカレントディレクトリをミラーリングする。
READERDRIVEはバッチファイルから与えられた引数。
cache.xmlの text要素の開きタグにマッチする正規表現において、閉じタグを省略するスラッシュにマッチする部分をオプションに変更( />\z → /?>\z )。珍しいけど bookmarkDate要素が子になることがある。
when %r{\A<text (?:\s*id="(\d+)"|\s*path="(?:[^"/]*/)*([^"/]+)"|\s*sourceid="(\d+)"|\s*\w+="[^"]*")*\s*/?>\z}i
when %r{\A<text (?:\s*id="(\d+)"|\s*path="(?:[^"/]*/)*([^"/]+)"|\s*sourceid="(\d+)"|\s*\w+="[^"]*")*\s*/?>\z}i
E:/Sony Reader/database/cacheExt.xmlと F:/Sony Reader/database/cacheExt.xmlを読んでメモリーカード内のすべてのファイルの最後に開いた日時を取得し、これをもとに最後に開いた3冊に最も新しい更新日時を設定する。すると Readerは最後に開いた3冊を最新の3冊としてホーム画面に表示する。
--resetオプションが与えられるとファイル本来の更新日時を復元する。オプションなしで実行されると復元と設定を行う。
対象ファイルの最終アクセス日時情報は失われる。最終アクセス日時がファイルシステムや他のプログラムによって変更されると更新日時の復元に失敗する。
READERDRIVE:/Sony Reader/database/cacheExt.xmlを操作する。1.すべての<history>要素を削除する。2.ファイルの更新日時を比較し Readerの方が古ければ opened="true"属性を削除する。比較対象は cacheExt.xmlに記載されているすべてのファイルと、カレントディレクトリ直下の同名のファイル。
追記@2014-03-10 ホーム画面上部の「続きから読む」欄の一冊は絶対に未読状態にならない。PCとの接続を絶つとすぐに opened属性が Readerによって再設定されるみたい。
こんな苦労が必要なのは、最後にコピーしたファイルのうち3冊だけがホーム画面という特等席に表示されても嬉しくないのと、本を読み続けると蓄積するページ履歴(history要素。ほとんどが連続するページの履歴)が Readerの動作を遅らせ不安定にするのと、合計48GBのメモリーカードに1000冊以上の PDFを入れてるとコレクションへの登録やファイルの削除の途中で必ず Readerがフリーズするのだが eBook Transfer for Readerはメモリーカードの読み込みに5時間を費やしそうな勢いで助けにならないからと、管理対象の数を減らすためにシリーズを一つの PDFに結合していて新刊が出るたびに末尾にくっつけているために既読フラグのクリアが定期的に必要だからだ。結局俺は PRS-650を自分のものにはしていないのだ。そう勘違いさせてくれるだけの選択の自由を Sonyは提供していないし、お仕着せで満足できるほどの完成度も Sonyは提供していない。