Develop and Download Open Source Software

Browse CVS Repository

Annotation of /gikonavigoeson/gikonavi/RoundData.pas

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.14 - (hide annotations) (download) (as text)
Tue Jan 6 13:49:18 2004 UTC (20 years, 3 months ago) by h677
Branch: MAIN
Changes since 1.13: +36 -16 lines
File MIME type: text/x-pascal
巡回の削除の不具合の修正

1 hi_ 1.1 unit RoundData;
2    
3     interface
4    
5     uses
6     Windows, Messages, SysUtils, Classes,
7     GikoSystem, BoardGroup;
8    
9     type
10     TGikoRoundType = (grtBoard, grtItem);
11     TRoundItem = class;
12    
13     TRoundList = class(TObject)
14     private
15 h677 1.6 FOldFileRead: Boolean;
16 hi_ 1.1 FBoardList: TList;
17     FItemList: TList;
18     function GetCount(RoundType: TGikoRoundType): Integer;
19     function GetRoundItem(Index: Integer; RoundType: TGikoRoundType): TRoundItem;
20 h677 1.5 function ParseRoundBoardLine(Line: string): TRoundItem;
21 h677 1.8 function ParseRoundThreadLine(Line: string): TRoundItem;
22 h677 1.5 function ParseOldRoundBoardLine(Line: string): TRoundItem;
23 h677 1.8 function ParseOldRoundThreadLine(Line: string): TRoundItem;
24 hi_ 1.1 public
25     RoundNameList: TStringList;
26    
27     constructor Create;
28     destructor Destroy; override;
29     function Add(Board: TBoard): Integer; overload;
30     function Add(ThreadItem: TThreadItem): Integer; overload;
31     procedure Delete(Board: TBoard); overload;
32     procedure Delete(ThreadItem: TThreadItem); overload;
33 h677 1.6 procedure Delete(URL: string; RoundType: TGikoRoundType); overload;
34 hi_ 1.1 procedure Clear;
35     function Find(Board: TBoard): Integer; overload;
36     function Find(ThreadItem: TThreadItem): Integer; overload;
37 h677 1.6 function Find(URL: string; RoundType: TGikoRoundType): Integer; overload;
38 hi_ 1.1 property Count[RoundType: TGikoRoundType]: Integer read GetCount;
39 h677 1.6 property OldFileRead: Boolean read FOldFileRead;
40 hi_ 1.1 property Items[Index: integer; RoundType: TGikoRoundType]: TRoundItem read GetRoundItem;
41     procedure SetRoundName(Board: TBoard; RoundName: string); overload;
42     procedure SetRoundName(ThreadItem: TThreadItem; RoundName: string); overload;
43    
44 h677 1.5 procedure LoadRoundBoardFile;
45     procedure LoadRoundThreadFile;
46 hi_ 1.1 procedure SaveRoundFile;
47     end;
48    
49     TRoundItem = class(TObject)
50     private
51     // FBBSType: TGikoBBSType;
52     FRoundName: string;
53     FRoundType: TGikoRoundType;
54 h677 1.6 //Item : TObject;
55 yoffy 1.3 FURL : string;
56 hi_ 1.1 FBoardTitle: string;
57     FThreadTitle: string;
58     FFileName: string;
59     FBoolData: Boolean; //鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申
60     public
61 h677 1.6
62     constructor Create;
63     //property BBSType: TGikoBBSType read FBBSType write FBBSType;
64 hi_ 1.1 property RoundName: string read FRoundName write FRoundName;
65     property RoundType: TGikoRoundType read FRoundType write FRoundType;
66 h677 1.6 //property Item : TObject read FItem write FItem;
67 yoffy 1.3 property URL : string read FURL write FURL;
68 hi_ 1.1 property BoardTitle: string read FBoardTitle write FBoardTitle;
69     property ThreadTitle: string read FThreadTitle write FThreadTitle;
70     property FileName: string read FFileName write FFileName;
71     property BoolData: Boolean read FBoolData write FBoolData;
72     end;
73    
74     var
75     RoundList: TRoundList;
76    
77     implementation
78     const
79     ROUND_BOARD_FILENAME: string = 'RoundBoard.2ch'; //鐃緒申鐃緒申鐃緒申BoardGroup鐃緒申鐃緒申鐃緒申
80     ROUND_ITEM_FILENAME: string = 'RoundItem.2ch'; //鐃緒申鐃緒申
81 h677 1.5 ROUND_INDEX_VERSION: string = '2.00';
82 h677 1.7 ERROR_BOARD_FILENAME: string = 'ErrorBoard.2ch'; //Error鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
83     ERROR_ITEM_FILENAME: string = 'ErrorItem.2ch'; //Error鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
84 h677 1.6 constructor TRoundItem.Create;
85     begin
86     inherited Create;
87     end;
88 hi_ 1.1 constructor TRoundList.Create;
89     begin
90     inherited;
91     FBoardList := TList.Create;
92     FItemList := TList.Create;
93     RoundNameList := TStringList.Create;
94     RoundNameList.Sorted := True;
95     RoundNameList.Duplicates := dupIgnore;
96 h677 1.6 FOldFileRead := false;
97 hi_ 1.1 end;
98    
99     destructor TRoundList.Destroy;
100     begin
101     RoundNameList.Free;
102     Clear;
103     FBoardList.Free;
104     FItemList.Free;
105 h677 1.9 //inherited;
106 hi_ 1.1 end;
107    
108     function TRoundList.Add(Board: TBoard): Integer;
109     var
110     idx: Integer;
111     Item: TRoundItem;
112     begin
113 h677 1.2 Result := -1;
114 hi_ 1.1 idx := Find(Board);
115     if idx = -1 then begin
116     Item := TRoundItem.Create;
117     // Item.BBSType := gbt2ch; //鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
118     Item.RoundType := grtBoard;
119 h677 1.6 // Item.Item := Board;
120 h677 1.5 Item.URL := Board.URL;
121 hi_ 1.1 Item.BoardTitle := Board.Title;
122     Item.ThreadTitle := '';
123     Item.FileName := '';
124     Item.RoundName := Board.RoundName;
125 h677 1.2 Result := FBoardList.Add(Item);
126 hi_ 1.1 end;
127     end;
128    
129     function TRoundList.Add(ThreadItem: TThreadItem): Integer;
130     var
131     idx: Integer;
132     Item: TRoundItem;
133     begin
134 h677 1.2 Result := -1;
135 hi_ 1.1 idx := Find(ThreadItem);
136     if idx = -1 then begin
137     Item := TRoundItem.Create;
138     // Item.BBSType := gbt2ch; //鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
139     Item.RoundType := grtItem;
140 h677 1.6 // Item.Item := ThreadItem;
141 h677 1.4 Item.URL := Threaditem.URL;
142 hi_ 1.1 Item.BoardTitle := ThreadItem.ParentBoard.Title;
143     Item.ThreadTitle := ThreadItem.Title;
144     Item.FileName := ThreadItem.FileName;
145     Item.RoundName := ThreadItem.RoundName;
146 h677 1.2 Result := FItemList.Add(Item);
147 hi_ 1.1 end;
148     end;
149    
150     procedure TRoundList.Delete(Board: TBoard);
151     var
152     idx: Integer;
153 h677 1.12 // Item: TRoundItem;
154 hi_ 1.1 begin
155     idx := Find(Board);
156     if idx <> -1 then begin
157 h677 1.8 TRoundItem(FBoardList[idx]).Free;
158 hi_ 1.1 FBoardList.Delete(idx);
159     end;
160     end;
161    
162     procedure TRoundList.Delete(ThreadItem: TThreadItem);
163     var
164     idx: Integer;
165 h677 1.12 // Item: TRoundItem;
166 hi_ 1.1 begin
167     idx := Find(ThreadItem);
168     if idx <> -1 then begin
169 h677 1.8 TRoundItem(FItemList[idx]).Free;
170 hi_ 1.1 FItemList.Delete(idx);
171     end;
172     end;
173    
174     procedure TRoundList.Clear;
175     var
176     i: Integer;
177     begin
178 h677 1.14 for i := FBoardList.Count - 1 downto 0 do begin
179 h677 1.8 if FBoardList[i] <> nil then
180     TRoundItem(FBoardList[i]).Free;
181 hi_ 1.1 FBoardList.Delete(i);
182     end;
183 h677 1.14 for i := FItemList.Count - 1 downto 0 do begin
184 h677 1.8 if FItemList[i] <> nil then
185     TRoundItem(FItemList[i]).Free;
186 hi_ 1.1 FItemList.Delete(i);
187     end;
188     end;
189    
190     function TRoundList.Find(Board: TBoard): Integer;
191     var
192     i: Integer;
193     Item: TRoundItem;
194     begin
195     Result := -1;
196     for i := 0 to FBoardList.Count - 1 do begin
197     Item := TRoundItem(FBoardList[i]);
198     if Item.FRoundType <> grtBoard then Continue;
199 h677 1.5 if Item.FURL = Board.URL then begin
200 hi_ 1.1 Result := i;
201     Exit;
202     end;
203     end;
204     end;
205    
206     function TRoundList.Find(ThreadItem: TThreadItem): Integer;
207     var
208     i: Integer;
209     Item: TRoundItem;
210     begin
211     Result := -1;
212     for i := 0 to FItemList.Count - 1 do begin
213     Item := TRoundItem(FItemList[i]);
214     if Item.FRoundType <> grtItem then Continue;
215 h677 1.5 if Item.FURL = ThreadItem.URL then begin
216 hi_ 1.1 Result := i;
217     Exit;
218     end;
219     end;
220     end;
221 h677 1.6 function TRoundList.Find(URL: string; RoundType: TGikoRoundType): Integer;
222     var
223     i: Integer;
224     Item: TRoundItem;
225     begin
226     Result := -1;
227 h677 1.14 if RoundType = grtItem then begin
228     for i := 0 to FItemList.Count - 1 do begin
229     Item := TRoundItem(FItemList[i]);
230     if Item.FRoundType <> RoundType then Continue;
231     if Item.FURL = URL then begin
232     Result := i;
233     Exit;
234     end;
235     end;
236     end else begin
237     for i := 0 to FBoardList.Count - 1 do begin
238     Item := TRoundItem(FBoardList[i]);
239     if Item.FRoundType <> RoundType then Continue;
240     if Item.FURL = URL then begin
241     Result := i;
242     Exit;
243     end;
244 h677 1.6 end;
245 h677 1.14 end;
246 h677 1.6 end;
247     procedure TRoundList.Delete(URL: string; RoundType: TGikoRoundType);
248     var
249     idx: Integer;
250     Item: TRoundItem;
251     board: TBoard;
252     threadItem: TThreadItem;
253     begin
254     idx := Find(URL, RoundType);
255     if idx <> -1 then begin
256 h677 1.14
257 h677 1.6 if RoundType = grtBoard then begin
258 h677 1.14 Item := TRoundItem(FBoardList[idx]);
259     Item.Free;
260     FBoardList.Delete(idx);
261 h677 1.6 board := BBSsFindBoardFromURL(URL);
262 h677 1.14 if board <> nil then begin
263     board.Round := False;
264     board.RoundName := '';
265     end;
266 h677 1.6 end else begin
267 h677 1.14 Item := TRoundItem(FItemList[idx]);
268     Item.Free;
269     FItemList.Delete(idx);
270    
271 h677 1.6 threadItem := BBSsFindThreadFromURL(URL);
272 h677 1.14 if threadItem <> nil then begin
273     threadItem.Round := false;
274     threadItem.RoundName := '';
275     end;
276 h677 1.6 end;
277     end;
278     end;
279 hi_ 1.1
280     procedure TRoundList.SetRoundName(Board: TBoard; RoundName: string);
281     var
282     idx: Integer;
283     Item: TRoundItem;
284     begin
285     idx := Find(Board);
286     if idx <> -1 then begin
287     Item := TRoundItem(FBoardList[idx]);
288     Item.RoundName := RoundName;
289     end;
290     end;
291    
292     procedure TRoundList.SetRoundName(ThreadItem: TThreadItem; RoundName: string);
293     var
294     idx: Integer;
295     Item: TRoundItem;
296     begin
297     idx := Find(ThreadItem);
298     if idx <> -1 then begin
299     Item := TRoundItem(FItemList[idx]);
300     Item.RoundName := RoundName;
301     end;
302     end;
303    
304     function TRoundList.GetCount(RoundType: TGikoRoundType): Integer;
305     begin
306     Result := 0;
307     if RoundType = grtBoard then
308     Result := FBoardList.Count
309     else if RoundType = grtItem then
310     Result := FItemList.Count;
311     end;
312    
313     function TRoundList.GetRoundItem(Index: Integer; RoundType: TGikoRoundType): TRoundItem;
314     begin
315     Result := nil;
316     if RoundType = grtBoard then begin
317     if (Index >= 0) and (Index < FBoardList.Count) then
318     Result := TRoundItem(FBoardList[Index]);
319     end else if RoundType = grtItem then begin
320     if (Index >= 0) and (Index < FItemList.Count) then
321     Result := TRoundItem(FItemList[Index]);
322     end;
323     end;
324 h677 1.5 procedure TRoundList.LoadRoundBoardFile;
325 hi_ 1.1 var
326     i: Integer;
327     sl: TStringList;
328     FileName: string;
329 h677 1.7 errorSl: TStringList;
330     errorFileName: string;
331 hi_ 1.1 Item: TRoundItem;
332     begin
333     sl := TStringList.Create;
334 h677 1.7 errorSl := TStringList.Create;
335     errorSl.Duplicates := dupIgnore;
336 hi_ 1.1 try
337     //鐃?鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
338     FileName := GikoSys.GetConfigDir + ROUND_BOARD_FILENAME;
339 h677 1.7 //鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
340     errorFileName := GikoSys.GetConfigDir + ERROR_BOARD_FILENAME;
341 hi_ 1.1 if FileExists(FileName) then begin
342     sl.LoadFromFile(FileName);
343 h677 1.7 if FileExists(errorFileName) then begin
344     try
345     errorSl.LoadFromFile(errorFileName);
346     except
347     end;
348     end;
349     //Item := TRoundItem.Create;
350 h677 1.5 //鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申
351     if sl[0] = ROUND_INDEX_VERSION then begin
352 deux 1.13 for i := 1 to sl.Count - 1 do begin
353 h677 1.5 Item := ParseRoundBoardLine(sl[i]);
354 h677 1.7 if Item <> nil then begin
355     FBoardList.Add(Item);
356     RoundNameList.Add(Item.RoundName);
357     end else begin
358     errorSl.Add( sl[i] );
359     sl.Delete(i);
360     end;
361 h677 1.5 end;
362     end else begin
363 h677 1.6 if FOldFileRead then begin //鐃?鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
364 deux 1.13 for i := 1 to sl.Count - 1 do begin
365 h677 1.6 Item := ParseOldRoundBoardLine(sl[i]);
366 h677 1.7 if Item <> nil then begin
367     FBoardList.Add(Item);
368     RoundNameList.Add(Item.RoundName);
369     end else begin
370     errorSl.Add( sl[i] );
371     sl.Delete(i);
372     end;
373 h677 1.6 end;
374     end else
375     FOldFileRead := true;
376 h677 1.5 end;
377 hi_ 1.1 end;
378 h677 1.7 if errorSl.Count > 0 then
379     errorSl.SaveToFile(errorFileName);
380 h677 1.5 finally
381 h677 1.7 errorSl.Free;
382 h677 1.5 sl.Free;
383     end;
384     end;
385     procedure TRoundList.LoadRoundThreadFile;
386     var
387     i: Integer;
388 h677 1.12 // j: Integer;
389 h677 1.5 sl: TStringList;
390     FileName: string;
391 h677 1.7 errorSl: TStringList;
392     errorFileName: string;
393 h677 1.5 Item: TRoundItem;
394 h677 1.8 // boardList : TStringList;
395 h677 1.5 begin
396 h677 1.8 // boardList := TStringList.Create;
397     // boardList.Duplicates := dupIgnore;
398 h677 1.7 errorSl := TStringList.Create;
399     errorSl.Duplicates := dupIgnore;
400 h677 1.5 sl := TStringList.Create;
401     try
402 hi_ 1.1 //鐃?鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
403     FileName := GikoSys.GetConfigDir + ROUND_ITEM_FILENAME;
404 h677 1.7 //鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
405     errorFileName := GikoSys.GetConfigDir + ERROR_ITEM_FILENAME;
406 hi_ 1.1 if FileExists(FileName) then begin
407     sl.LoadFromFile(FileName);
408 h677 1.7 if FileExists(errorFileName) then begin
409     try
410     errorSl.LoadFromFile(errorFileName);
411     except
412     end;
413     end;
414     //Item := TRoundItem.Create;
415 h677 1.5 //鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申
416     if sl[0] = ROUND_INDEX_VERSION then begin
417 deux 1.13 for i := 1 to sl.Count - 1 do begin
418 h677 1.8 Item := ParseRoundThreadLine(sl[i]);
419 h677 1.7 if Item <> nil then begin
420     FItemList.Add(Item);
421     RoundNameList.Add(Item.RoundName);
422     end else begin
423     errorSl.Add(sl[i]);
424     sl.Delete(i);
425     end;
426     end;
427 h677 1.5 end else begin
428 h677 1.6 LoadRoundBoardFile;
429 deux 1.13 for i := 1 to sl.Count - 1 do begin
430 h677 1.8 Item := ParseOldRoundThreadLine(sl[i]);
431 h677 1.7 if Item <> nil then begin
432     FItemList.Add(Item);
433     RoundNameList.Add(Item.RoundName);
434     end else begin
435     errorSl.Add(sl[i]);
436     sl.Delete(i);
437     end;
438 h677 1.5 end;
439     end;
440 h677 1.8 // j := boardList.Count - 1;
441     // while j >= 0 do begin
442     // GikoSys.ReadSubjectFile( BBSsFindBoardFromURL( boardList[j] ) );
443     // boardList.Delete(j);
444     // Dec(j);
445     // end;
446 h677 1.7 if errorSl.Count > 0 then
447     errorSl.SaveToFile(errorFileName);
448 hi_ 1.1 end;
449     finally
450     sl.Free;
451 h677 1.8 // boardList.Free;
452 hi_ 1.1 end;
453     end;
454     procedure TRoundList.SaveRoundFile;
455     var
456     i: integer;
457     FileName: string;
458     sl: TStringList;
459     s: string;
460     Item: TRoundItem;
461     begin
462     GikoSys.ForceDirectoriesEx(GikoSys.GetConfigDir);
463    
464     sl := TStringList.Create;
465     try
466     FileName := GikoSys.GetConfigDir + ROUND_BOARD_FILENAME;
467     sl.Add(ROUND_INDEX_VERSION);
468 deux 1.13 for i := 0 to FBoardList.Count - 1 do begin
469 hi_ 1.1 Item := TRoundItem(FBoardList[i]);
470 yoffy 1.3 s := Item.URL + #1
471 hi_ 1.1 + Item.BoardTitle + #1
472     + Item.RoundName;
473     sl.Add(s);
474     end;
475     sl.SaveToFile(FileName);
476     sl.Clear;
477     FileName := GikoSys.GetConfigDir + ROUND_ITEM_FILENAME;
478     sl.Add(ROUND_INDEX_VERSION);
479 deux 1.13 for i := 0 to FItemList.Count - 1 do begin
480 hi_ 1.1 Item := TRoundItem(FItemList[i]);
481 yoffy 1.3 s := Item.URL + #1
482 hi_ 1.1 + Item.BoardTitle + #1
483     + Item.FileName + #1
484     + Item.ThreadTitle + #1
485     + Item.RoundName;
486     sl.Add(s);
487     end;
488     sl.SaveToFile(FileName);
489     finally
490     sl.Free;
491     end;
492     end;
493 h677 1.5 function TRoundList.ParseRoundBoardLine(Line: string): TRoundItem;
494 hi_ 1.1 var
495     s: string;
496     i: Integer;
497     begin
498     Result := TRoundItem.Create;
499 h677 1.5 Result.ThreadTitle := '';
500     Result.FileName := '';
501     Result.RoundType := grtBoard;
502     for i := 0 to 2 do begin
503     s := GikoSys.GetTokenIndex(Line, #1, i);
504 h677 1.7 try
505     case i of
506 h677 1.5 0:
507 h677 1.7 begin
508     Result.URL := s;
509     end;
510     1: Result.BoardTitle := s;
511     2: Result.RoundName := s;
512     end;
513     except
514     Result := nil;
515     Exit;
516 h677 1.5 end;
517     end;
518 hi_ 1.1 end;
519 h677 1.5
520 h677 1.8 function TRoundList.ParseRoundThreadLine(Line: string): TRoundItem;
521 h677 1.4 var
522 h677 1.5 s: string;
523 h677 1.4 i: Integer;
524 h677 1.12 // threadItem: TThreadItem;
525 h677 1.4 begin
526 h677 1.5 Result := TRoundItem.Create;
527     Result.RoundType := grtItem;
528     for i := 0 to 4 do begin
529     s := GikoSys.GetTokenIndex(Line, #1, i);
530 h677 1.7 try
531     case i of
532     0:
533     begin
534     Result.URL := s;
535 h677 1.8 //threadItem := BBSsFindThreadFromURL( s );
536     //if threadItem <> nil then begin
537     // BoardList.Add( threadItem.ParentBoard.URL );
538     //end;
539 h677 1.5 end;
540 h677 1.7 1: Result.BoardTitle := s;
541     2: Result.FileName := s;
542     3: Result.ThreadTitle := s;
543     4: Result.RoundName := s;
544     end;
545     except
546     Result := nil;
547     Exit;
548 h677 1.5 end;
549     end;
550     end;
551 h677 1.4
552 h677 1.5 function TRoundList.ParseOldRoundBoardLine(Line: string): TRoundItem;
553     var
554     i: Integer;
555 h677 1.4 s: string;
556 h677 1.5 board: TBoard;
557 h677 1.4 begin
558 h677 1.5 Result := TRoundItem.Create;
559     Result.ThreadTitle := '';
560     Result.FileName := '';
561     Result.RoundType := grtBoard;
562 h677 1.6 for i := 0 to 2 do begin
563 h677 1.5 s := GikoSys.GetTokenIndex(Line, #1, i);
564 h677 1.7 try
565     case i of
566     0:
567     begin
568     board := BBSs[ 0 ].FindBBSID( s );
569     if board <> nil then begin
570     Result.URL := board.URL;
571     end else begin
572     raise Exception.Create('鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃?');
573     end;
574     end;
575     1: Result.FBoardTitle := s;
576     2: Result.RoundName := s;
577     end;
578     except
579     Result := nil;
580     Exit;
581 h677 1.5 end;
582     end;
583     end;
584 h677 1.4
585 h677 1.8 function TRoundList.ParseOldRoundThreadLine(Line: string): TRoundItem;
586 h677 1.4 var
587     i: Integer;
588     s: string;
589     buf: string;
590     board: TBoard;
591 h677 1.7 // threadItem: TThreadItem;
592 h677 1.6 bbsID: string;
593 h677 1.4 begin
594     Result := TRoundItem.Create;
595 h677 1.5 Result.RoundType := grtItem;
596 h677 1.6 for i := 0 to 4 do begin
597 h677 1.5 s := GikoSys.GetTokenIndex(Line, #1, i);
598 h677 1.7 try
599     case i of
600     0: bbsID := s;
601     1: Result.BoardTitle := s;
602     2:
603     begin
604     Result.FileName := s;
605 h677 1.10 board := BBSs[ 0 ].FindBBSID(bbsID);
606 h677 1.7 if board <> nil then begin
607     buf := Copy(board.GetSendURL,1,LastDelimiter('/', board.GetSendURL)-1);
608     Result.URL := buf + '/read.cgi/'+ board.BBSID+ '/' +ChangeFileExt(s,'') + '/l50';
609     end else begin
610 h677 1.10 raise Exception.Create('鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申');
611 h677 1.7 end;
612     end;
613     3: Result.ThreadTitle := s;
614     4: Result.RoundName := s;
615     end;
616     except
617     Result := nil;
618     Exit;
619 h677 1.5 end;
620     end;
621 h677 1.4 end;
622 hi_ 1.1
623     end.

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26