adiaryのサムネイル作成機能はImageMagick依存なので、Imager対応になるようにいろいろ弄くってたらちょっと厄介なことになってきた。
現時点で把握している点
サムネイル作成時に強制的に.jpgが付加される
Uploader.pm および textparser_tags.txt にて、pngだろうがgifだろうがupしてサムネイルを作成した時点で強制的に .jpg が付加される。
従って、pngをupした場合でもサムネイルファイルは ***.png.jpg となる。まぁ問題ないと言えばないけれど、Content-type的にどうかなと。
解決法は Uploader.pm 257行目の
$file_name .= '.jpg';
をコメントアウト、および textparser_tags.txt 236行目
image#small = 画像アルバム, image, 3, ${public}image/$1/$2thumbnail/$3.jpg
の末尾、.jpgを削除。
拡張子がUp可能なものかはサムネイル作成部以前にチェックされている & Imagerの場合は標準で指定可能な画像形式(jpg,png,gif)に加えてbmp,tiffにも対応してるので、特に問題はないかなと。偽装ファイルを食べさせられたらエラー吐けばどうにかなるのではないかしら(てきとー。
uploader.conf.cgiの画像upフォルダと実際の出力HTMLの整合性がとれない
uploader.conf.cgiにて、
<$v.image_dir = "<@Diary.public_dir>image/">
を指定すると、Uploader.pm はこれを認識し、ここ以下にthumbnail/ディレクトリを作成し、サムネイルを保管します。
が、デフォルトでは $v.image_dir の設定値が textparser_tags.txt の image もしくは file と一致しているために問題は起きませんが、 $v.image_dir の設定を変更してやると、textparser_tags.txt ではこの設定値を読めないため、実際にファイルがアップロードされたディレクトリと出力HTMLのタグ内容との間で整合性がとれない模様。
考え得る解決法としては、adiary.conf.cgiに
<$v.image_upload_dir = "<@public_dir>image/">
を設定してやり、uploader.conf.cgiには
<$v.image_dir = "<@Diary.image_upload_dir>">
で承継するようにし、さらに /diary.skel/parser/default.html に
<$h.image_updir = v.image_upload_dir>
を追加した上で textparser_tags.txt にて
#------------------------------------------------------------------------------ # 画像プラグイン/ファイルアップローダ #------------------------------------------------------------------------------ plugin image # ただの画像 img = 画像, image img#2 = 画像, image, 2, $1$2 img#2#link = 画像, image, 2, $1$2 # 標準アップローダ image = 画像アルバム, image, 3, ${image_updir}$1/$2$3 image#small = 画像アルバム, image, 3, ${image_updir}$1/$2thumbnail/$3 # .jpg image#link = 画像アルバム, image, 3, ${image_updir}$1/$2$3 file = ファイル, ASCII, 4, ${image_updir}$2/$3$4 file:mp3 = mp3ファイル, ASCII, 4, <a class="mp3player" href="${image_updir}$1/$2$3">#4</a><br><module name="mp3player" file="${image_updir}$1/$2$3" sb="${bc}" lb="${bc}">
でいけるかなと。かなり無理矢理な修理なので正直合ってるかどうか自信ないっす。
v2βとか
せりかアルバムがマージされちゃったのが個人的にはあまり嬉しくないんだけども、この辺修正されてるかどうかわからなかったのでエントリにしてみた。
時間が取れれば v2 beta も見てみたいなと。
余談
adiary.conf.cgi にuploadフォルダのパスを仕込めると、疑似global変数のようにほとんどのモジュールから読み込めるので、Diary_auto.pmの sub diary_edit あたりからこの変数にアクセスし、日記中の自サイト内アップロードフォルダに存在するファイルのみの情報を抽出し、日記の変更前後で差分取ってやって無くなってるファイルだけを抜き出せば自動削除機能できるんじゃね?