サムネイル:キャッシュに更新禁止フラグを追加

Issue #1378 new
Ito Mitsuhiro repo owner created an issue

サムネイルキャッシュ(Cache.db)のvalueカラム(サムネ画像blob)の自動更新処理に関する提案です。

現在のNeeViewでは下記いずれかの条件を満たす場合に対象レコードのvalueカラムが更新されますが、この動作に制限をかけることを目的とした提案になります。
<valueカラム更新処理条件>
a. 対象レコードのghashカラムが現在の設定値と相違している
b. 対象レコードのsizeカラムが現在のファイルシステム上のデータ(ファイルの場合はサイズ、フォルダの場合は更新日時)と相違している

提案:
・「valueカラム更新禁止フラグ」をメタデータとしてCache.dbに用意した上で、そのフラグがセットされているレコードに対するvalueカラム更新処理を抑制する。

<valueカラム更新禁止フラグ(任意のサムネ画像が設定されていることを示すフラグ)>
・セット操作: なし(任意のサムネイルを設定するスクリプト側で行う)
・クリア操作: なし
・参照処理: あり(セットされていたらvalueカラム更新処理を抑制する)

背景:
表示中のページを「ファイルに保存(ExportImage)」コマンドで出力した画像をimageMagickでサムネイル化(面積指定で拡縮)して、sqlite3経由でCache.dbに登録および更新するスクリプトを書いて利用しています。
※ExportImageコマンドのパラメータ Mode を View にして、見開き・トリミング・各種エフェクト、が効いたスナップショットを出力させています。
※ターゲット(登録先のブック)パスをコマンドパラメータで指定(ブック、親ブック、本棚、パスを都度入力)できるようにしています。
※ghashを含むメタデータ生成処理はNeeViewの Config/ThumbnailConfig.sc、Thumbnail/Thumbnail.cs を直接参考にしました。
ところが現状では前述の a,b いずれかが成立している場合、設定したサムネ画像が上書きされ失われてしまいます。
このため、NeeView側のvalueカラム更新処理を(対象レコードを絞って)抑制できる手段があったらいいなと思った次第です。

余談:
ちなみに、Cache.dbのghash(ビットフィールド)には未使用のbitがいくつかあるようです。
ghash本来の目的(サムネイル生成パラメータの変化を検出)とはズレてしまうので良くないかもしれませんが、例えばghashの bit29 にフラグを割り当てて利用することで、Cache.db のカラムを拡張することなく本件フラグを実装できるかもしれません。
副作用として、サムネイル生成パラメータの変化を検出する手続きにおいてghashの対象bitを除外する処理を書く必要が出てきてしまいますが。。。

余談2:
「設定 > 全般 > サムネイル > サムネイルキャッシュの保存期間」が 無制限 以外の場合に行われる「対象レコードの自動破棄処理」についても、本件フラグがセットされていたら対象外とする措置があっても良いかもしれません(任意のサムネ画像が対象レコードごと失われることを抑制)。

NeeViewを普通に利用する限り意味を成さない処理の実装の提案なのでちょっと気が引けるところもありますが
ご検討頂けるとありがたいです。
本件が直接採用されなくても、将来において任意サムネイル設定機能等の実装を検討される際の参考になればうれしく思います。

Comments (0)

  1. Log in to comment