| 1 |
unit SaveFile; |
| 2 |
|
| 3 |
interface |
| 4 |
uses |
| 5 |
Classes, Windows{, SysUtils, ComCtrls, IniFiles, HTTPApp, Math, |
| 6 |
GikoSystem, BoardGroup, Send}; |
| 7 |
|
| 8 |
{type |
| 9 |
TSaveFile = class(TObject) |
| 10 |
private |
| 11 |
FBoard: TBoard; |
| 12 |
FThreadItem: TThreadItem; |
| 13 |
FSendItem: TSendItem; |
| 14 |
FHeader: TStringList; |
| 15 |
FBody: TStringList; |
| 16 |
FTree: TTreeView; |
| 17 |
FSize: Integer; |
| 18 |
function GetHeadServerDate(List: TStrings): TDateTime; |
| 19 |
public |
| 20 |
// procedure SaveListFile; //???鴻?????<?ゃ???絖? |
| 21 |
// procedure SaveItemFile; //?≪?ゃ???????<?ゃ???絖? |
| 22 |
// procedure SaveRangeItemFile; //???潟?後???≪?ゃ???????<?ゃ???絖? |
| 23 |
// procedure SaveSendFile; //??篆≧??帥???<?ゃ???絖? |
| 24 |
published |
| 25 |
property Board: TBoard read FBoard write FBoard; |
| 26 |
property ThreadItem: TThreadItem read FThreadItem write FThreadItem; |
| 27 |
// property SendItem: TSendItem read FSendItem write FSendItem; |
| 28 |
property Header: TStringList read FHeader write FHeader; |
| 29 |
property Body: TStringList read FBody write FBody; |
| 30 |
property Tree: TTreeView read FTree write FTree; |
| 31 |
property Size: Integer read FSize write FSize; |
| 32 |
end; |
| 33 |
} |
| 34 |
implementation |
| 35 |
//uses |
| 36 |
// Giko; |
| 37 |
{procedure TSaveFile.SaveListFile; |
| 38 |
var |
| 39 |
i, j: Integer; |
| 40 |
index: Integer; |
| 41 |
wkItem: TThreadItem; |
| 42 |
OldItem: TThreadItem; |
| 43 |
NewItem: TThreadItem; |
| 44 |
FileName: string; |
| 45 |
Title: string; |
| 46 |
Count: Integer; |
| 47 |
ItemList: TList; |
| 48 |
NewList: TList; |
| 49 |
SaveCount: Integer; |
| 50 |
Node: TTreeNode; |
| 51 |
NoCount: Integer; |
| 52 |
Loop: Integer; |
| 53 |
begin |
| 54 |
NewList := TList.Create; |
| 55 |
try |
| 56 |
//綏≦???ユ??荐?? |
| 57 |
Board.RoundDate := Now; |
| 58 |
//?泣?若??筝????<?ゃ?????贋?井???肢┃絎? |
| 59 |
Board.LastModified := GetHeadServerDate(Header); |
| 60 |
|
| 61 |
//???鴻??篆?絖?篁倶?医?? |
| 62 |
SaveCount := Board.ListCount; |
| 63 |
if SaveCount = -1 then |
| 64 |
SaveCount := MaxInt; |
| 65 |
|
| 66 |
//?ゃ?????鴻?????????亥?<???≪?ゃ??????????/span> |
| 67 |
for i := Board.Count - 1 downto 0 do |
| 68 |
if not Board.Items[i].IsLogFile then |
| 69 |
Board.Delete(i); |
| 70 |
|
| 71 |
//?違???????鴻????篏????????? |
| 72 |
//?違???????鴻??????????鴻???????違?????????????????違???????鴻????申???? |
| 73 |
//?ゃ?????違?????????違???違?????鴻???????吾?с??????篏????? |
| 74 |
Loop := Min(Body.Count, SaveCount); |
| 75 |
NoCount := 0; |
| 76 |
for i := 0 to Loop - 1 do begin |
| 77 |
inc(NoCount); |
| 78 |
GikoSys.DivideSubject(Body[i], FileName, Title, Count); |
| 79 |
|
| 80 |
index := Board.GetIndex(FileName); |
| 81 |
if index = -1 then begin |
| 82 |
NewItem := TThreadItem.Create; |
| 83 |
NewItem.FileName := FileName; |
| 84 |
NewItem.Title := Title; |
| 85 |
NewItem.Count := Count; |
| 86 |
NewItem.ParentBoard := Board; |
| 87 |
NewItem.No := NoCount; |
| 88 |
NewList.Add(NewItem); |
| 89 |
end else begin |
| 90 |
Board.Items[index].Count := Count; |
| 91 |
Board.Items[index].No := NoCount; |
| 92 |
NewList.Add(Board.Items[index]); |
| 93 |
Board.DeleteList(index); |
| 94 |
end; |
| 95 |
end; |
| 96 |
|
| 97 |
//?違???????鴻?????<???c???ゃ?????井?????≪?ゃ???????違???????鴻????申?? |
| 98 |
for i := 0 to Board.Count - 1 do begin |
| 99 |
inc(NoCount); |
| 100 |
Board.Items[i].No := NoCount; |
| 101 |
NewList.Add(Board.Items[i]); |
| 102 |
end; |
| 103 |
|
| 104 |
//?ゃ?????鴻????羔???鐚????鴻?????帥???鴻???????吾?с????????????????鐚? |
| 105 |
for i := Board.Count - 1 downto 0 do |
| 106 |
Board.DeleteList(i); |
| 107 |
|
| 108 |
//?違???????鴻???????若???????吾?с??????申?? |
| 109 |
for i := 0 to NewList.Count - 1 do |
| 110 |
Board.Add(TThreadItem(NewList[i])); |
| 111 |
|
| 112 |
//???鴻??(subject.txt)??篆?絖? |
| 113 |
GikoSys.ForceDirectoriesEx(GikoSys.GetLogDir + Board.BBSID); |
| 114 |
Body.SaveToFile(GikoSys.GetSubjectFileName(Board.BBSID)); |
| 115 |
|
| 116 |
GikoSys.ExitWrite.Add(Board.BBSID); |
| 117 |
finally |
| 118 |
NewList.Free; |
| 119 |
end; |
| 120 |
|
| 121 |
end;} |
| 122 |
|
| 123 |
{procedure TSaveFile.SaveItemFile; |
| 124 |
var |
| 125 |
// Node: TTreeNode; |
| 126 |
// fNode: TTreeNode; |
| 127 |
Cnt: Integer; |
| 128 |
begin |
| 129 |
Body.SaveToFile(GikoSys.GetThreadFileName(ThreadItem.ParentBoard.BBSID, ThreadItem.FileName)); |
| 130 |
|
| 131 |
ThreadItem.RoundDate := Now; |
| 132 |
ThreadItem.Size := Size; |
| 133 |
ThreadItem.LastModified := GetHeadServerDate(Header); |
| 134 |
ThreadItem.Count := Body.Count; |
| 135 |
ThreadItem.IsLogFile := True; |
| 136 |
ThreadItem.NewReceive := 0; |
| 137 |
// ThreadItem.NonRead := True; |
| 138 |
|
| 139 |
if ThreadItem.RoundNo = 6 then |
| 140 |
ThreadItem.RoundNo := 0; |
| 141 |
|
| 142 |
GikoSys.ExitWrite.Add(ThreadItem.ParentBoard.BBSID); |
| 143 |
end;} |
| 144 |
|
| 145 |
{procedure TSaveFile.SaveRangeItemFile; |
| 146 |
var |
| 147 |
wkBody: TStringList; |
| 148 |
Node: TTreeNode; |
| 149 |
fNode: TTreeNode; |
| 150 |
Cnt: Integer; |
| 151 |
OldCnt: Integer; |
| 152 |
begin |
| 153 |
if FileExists(GikoSys.GetThreadFileName(ThreadItem.ParentBoard.BBSID, ThreadItem.FileName)) then begin |
| 154 |
wkBody := TStringList.Create; |
| 155 |
try |
| 156 |
wkBody.LoadFromFile(GikoSys.GetThreadFileName(ThreadItem.ParentBoard.BBSID, ThreadItem.FileName)); |
| 157 |
wkBody.AddStrings(Body); |
| 158 |
wkBody.SaveToFile(GikoSys.GetThreadFileName(ThreadItem.ParentBoard.BBSID, ThreadItem.FileName)); |
| 159 |
finally |
| 160 |
wkBody.Free; |
| 161 |
end; |
| 162 |
end else begin |
| 163 |
Body.SaveToFile(GikoSys.GetThreadFileName(ThreadItem.ParentBoard.BBSID, ThreadItem.FileName)); |
| 164 |
end; |
| 165 |
|
| 166 |
OldCnt := ThreadItem.Count; |
| 167 |
|
| 168 |
ThreadItem.RoundDate := Now; |
| 169 |
ThreadItem.Size := ThreadItem.Size + Size; |
| 170 |
ThreadItem.LastModified := GetHeadServerDate(Header); |
| 171 |
ThreadItem.Count := ThreadItem.Count + Body.Count; |
| 172 |
ThreadItem.IsLogFile := True; |
| 173 |
ThreadItem.NewReceive := OldCnt + 1; |
| 174 |
// ThreadItem.NonRead := True; |
| 175 |
if ThreadItem.RoundNo = 6 then |
| 176 |
ThreadItem.RoundNo := 0; |
| 177 |
|
| 178 |
GikoSys.ExitWrite.Add(ThreadItem.ParentBoard.BBSID); |
| 179 |
end;} |
| 180 |
|
| 181 |
{function TSaveFile.GetHeadServerDate(List: TStrings): TDateTime; |
| 182 |
var |
| 183 |
i: Integer; |
| 184 |
DateStr: string; |
| 185 |
begin |
| 186 |
DateStr := ''; |
| 187 |
for i := 0 to List.Count - 1 do begin |
| 188 |
if Pos('Date: ', List.Strings[i]) <> 0 then begin |
| 189 |
DateStr := StringReplace(List.Strings[i], 'Date: ', '', [rfReplaceAll]); |
| 190 |
Break; |
| 191 |
end; |
| 192 |
end; |
| 193 |
// Result := GikoSys.RFC1123ToDate(DateStr); |
| 194 |
Result := ParseDate(DateStr); |
| 195 |
end;} |
| 196 |
|
| 197 |
{procedure TSaveFile.SaveSendFile; |
| 198 |
var |
| 199 |
sDate: string; |
| 200 |
ini: TMemIniFile; |
| 201 |
begin |
| 202 |
ini := TMemIniFile.Create(GikoSys.GetSentFileName); |
| 203 |
try |
| 204 |
sDate := SendItem.StrSendDate; |
| 205 |
if Trim(sDate) = '' then |
| 206 |
sDate := GikoSys.Get2chDate(Now); |
| 207 |
|
| 208 |
ini.WriteString(sDate, 'Title', SendItem.Title); |
| 209 |
ini.WriteString(sDate, 'Name', SendItem.Name); |
| 210 |
ini.WriteString(sDate, 'EMail', SendItem.EMail); |
| 211 |
ini.WriteString(sDate, 'Body', HttpEncode(SendItem.Body)); |
| 212 |
ini.WriteInteger(sDate, 'Status', SendItem.StatusCode); |
| 213 |
ini.WriteDateTime(sDate, 'Date', SendItem.SendDate); |
| 214 |
ini.WriteString(sDate, 'BBS', SendItem.ThreadItem.ParentBoard.BBSID); |
| 215 |
ini.WriteString(sDate, 'Key', ChangeFileExt(SendItem.ThreadItem.FileName, '')); |
| 216 |
|
| 217 |
ini.UpdateFile; |
| 218 |
finally |
| 219 |
ini.Free; |
| 220 |
end; |
| 221 |
end; |
| 222 |
} |
| 223 |
end. |