OSDN Git Service

巡回規制緩和(リミットは30分に一回、100アイテム以下)
[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 Defined(FRCRND) }
68     Giko.GikoForm.LoginAction.Checked := true; // \93®\8dì\8e\8e\8c±\97p\93r
69 {$IFEND}
70
71         cnt := GetRoundCount;
72         if not Giko.GikoForm.LoginAction.Checked then begin
73                 if CompareTime(GikoForm.LastRoundTime, Now, 30) then begin
74                         msg := '\88ê\93x\8f\84\89ñ\82·\82é\82Æ\82P\82T\95ª\8aÔ\8f\84\89ñ\82Í\8fo\97\88\82Ü\82¹\82ñ';
75                         MsgBox(Handle, msg, '\83G\83\89\81[', MB_OK or MB_ICONSTOP);
76                         Exit;
77                 end;
78                 if cnt > 100 then begin
79                         msg := '\82P\82O\82O\8cÂ\88È\8fã\82Í\88ê\93x\82É\8f\84\89ñ\82Å\82«\82Ü\82¹\82ñ';
80                         MsgBox(Handle, msg, '\83G\83\89\81[', MB_OK or MB_ICONSTOP);
81                         Exit;
82                 end;
83         end;
84
85         for i := 0 to RoundList.Count[grtBoard] - 1 do begin
86                 RoundItem := RoundList.Items[i, grtBoard];
87                 if not RoundItem.BoolData then Continue;
88                 if not Giko.GikoForm.LoginAction.Checked then Exit;
89                 if RoundItem.RoundType = grtBoard then begin
90                         //Board := TBoard( RoundItem.Item );
91             Board := BBSsFindBoardFromURL(RoundItem.URL);
92                         if Board <> nil then begin
93                                 if not Board.IsThreadDatRead then
94                                         GikoSys.ReadSubjectFile(Board);
95                                 GikoForm.DownloadList(Board);
96                         end;
97                 end;
98         end;
99         for i := 0 to RoundList.Count[grtItem] - 1 do begin
100                 RoundItem := RoundList.Items[i, grtItem];
101                 if not RoundItem.BoolData then Continue;
102                 if not Giko.GikoForm.LoginAction.Checked then Exit;
103     if RoundItem.RoundType = grtItem then begin
104         //ThreadItem := TThreadItem( RoundItem.Item );
105         ThreadItem := BBSsFindThreadFromURL(RoundItem.URL);
106                         if ThreadItem <> nil then begin
107 //                              GikoForm.AddMessageList('debug2:' + IntToStr(i), nil);
108                                 GikoForm.DownloadContent(ThreadItem);
109                         end;
110                 end;
111         end;
112         GikoForm.LastRoundTime := Now;
113         Close;
114 end;
115
116 function TRoundDialog.GetRoundCount: Integer;
117 var
118         i: Integer;
119         RoundItem: TRoundItem;
120 begin
121         Result := 0;
122         for i := 0 to RoundList.Count[grtBoard] - 1 do begin
123                 RoundItem := RoundList.Items[i, grtBoard];
124                 if RoundItem.BoolData then
125                         Result := Result + 1;
126         end;
127         for i := 0 to RoundList.Count[grtItem] - 1 do begin
128                 RoundItem := RoundList.Items[i, grtItem];
129                 if RoundItem.BoolData then
130                         Result := Result + 1;
131         end;
132 end;
133
134 function TRoundDialog.CompareTime(Time1: TDateTime; Time2: TDateTime; MarginMin: Integer): Boolean;
135 const
136         AMin: Double = (1 / 24 / 60);
137 var
138         d: TDateTime;
139 begin
140         d := Time1 + (AMin * MarginMin);
141         Result := Time2 < d;
142 end;
143
144 procedure TRoundDialog.FormCreate(Sender: TObject);
145 var
146         i: Integer;
147 begin
148         RoundNameComboBox.Items.Add('\81i\82·\82×\82Ä\81j');
149         for i := 0 to RoundList.RoundNameList.Count - 1 do
150                 RoundNameComboBox.Items.Add(RoundList.RoundNameList[i]);
151         for i := 0 to RoundList.Count[grtBoard] - 1 do
152                 RoundList.Items[i, grtBoard].BoolData := False;
153         for i := 0 to RoundList.Count[grtItem] - 1 do
154                 RoundList.Items[i, grtItem].BoolData := False;
155         RoundNameComboBox.ItemIndex := 0;
156         SetRoundItem('');
157 end;
158
159 procedure TRoundDialog.RoundListViewChange(Sender: TObject;
160         Item: TListItem; Change: TItemChange);
161 var
162         RoundItem: TRoundItem;
163 begin
164         if TObject(Item.Data) is TRoundItem then begin
165                 RoundItem := TRoundItem(Item.Data);
166                 RoundItem.BoolData := Item.Checked;
167         end;
168 end;
169
170 procedure TRoundDialog.AllSelectButtonClick(Sender: TObject);
171 var
172         i: Integer;
173         RoundItem: TRoundItem;
174         ListChangeEvent: TLVChangeEvent;
175 begin
176         ListChangeEvent := RoundListView.OnChange;
177         RoundListView.OnChange := nil;
178         try
179                 for i := 0 to RoundListView.Items.Count - 1 do begin
180                         if TObject(RoundListView.Items[i].Data) is TRoundItem then begin
181                                 RoundItem := TRoundItem(RoundListView.Items[i].Data);
182                                 RoundItem.BoolData := True;
183                                 RoundListView.Items[i].Checked := True;
184                         end;
185                 end;
186         finally
187                 RoundListView.OnChange := ListChangeEvent;
188         end;
189 end;
190
191 procedure TRoundDialog.AllCancelButtonClick(Sender: TObject);
192 var
193         i: Integer;
194         RoundItem: TRoundItem;
195         ListChangeEvent: TLVChangeEvent;
196 begin
197         ListChangeEvent := RoundListView.OnChange;
198         RoundListView.OnChange := nil;
199         try
200                 for i := 0 to RoundListView.Items.Count - 1 do begin
201                         if TObject(RoundListView.Items[i].Data) is TRoundItem then begin
202                                 RoundItem := TRoundItem(RoundListView.Items[i].Data);
203                                 RoundItem.BoolData := False;
204                                 RoundListView.Items[i].Checked := False;
205                         end;
206                 end;
207         finally
208                 RoundListView.OnChange := ListChangeEvent;
209         end;
210 end;
211
212 procedure TRoundDialog.RoundNameComboBoxChange(Sender: TObject);
213 begin
214         if RoundNameComboBox.ItemIndex = 0 then
215                 SetRoundItem('')
216         else
217                 SetRoundItem(RoundNameComboBox.Items[RoundNameComboBox.itemIndex]);
218 end;
219
220 procedure TRoundDialog.SetRoundItem(RoundName: string);
221 var
222         ListItem: TListItem;
223         i: Integer;
224         ListChangeEvent: TLVChangeEvent;
225 begin
226         ListChangeEvent := RoundListView.OnChange;
227         RoundListView.OnChange := nil;
228         try
229                 RoundListView.Clear;
230                 for i := 0 to RoundList.Count[grtBoard] - 1 do begin
231                         if (RoundList.Items[i, grtBoard].RoundName = RoundName) or (RoundName = '') then begin
232                                 ListItem := RoundListView.Items.Add;
233                                 ListItem.Data := RoundList.Items[i, grtBoard];
234                                 ListItem.Caption := RoundList.Items[i, grtBoard].RoundName;
235                                 ListItem.SubItems.Add(RoundList.Items[i, grtBoard].BoardTitle);
236                                 ListItem.SubItems.Add('-');
237                                 ListItem.Checked := RoundList.Items[i, grtBoard].BoolData;
238                                 ListItem.ImageIndex := 0;
239                         end;
240                 end;
241                 for i := 0 to RoundList.Count[grtItem] - 1 do begin
242                         if (RoundList.Items[i, grtItem].RoundName = RoundName) or (RoundName = '') then begin
243                                 ListItem := RoundListView.Items.Add;
244                                 ListItem.Data := RoundList.Items[i, grtItem];
245                                 ListItem.Caption := RoundList.Items[i, grtItem].RoundName;
246                                 ListItem.SubItems.Add(RoundList.Items[i, grtItem].BoardTitle);
247                                 ListItem.SubItems.Add(RoundList.Items[i, grtItem].ThreadTitle);
248                                 ListItem.Checked := RoundList.Items[i, grtItem].BoolData;
249                                 ListItem.ImageIndex := 1;
250                         end;
251                 end;
252         finally
253                 RoundListView.OnChange := ListChangeEvent;
254         end;
255 end;
256
257 procedure TRoundDialog.RoundDeleteButtonClick(Sender: TObject);
258 var
259 //      Board: TBoard;
260 //      ThreadItem: TThreadItem;
261         RoundItem: TRoundItem;
262         ListChangeEvent: TLVChangeEvent;
263 begin
264         ListChangeEvent := RoundListView.OnChange;
265         RoundListView.OnChange := nil;
266         try
267                 if RoundListView.Selected = nil then
268                         Exit;
269                 if TObject(RoundListView.Selected.Data) is TRoundItem then begin
270                         RoundItem := TRoundItem(RoundListView.Selected.Data);
271             RoundList.Delete(RoundItem.URL,RoundItem.RoundType);
272             {
273                         if RoundItem.RoundType = grtBoard then begin
274                                 //Board := TBoard( RoundItem.Item );
275                                 RoundList.Delete(RoundItem.URL,RoundItem.RoundType);
276                                 Board.Round := False;
277                                 Board.RoundName := '';
278                         end else begin
279                                 //ThreadItem := TThreadItem( RoundItem.Item );
280                                 RoundList.Delete(ThreadItem);
281                                 ThreadItem.Round := False;
282                                 ThreadItem.RoundName := '';
283                         end;
284             }
285                         GikoForm.ListView.Refresh;
286                 end;
287                 RoundListView.Selected.Delete;
288         finally
289                 RoundListView.OnChange := ListChangeEvent;
290         end;
291 end;
292
293 end.