エクラの日記追加関数 c-mode (2)
エクラの日記追加関数 c-mode (2)


[CODE]
articleLoad = function(){
Fx.n1 = echo("n1sel") - 0;
Fx.n2 = echo("n2sel") - 0;
if(Fx.n1 > Fx.n2){
var n3 = Fx.n1;
Fx.n1 = Fx.n2; Fx.n2 = n3;
}
Fx.CNT = Fx.n1;
Fx.dat = ""; Fx.del_cnt = 0;
articleLoadLoop();
};
articleLoadLoop = function(){
var f = fileLoad(Fx.CNT, 0);
if(f[0] == null){
Fx.del_cnt++;
echo("impDoc", "A" + Fx.CNT + " : delete\n\n" + Fx.dat);
} else {
var dat = (f[2] ? "+" : "-") + "A" + (Fx.CNT % 1000) + " : " + f[1].length + " " + f[0] + "\n";
if(Fx.del_cnt != 0) Fx.dat = "(" + Fx.del_cnt + ")\n" + Fx.dat;
echo("impDoc", dat + "\n" + Fx.dat);
Fx.dat = dat + Fx.dat;
Fx.del_cnt = 0;
}
if(Fx.CNT < Fx.n2){
++Fx.CNT;
breakSpot("articleLoadLoop");
} else {
echo("importInfo", "articleLoad complite!");
if(Fx.del_cnt != 0) Fx.dat = "(" + Fx.del_cnt + ")\n" + Fx.dat;
echo("impDoc", Fx.dat);
}
};

appendEntry = function(){
Fx.n1 = Fx.articleMax + 1;
Fx.CNT = 500 - (Fx.n1 % 500) - 1;
if(Fx.n1 > Fx.allArticleMax){
echo("impDoc", "最新の状態です。追加する日記はありません。");
return;
}

Fid("sel1").selectedIndex = 399 - Math.floor(Fx.n1 / 500);
impExec(10);
echo("impDoc", "アペンドモードスタート");

// echo("importInfo", f[0]);
Fx.dat = DataDat.replace(/^\t+/, "").replace(/\t/g, "\n");
Fx.del = 0;
apLoop();
};

apLoop = function(){
var f = fileLoad(Fx.n1, 0);
var a = f[0];
var del = a == null;
if(!del){
a = a == "" ? "【ノンタイトル】" : a .match(/^ +$/) ? "【半角空白】" : a.match(/^ +$/) ? "【全角空白】" : a;
}
if(Fx.n1 >= 19764 && Fx.n1 <= 20480 || Fx.n1 >= 52543 && Fx.n1 <= 54593) a = a.substring(0, 5);
if(Fx.n1 >= 102205 && Fx.n1 <= 102982 && s1.length > 30) a = a.substring(0, 30) + "...";
a = del ? " : delete." : " : " + f[1].length + " " + a;
if(del){
Fx.del++;
} else {
if(Fx.del != 0){
Fx.dat = "(" + Fx.del + ")\n" + Fx.dat;
Fx.del = 0;
}
Fx.dat = (f[2] ? "+" : "-") + "A" + (Fx.n1 % 1000) + a + "\n" + Fx.dat;
}

echo("importInfo", " page : " + a2p(Fx.n1) + " last : " + (Fx.allArticleMax - Fx.n1));
echo("impDoc", Fx.n1 + " " + a);

if(Fx.CNT > 0 && Fx.n1 < Fx.allArticleMax){
--Fx.CNT; ++Fx.n1;
setTimeout("apLoop()", 100);
} else {
if(Fx.del != 0) Fx.dat = "(" + Fx.del + ")\n" + Fx.dat;
echo("importInfo", "data upDate now...");
docUpdateSubmit(Fx.dat, "up2");
}
};
Lo.up2 = function(){
fileDone();
echo("importInfo", "update complete! : " + (new Date()).toLocaleString() + " ....done.");
Fx.articleMax = Fx.n1;
if(Fx.n1 < Fx.allArticleMax){
breakSpot("appendEntry");
} else {

echo("importInfo", "176638 : newDiaryArticleMax update .....");
// fileKeyReplace(176638, "newDiaryArticleMax", Fx.n1);
echo("importInfo", "177650 : newDiaryArticleMax update .....");
// fileKeyReplace(177650, "newDiaryArticleMax", Fx.n1);
echo("importInfo", "done.");
// fileActive("append", false);
}
};
allDataCheck = function(){
Fx.CNT = Math.floor(Fx.articleMax / 500);
Fx.dat = "";
allDataCheckLoop();
};
allDataCheckLoop = function(){
Fid("sel1").selectedIndex = 399 - Fx.CNT;
impExec(10);
docUpdateSubmit(DataDat, "checkMain");
};
Lo.checkMain = function(s){
Fx.dat = newTitle + "\n" + Fx.dat;
echo("impDoc", Fx.dat);
--Fx.CNT;
if(Fx.CNT >= 0) breakSpot("allDataCheckLoop");
};


[/CODE]

■グローバル変数

User ... 0-399の配列。値は空白区切の数値。
UserDat ... ページ内でのインポートデータ
DataDat ... メインリスト。



更新モード

■append
Fx.articleMax - Fx.allNewDiaryMaxまでの日記をリストに追加する。
その部分だけインポート処理を行う。
UserDatをその都度更新。タイトルはcreateTitleで更新する。
Fx.articleMaxを更新する。

■import
Fx.userの全ての日記に対して実行される。
呼び出しがappendの場合はその範囲のみ。また、範囲指定しないは更新墨の場合はスルーされる。
強制書き換えモードあり。

■補正モード
ページ単位でデータの更新を行う。
範囲のデータの読み込みを行い、インポート処理はUserDatの番号順に処理する。

■削除検索モード
削除されているかどうかを調べる

■削除済み再チェックモード
アクセス制限の為に削除済みになった記事を検索するモード

file ... 通常、#175171-#175570の400ページのデータファイルをいう。
fileNo ... 番号は 0-399で 0001-1920のラベルが設定されている。
article ... 日記のファイル。1-199999までの20万件分がセットされている。
offset ... データファイルは下三桁表記だからその差分。