5 Classes, Windows{, SysUtils, ComCtrls, IniFiles, HTTPApp, Math,
6 GikoSystem, BoardGroup, Send};
9 TSaveFile = class(TObject)
12 FThreadItem: TThreadItem;
18 function GetHeadServerDate(List: TStrings): TDateTime;
20 // procedure SaveListFile; //
\83\8a\83X
\83g
\83t
\83@
\83C
\83\8b\95Û
\91¶
21 // procedure SaveItemFile; //
\83A
\83C
\83e
\83\80\83t
\83@
\83C
\83\8b\95Û
\91¶
22 // procedure SaveRangeItemFile; //
\83\8c\83\93\83W
\8eæ
\93¾
\83A
\83C
\83e
\83\80\83t
\83@
\83C
\83\8b\95Û
\91¶
23 // procedure SaveSendFile; //
\91\97\90M
\8dÏ
\82Ý
\83t
\83@
\83C
\83\8b\95Û
\91¶
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;
37 {procedure TSaveFile.SaveListFile;
54 NewList := TList.Create;
56 //
\8f\84\89ñ
\93ú
\8e\9e\90Ý
\92è
57 Board.RoundDate := Now;
58 //
\83T
\81[
\83o
\8fã
\83t
\83@
\83C
\83\8b\82Ì
\8dX
\90V
\8e\9e\8d\8f\90Ý
\92è
59 Board.LastModified := GetHeadServerDate(Header);
61 //
\83\8a\83X
\83g
\95Û
\91¶
\8c\8f\90\94\8eæ
\93¾
62 SaveCount := Board.ListCount;
63 if SaveCount = -1 then
66 //
\8cÃ
\82¢
\83\8a\83X
\83g
\82©
\82ç
\83\8d\83O
\96³
\82µ
\83A
\83C
\83e
\83\80\82ð
\8dí
\8f\9c
67 for i := Board.Count - 1 downto 0 do
68 if not Board.Items[i].IsLogFile then
71 //
\90V
\82µ
\82¢
\83\8a\83X
\83g
\82ð
\8dì
\90¬
\82·
\82é
\81B
72 //
\90V
\82µ
\82¢
\83\8a\83X
\83g
\82É
\8cÃ
\82¢
\83\8a\83X
\83g
\82Ì
\83\8d\83O
\82ª
\82 \82é
\82È
\82ç
\82»
\82ê
\82ð
\90V
\82µ
\82¢
\83\8a\83X
\83g
\82É
\92Ç
\89Á
\81B
73 //
\8cÃ
\82¢
\83\8d\83O
\82ª
\82È
\82¯
\82ê
\82Î
\81A
\90V
\82½
\82É
\83X
\83\8c\83I
\83u
\83W
\83F
\83N
\83g
\82ð
\8dì
\90¬
\81B
74 Loop := Min(Body.Count, SaveCount);
76 for i := 0 to Loop - 1 do begin
78 GikoSys.DivideSubject(Body[i], FileName, Title, Count);
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;
90 Board.Items[index].Count := Count;
91 Board.Items[index].No := NoCount;
92 NewList.Add(Board.Items[index]);
93 Board.DeleteList(index);
97 //
\90V
\82µ
\82¢
\83\8a\83X
\83g
\82É
\96³
\82©
\82Á
\82½
\8cÃ
\82¢
\83\8d\83O
\97L
\82è
\83A
\83C
\83e
\83\80\82ð
\90V
\82µ
\82¢
\83\8a\83X
\83g
\82É
\92Ç
\89Á
98 for i := 0 to Board.Count - 1 do begin
100 Board.Items[i].No := NoCount;
101 NewList.Add(Board.Items[i]);
104 //
\8cÃ
\82¢
\83\8a\83X
\83g
\82ð
\8fÁ
\82·
\81i
\83\8a\83X
\83g
\82Ì
\82Ý
\81B
\83X
\83\8c\83I
\83u
\83W
\83F
\83N
\83g
\8e©
\91Ì
\82Í
\8fÁ
\82³
\82È
\82¢
\81j
105 for i := Board.Count - 1 downto 0 do
108 //
\90V
\82µ
\82¢
\83\8a\83X
\83g
\82ð
\83{
\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
\82É
\92Ç
\89Á
109 for i := 0 to NewList.Count - 1 do
110 Board.Add(TThreadItem(NewList[i]));
112 //
\83\8a\83X
\83g(subject.txt)
\82ð
\95Û
\91¶
113 GikoSys.ForceDirectoriesEx(GikoSys.GetLogDir + Board.BBSID);
114 Body.SaveToFile(GikoSys.GetSubjectFileName(Board.BBSID));
116 GikoSys.ExitWrite.Add(Board.BBSID);
123 {procedure TSaveFile.SaveItemFile;
129 Body.SaveToFile(GikoSys.GetThreadFileName(ThreadItem.ParentBoard.BBSID, ThreadItem.FileName));
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;
139 if ThreadItem.RoundNo = 6 then
140 ThreadItem.RoundNo := 0;
142 GikoSys.ExitWrite.Add(ThreadItem.ParentBoard.BBSID);
145 {procedure TSaveFile.SaveRangeItemFile;
153 if FileExists(GikoSys.GetThreadFileName(ThreadItem.ParentBoard.BBSID, ThreadItem.FileName)) then begin
154 wkBody := TStringList.Create;
156 wkBody.LoadFromFile(GikoSys.GetThreadFileName(ThreadItem.ParentBoard.BBSID, ThreadItem.FileName));
157 wkBody.AddStrings(Body);
158 wkBody.SaveToFile(GikoSys.GetThreadFileName(ThreadItem.ParentBoard.BBSID, ThreadItem.FileName));
163 Body.SaveToFile(GikoSys.GetThreadFileName(ThreadItem.ParentBoard.BBSID, ThreadItem.FileName));
166 OldCnt := ThreadItem.Count;
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;
178 GikoSys.ExitWrite.Add(ThreadItem.ParentBoard.BBSID);
181 {function TSaveFile.GetHeadServerDate(List: TStrings): TDateTime;
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]);
193 // Result := GikoSys.RFC1123ToDate(DateStr);
194 Result := ParseDate(DateStr);
197 {procedure TSaveFile.SaveSendFile;
202 ini := TMemIniFile.Create(GikoSys.GetSentFileName);
204 sDate := SendItem.StrSendDate;
205 if Trim(sDate) = '' then
206 sDate := GikoSys.Get2chDate(Now);
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, ''));