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.2.2.1 - (hide annotations) (download) (as text)
Mon Apr 19 22:46:49 2004 UTC (20 years ago) by yoffy
Branch: stable
Changes since 1.2: +386 -63 lines
File MIME type: text/x-pascal
・ハ゛タ 47 相当にマージ。

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

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