見出し画像

ツバメビューア v1.2 開発メモ

zipやePubの漫画や小説を読むためのツバメビューアにいい感じの機能を入れたので紹介と開発記録のための記事です。サクサクふわっと書いていきます。


アーカイブファイルのフォルダ構造に対応

アーカイブ内部のフォルダ構造は単にファイルシステム上で表現できるフォルダ構造と同じです。ただアーカイブ内部のフォルダ構造についてデファクトスタンダートなフォーマットはありません。たぶん。

時にはルートフォルダにさらにルートフォルダを置いたり、あるいはルートフォルダに章ごとのフォルダを置いたり、その両方の合わせた形(ルートフォルダに自前ルートフォルダを置いた上で自前ルートフォルダに章ごとのフォルダを置く)もあります。あるいはルートフォルダ直下に全部画像が入ってるケースもあります。自由かよ。自由だよ。

一方で使う側、見る側としてはルートフォルダにさらにフォルダを一個掘ってあるケースはフォルダ構造を巡る操作が手間になります。

ツバメビューア v1.2では、この「ルートフォルダ on ルートフォルダ」な構造をスキップして表示するようにアーカイブ内フォルダリストアップの挙動を制御しています。ユーザーが意識しなくていいものはアプリが隠す。実際便利。

ファイルタイトルの不規則さを吸収する並び替えの実装

殆どの場合は桁数補完された 0001.jpg みたいな名付けになっていて、ファイルシステム上でもタイトル昇順を指定すれば意図通りの順番で表示されますが、たまに桁数補完が無いファイル名のままアーカイブ化されている場合があります。

ツバメビューア v1.2 では「タイトルの桁数補完」に対応して、ファイルタイトル内の数字を数値として認識して並び替えできるようになってます。

変更するには並べ替えの右側にある「・・・」となってるボタンを押して「タイトルの桁数補完」の切替スイッチを操作します。

内部的にはフォルダ内アイテムを全件取得した上で桁数補完のON/OFFでList.Sort() に渡す Comparer の実装を切り替えて対応しています。

ちなみに「全件取得」という実装が表示応答時間にとってはネックになっています。

最速の応答時間を狙うのであれば、アプリ側で一度表示したことのあるフォルダやアーカイブは内部構造をローカルファイルDB等にキャッシュして、一旦はキャッシュから表示。並行してファイルシステム上の実際のコンテンツを取得してキャッシュ表示との差分を表示更新する実装が考えられます。

一度取得したコンテンツは不変である可能性が高い(zip/rarにしろePubにしろ)のでキャッシュヒット率は高く見積もれるのかなと思います。(実際の数字は調べてない)

一方で、アプリ外で取得や削除したアイテムが一時的にページ表示後に現れる点でユーザーを混乱させる可能性があります。フォルダごとに更新頻度をチェックして更新頻度が低い or 無いことがわかりきってるフォルダやアーカイブに限定してファイルシステムへのアクセスをスキップするよう条件付けするとよさそうです。

表紙画像の変更に対応

電子書籍はほとんどの場合先頭ページ に書籍のカバーを縦長(本文ページと同じ大きさ)にトリミングして配置して、リーダーアプリにとって扱いやすい構造にしてあります。ただ時折 cover.jpg とかファイル名を変えていたり、機械的に先頭として認識しづらい名付けになっている場合もあります。

ツバメビューア v1.2 から表紙画像の変更に対応して、意図しない表紙画像を入れ替えられるようにしました。フォルダ、アーカイブどちらも変更できます。

変更するには、フォルダやアーカイブを画像一覧として開いた状態で表紙画像にしたい画像上でアイテムメニューを開いて「サムネイル画像に設定」を選択して設定できます。

大きい画像を持ったpdfの画像一覧表示が遅かった問題を解消

pdf内部の画像をそのまま画像一覧のアイテムとして表示してたのでそりゃもう遅かったです。

ツバメビューア v1.2 ではアーカイブファイル内の画像もアプリ内で縮小したサムネイル画像を生成するようにして一覧表示時の快適性を向上しました。

現状ではpdfに限らずサムネイル画像生成によるストレージ使用容量が大きく、アプリユーザー環境にやや負担が掛かっていると思います。圧縮率を高めてもう少しサイズを小さくできるように調整予定です。


開発メモは以上です。ここで紹介した以外の更新情報は以下のリンクから確認できます。


この記事が気に入ったらサポートをしてみませんか?