OSDN Git Service

b49 にマージ。
[gikonavigoeson/gikonavi.git] / SaveFile.pas
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;                         //\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
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                 //\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);
60
61                 //\83\8a\83X\83g\95Û\91\8c\8f\90\94\8eæ\93¾
62                 SaveCount := Board.ListCount;
63                 if SaveCount = -1 then
64                         SaveCount := MaxInt;
65
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
69                                 Board.Delete(i);
70
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);
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                 //\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
99                         inc(NoCount);
100                         Board.Items[i].No := NoCount;
101                         NewList.Add(Board.Items[i]);
102                 end;
103
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
106                         Board.DeleteList(i);
107
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]));
111
112                 //\83\8a\83X\83g(subject.txt)\82ð\95Û\91
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.