OSDN Git Service

旧巡回ファイルフォーマットの読み込み処理&新ファイルフォーマット読み込み不良対策
[gikonavigoeson/gikonavi.git] / Round.pas
1 unit Round;
2
3 interface
4
5 uses
6         Windows, Classes, Controls, Forms, StdCtrls, ComCtrls, Menus,
7         SysUtils, ImgList, ExtCtrls, GikoSystem, GikoUtil;
8
9 type
10         TRoundDialog = class(TForm)
11     RoundPopupMenu: TPopupMenu;
12     C1: TMenuItem;
13     P1: TMenuItem;
14                 N1: TMenuItem;
15     D1: TMenuItem;
16                 ItemIcon16: TImageList;
17     Panel1: TPanel;
18     Label1: TLabel;
19     Label2: TLabel;
20     RoundNameComboBox: TComboBox;
21     Panel2: TPanel;
22     Panel3: TPanel;
23     AllSelectButton: TButton;
24     AllCancelButton: TButton;
25     RoundDeleteButton: TButton;
26     Panel4: TPanel;
27     Button1: TButton;
28     RoundButton: TButton;
29     StatusBar1: TStatusBar;
30     RoundListView: TListView;
31                 procedure RoundButtonClick(Sender: TObject);
32                 procedure FormCreate(Sender: TObject);
33                 procedure RoundListViewChange(Sender: TObject; Item: TListItem;
34                         Change: TItemChange);
35                 procedure AllSelectButtonClick(Sender: TObject);
36                 procedure AllCancelButtonClick(Sender: TObject);
37                 procedure RoundNameComboBoxChange(Sender: TObject);
38                 procedure RoundDeleteButtonClick(Sender: TObject);
39         private
40                 { Private \90é\8c¾ }
41                 function GetRoundCount: Integer;
42                 procedure SetRoundItem(RoundName: string);
43                 function CompareTime(Time1: TDateTime; Time2: TDateTime; MarginMin: Integer): Boolean;
44         public
45                 { Public \90é\8c¾ }
46         end;
47
48 //var
49 //      RoundDialog: TRoundDialog;
50
51 implementation
52
53 uses
54         Giko, BoardGroup, RoundData;
55
56 {$R *.DFM}
57
58 procedure TRoundDialog.RoundButtonClick(Sender: TObject);
59 var
60         i: Integer;
61         cnt: Integer;
62         msg: string;
63         Board: TBoard;
64         ThreadItem: TThreadItem;
65         RoundItem: TRoundItem;
66 begin
67 //      if CompareTime(GikoForm.LastRoundTime, Now, 5) then begin
68 //              msg := '\88ê\93x\8f\84\89ñ\82·\82é\82Æ\82T\95ª\8aÔ\8f\84\89ñ\82Í\8fo\97\88\82Ü\82¹\82ñ';
69 //              GikoSys.MsgBox(msg, '\83G\83\89\81[', MB_OK or MB_ICONSTOP);
70 //              Exit;
71 //      end;
72         if not Giko.GikoForm.LoginAction.Checked then begin
73                 msg := '\83\8d\83O\83C\83\93\82µ\82È\82¢\82Æ\8f\84\89ñ\82Í\8fo\97\88\82Ü\82¹\82ñ' + #13#10
74                                  + '\95ª\82©\82ç\82È\82¢\90l\82Í\83M\83R\83i\83r\83X\83\8c\83b\83h\82Å\95·\82¢\82Ä\82­\82¾\82³\82¢';
75                 MsgBox(Handle, msg, '\83G\83\89\81[', MB_OK or MB_ICONSTOP);
76                 Exit;
77         end;
78
79         cnt := GetRoundCount;
80         if cnt = 0 then begin
81                 msg := '\8f\84\89ñ\82µ\82½\82¢\8d\80\96Ú\82É\82P\82Â\88È\8fã\83`\83F\83b\83N\82ð\93ü\82ê\82Ä\82­\82¾\82³\82¢';
82                 MsgBox(Handle, msg, '\83G\83\89\81[', MB_OK or MB_ICONSTOP);
83                 Exit;
84         end;
85
86         for i := 0 to RoundList.Count[grtBoard] - 1 do begin
87                 RoundItem := RoundList.Items[i, grtBoard];
88                 if not RoundItem.BoolData then Continue;
89                 if not Giko.GikoForm.LoginAction.Checked then Exit;
90                 if RoundItem.RoundType = grtBoard then begin
91                         //Board := TBoard( RoundItem.Item );
92             Board := BBSsFindBoardFromURL(RoundItem.URL);
93                         if Board <> nil then begin
94                                 if not Board.IsThreadDatRead then
95                                         GikoSys.ReadSubjectFile(Board);
96                                 GikoForm.DownloadList(Board);
97                         end;
98                 end;
99         end;
100         for i := 0 to RoundList.Count[grtItem] - 1 do begin
101                 RoundItem := RoundList.Items[i, grtItem];
102                 if not RoundItem.BoolData then Continue;
103                 if not Giko.GikoForm.LoginAction.Checked then Exit;
104     if RoundItem.RoundType = grtItem then begin
105         //ThreadItem := TThreadItem( RoundItem.Item );
106         ThreadItem := BBSsFindThreadFromURL(RoundItem.URL);
107                         if ThreadItem <> nil then begin
108 //                              GikoForm.AddMessageList('debug2:' + IntToStr(i), nil);
109                                 GikoForm.DownloadContent(ThreadItem);
110                         end;
111                 end;
112         end;
113 //      GikoForm.LastRoundTime := Now;
114         Close;
115 end;
116
117 function TRoundDialog.GetRoundCount: Integer;
118 var
119         i: Integer;
120         RoundItem: TRoundItem;
121 begin
122         Result := 0;
123         for i := 0 to RoundList.Count[grtBoard] - 1 do begin
124                 RoundItem := RoundList.Items[i, grtBoard];
125                 if RoundItem.BoolData then
126                         Result := Result + 1;
127         end;
128         for i := 0 to RoundList.Count[grtItem] - 1 do begin
129                 RoundItem := RoundList.Items[i, grtItem];
130                 if RoundItem.BoolData then
131                         Result := Result + 1;
132         end;
133 end;
134
135 function TRoundDialog.CompareTime(Time1: TDateTime; Time2: TDateTime; MarginMin: Integer): Boolean;
136 const
137         AMin: Double = (1 / 24 / 60);
138 var
139         d: TDateTime;
140 begin
141         d := Time1 + (AMin * MarginMin);
142         Result := Time2 < d;
143 end;
144
145 procedure TRoundDialog.FormCreate(Sender: TObject);
146 var
147         i: Integer;
148 begin
149         RoundNameComboBox.Items.Add('\81i\82·\82×\82Ä\81j');
150         for i := 0 to RoundList.RoundNameList.Count - 1 do
151                 RoundNameComboBox.Items.Add(RoundList.RoundNameList[i]);
152         for i := 0 to RoundList.Count[grtBoard] - 1 do
153                 RoundList.Items[i, grtBoard].BoolData := False;
154         for i := 0 to RoundList.Count[grtItem] - 1 do
155                 RoundList.Items[i, grtItem].BoolData := False;
156         RoundNameComboBox.ItemIndex := 0;
157         SetRoundItem('');
158 end;
159
160 procedure TRoundDialog.RoundListViewChange(Sender: TObject;
161         Item: TListItem; Change: TItemChange);
162 var
163         RoundItem: TRoundItem;
164 begin
165         if TObject(Item.Data) is TRoundItem then begin
166                 RoundItem := TRoundItem(Item.Data);
167                 RoundItem.BoolData := Item.Checked;
168         end;
169 end;
170
171 procedure TRoundDialog.AllSelectButtonClick(Sender: TObject);
172 var
173         i: Integer;
174         RoundItem: TRoundItem;
175         ListChangeEvent: TLVChangeEvent;
176 begin
177         ListChangeEvent := RoundListView.OnChange;
178         RoundListView.OnChange := nil;
179         try
180                 for i := 0 to RoundListView.Items.Count - 1 do begin
181                         if TObject(RoundListView.Items[i].Data) is TRoundItem then begin
182                                 RoundItem := TRoundItem(RoundListView.Items[i].Data);
183                                 RoundItem.BoolData := True;
184                                 RoundListView.Items[i].Checked := True;
185                         end;
186                 end;
187         finally
188                 RoundListView.OnChange := ListChangeEvent;
189         end;
190 end;
191
192 procedure TRoundDialog.AllCancelButtonClick(Sender: TObject);
193 var
194         i: Integer;
195         RoundItem: TRoundItem;
196         ListChangeEvent: TLVChangeEvent;
197 begin
198         ListChangeEvent := RoundListView.OnChange;
199         RoundListView.OnChange := nil;
200         try
201                 for i := 0 to RoundListView.Items.Count - 1 do begin
202                         if TObject(RoundListView.Items[i].Data) is TRoundItem then begin
203                                 RoundItem := TRoundItem(RoundListView.Items[i].Data);
204                                 RoundItem.BoolData := False;
205                                 RoundListView.Items[i].Checked := False;
206                         end;
207                 end;
208         finally
209                 RoundListView.OnChange := ListChangeEvent;
210         end;
211 end;
212
213 procedure TRoundDialog.RoundNameComboBoxChange(Sender: TObject);
214 begin
215         if RoundNameComboBox.ItemIndex = 0 then
216                 SetRoundItem('')
217         else
218                 SetRoundItem(RoundNameComboBox.Items[RoundNameComboBox.itemIndex]);
219 end;
220
221 procedure TRoundDialog.SetRoundItem(RoundName: string);
222 var
223         ListItem: TListItem;
224         i: Integer;
225         ListChangeEvent: TLVChangeEvent;
226 begin
227         ListChangeEvent := RoundListView.OnChange;
228         RoundListView.OnChange := nil;
229         try
230                 RoundListView.Clear;
231                 for i := 0 to RoundList.Count[grtBoard] - 1 do begin
232                         if (RoundList.Items[i, grtBoard].RoundName = RoundName) or (RoundName = '') then begin
233                                 ListItem := RoundListView.Items.Add;
234                                 ListItem.Data := RoundList.Items[i, grtBoard];
235                                 ListItem.Caption := RoundList.Items[i, grtBoard].RoundName;
236                                 ListItem.SubItems.Add(RoundList.Items[i, grtBoard].BoardTitle);
237                                 ListItem.SubItems.Add('-');
238                                 ListItem.Checked := RoundList.Items[i, grtBoard].BoolData;
239                                 ListItem.ImageIndex := 0;
240                         end;
241                 end;
242                 for i := 0 to RoundList.Count[grtItem] - 1 do begin
243                         if (RoundList.Items[i, grtItem].RoundName = RoundName) or (RoundName = '') then begin
244                                 ListItem := RoundListView.Items.Add;
245                                 ListItem.Data := RoundList.Items[i, grtItem];
246                                 ListItem.Caption := RoundList.Items[i, grtItem].RoundName;
247                                 ListItem.SubItems.Add(RoundList.Items[i, grtItem].BoardTitle);
248                                 ListItem.SubItems.Add(RoundList.Items[i, grtItem].ThreadTitle);
249                                 ListItem.Checked := RoundList.Items[i, grtItem].BoolData;
250                                 ListItem.ImageIndex := 1;
251                         end;
252                 end;
253         finally
254                 RoundListView.OnChange := ListChangeEvent;
255         end;
256 end;
257
258 procedure TRoundDialog.RoundDeleteButtonClick(Sender: TObject);
259 var
260         Board: TBoard;
261         ThreadItem: TThreadItem;
262         RoundItem: TRoundItem;
263         ListChangeEvent: TLVChangeEvent;
264 begin
265         ListChangeEvent := RoundListView.OnChange;
266         RoundListView.OnChange := nil;
267         try
268                 if RoundListView.Selected = nil then
269                         Exit;
270                 if TObject(RoundListView.Selected.Data) is TRoundItem then begin
271                         RoundItem := TRoundItem(RoundListView.Selected.Data);
272             RoundList.Delete(RoundItem.URL,RoundItem.RoundType);
273             {
274                         if RoundItem.RoundType = grtBoard then begin
275                                 //Board := TBoard( RoundItem.Item );
276                                 RoundList.Delete(RoundItem.URL,RoundItem.RoundType);
277                                 Board.Round := False;
278                                 Board.RoundName := '';
279                         end else begin
280                                 //ThreadItem := TThreadItem( RoundItem.Item );
281                                 RoundList.Delete(ThreadItem);
282                                 ThreadItem.Round := False;
283                                 ThreadItem.RoundName := '';
284                         end;
285             }
286                         GikoForm.ListView.Refresh;
287                 end;
288                 RoundListView.Selected.Delete;
289         finally
290                 RoundListView.OnChange := ListChangeEvent;
291         end;
292 end;
293
294 end.