2006/07/01(土)uploadプラグイン

外部から制御できるように仕様変更中.

環境変数とコンフィグ

uploadプラグインは,以下の環境変数とコンフィグを見て動作を決定します.

  • env["parent"]{upload.so}を呼び出したプラグイン.\formの処理の結果をenv["parent"]で指定されたプラグインへ返すようにします.
  • ini["upload"]["ex"]\アーカイブを展開するか指定するフラグ.\このフラグが 真*1 の場合アーカイブ展開用のチェックボックスを表示します.真*1以外 である場合,チェックボックスは表示されず,アーカイブ展開プラグインは呼び出されません.

*1 : 1, on, trueのいずれか

呼び出し

uploadプラグインは,以下の2つの機能を提供しています.

  1. int Run(void)\フォームと環境変数を基に,ファイルのアップロード処理をします.
  2. int Extension(void)\アップロードのためのフォームを表示します

2006/06/29(木)CreateFile

仕様変更。親フォルダに指定するのは、各ユーザのホームディレクトリからの相対パス。

以下の場合、エラーとなります。

  • パスの中に、親ディレクトリを示す..が含まれていた場合 \実際にはきちんとしたユーザのディレクトリの中であろうと、..が含まれていた時点でエラーです
  • ファイル名の中に/が含まれていた場合 \ファイル名に/が含まれてはいけません。\({\}もテストすべき?)
  • 連番でファイル名をテストする時、4桁以内の数値で収まらなかった時\ファイル名がfile.jpgであった場合、file_9999.jpgまではテストしますが、file_10000.jpgをテストする前にエラーを返します。

また、返り値 realname には実際に生成されたホームディレクトリからのパスを含むファイル名が入ります。

user: serika
gallery: temp
image: test.jpg

CreateFolder("temp", "test.jpg", realname)
realname -> "temp/test.jpg"

2006/06/25(日)make

Makefileを一通り書き直して,多段makeとall,clean,install,uninstallに対応させました.これで,新たなプラグインを持ってきたとき,albumx.x/src/pluginにフォルダを作って展開して,makeで済みます.

もちろん,それぞれのプラグインが対応している必要がありますが,基本的に,デフォルトのプラグイン用Makefileの中のAPP変数を置き換えるだけで済むので,新たにMakefileを作成するよりはかなり楽なはずです.

2006/06/25(日)make uninstall

installが出来たので,uninstallを書いていたのだが,pathの指定を忘れて,プラグイン毎に翻訳したファイルがすべて消えてしまった.まあ,大体のファイルは大学サーバに残っているのでいいのだが,ちょっとショックだ.makeのオプションである -n*1 の重要性を改めて知った.

*1 : 実行するコマンドの表示だけを行い、実際の実行を行わない。

2006/06/25(日)プラグイン::ロード順

プラグインは,ファイル名を辞書式にソートした順でロードされます.

そのため,アーカイブの展開プラグインや,画像のサムネイルを作成するプラグインではファイル名の指定が重要になります.

例えば,汎用サムネイル作成プラグインは,すべての形式に対して有効であるため,先にロードされるファイル名であると,その後ロードされたサムネイル作成プラグインが無効となってしまいます.

2006/06/24(土)プラグイン::サムネイル作成

サムネイル作成プラグインは,プラグイン汎用関数の他,IsAccept関数MakeThumbnail関数ImageSize関数を実装しなければならない.

  • int IsAccept(const char *path, const void *header)
    pathで指定されたファイルを処理できるか返す関数.
    処理できる場合は,0以外の値 を返し,処理できない場合は,0 を返すこと.
    headerには,pathで指定されるファイルの先頭 128byte が入っている.
    ただし,128byteに満たないファイルの場合,余剰部分に入っているデータは未定義である.
  • size MakeThumbnail(const char *in, const char *out, int width, int height, int reserved)
    inで指定されたファイルのサムネイルを作成し,outで指定されるファイルに保存する関数.
    サムネイルのサイズは,幅width pixel,高さheight pixel以内で作成すること.
    返値は,作成したサムネイルのサイズをsize型のオブジェクトで返すこと.
    サムネイルの作成に失敗した場合,size.x = size.y = 1sizeオブジェクトを返すこと.
  • size ImageSize(const char *img, const void *header)
    imgで指定されたファイルの画像のサイズを返す関数.
    headerには,pathで指定されるファイルの先頭 128byte が入っている.
    ただし,128byteに満たないファイルの場合,余剰部分に入っているデータは未定義である.
    返値は,サムネイルのサイズをsize型のオブジェクトで返すこと.
    画像サイズが不明である場合,size.x = size.y = 1sizeオブジェクトを返すこと.

sizeクラスの定義は以下の通りである.

class size
{
public:
	int x;
	int y;
	size(int nx = -1, int ny = -1)
		{ x = nx; y = ny; };
	~size(){};
};

後々,size MakeThumbnailFD(const char *in, int out, int width, int height, int reserved)
関数との選択式にする予定.
こちらの関数は,outで指定されるファイルディスクリプタにサムネイルを出力する.

2006/06/24(土)アーカイブ

展開できるようになりました.

現在用意してあるアーカイブ展開プラグインは,zziplibを利用したzipアーカイブの展開プラグインのみ.以前は,unziplhatarコマンドを利用した3つのプラグインを用意していたけど,今回は用意しないつもり.