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つのプラグインを用意していたけど,今回は用意しないつもり.

2006/06/18(日)ファイルのアップロード

ファイルのアップロードプラグインを更新.アップロード先のフォルダの指定が出来るようになりました.あと,最近アップロードしたファイルへの登録もするようにしました.

更新ファイル\[http://bigslope.dyndns.org/album3.1/common.h:common.h]\[http://bigslope.dyndns.org/album3.1/common.cpp:common.cpp]\[http://bigslope.dyndns.org/album3.1/inifile.h:inifile.h]\[http://bigslope.dyndns.org/album3.1/plugin/upload.cpp:upload.cpp]

多分これだけだと思うけど,不安なので,album3.1.tar.gz\こっちには,全部入ってる...はず

ファイルのアップロード upload.cpp

アップロード先のフォルダの優先順位は,以下のとおりです.

  1. 環境変数指定されたフォルダ env["folder"]
  2. フォームで指定されたフォルダ form["folder"]
  3. 現在のパスから決まるフォルダ env["gallery"]

ユーザ名は自動で付加されるので,ユーザ毎のホームディレクトリからの相対パスを指定してください.

2006/06/18(日)文字列クラス

sstring.h{message}に+=するのがいい加減に面倒になったので,<<を追加.inlineで追加してあるので,ヘッダファイルだけ置き換えればOkです...多分...

これで,

CSString str, str2 = "def";
str  = "abc";
str += str2;
str += "ghi";

みたいなソースが,

CSString str, str2 = "def";
str << "abc" << str2 << "ghi";

のように書くことができます.

念のため.\[http://bigslope.dyndns.org/album3.1/sstring.cpp:sstring.cpp]