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.18 - (hide annotations) (download) (as text)
Tue Apr 13 12:53:47 2004 UTC (20 years ago) by h677
Branch: MAIN
CVS Tags: b49, b48, bv1_49_0_564, bv1_49_0_563, v1_50_0_557, v1_49_0_548, v1_49_0_540, v1_49_0_542, v1_49_0_545, v1_49_0_544, v1_49_0_547, b47, v1_48_0_530, v1_49_0_554, v1_49_0_551, v1_48_0_510, v1_48_0_535, v1_49_0_552, v1_49_0_553, v1_49_0_546, v1_48_0_539, v1_48_0_538, v1_48_0_533, v1_48_0_537, v1_49_2_569, v1_48_0_536, v1_49_0_541, v1_50_0_561
Branch point for: BRANCH_TORA, Bb49
Changes since 1.17: +2 -2 lines
File MIME type: text/x-pascal
板更新したときのURLの切り替えで、BoardのURLが正しく入れ替わらない不具合の修正

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 h677 1.17
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 h677 1.6 //Item : TObject;
57 yoffy 1.3 FURL : string;
58 hi_ 1.1 FBoardTitle: string;
59     FThreadTitle: string;
60     FFileName: string;
61     FBoolData: Boolean; //鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申
62     public
63 h677 1.6
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 h677 1.6 //property Item : TObject read FItem write FItem;
69 yoffy 1.3 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 h677 1.5 ROUND_INDEX_VERSION: string = '2.00';
84 h677 1.7 ERROR_BOARD_FILENAME: string = 'ErrorBoard.2ch'; //Error鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
85     ERROR_ITEM_FILENAME: string = 'ErrorItem.2ch'; //Error鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
86 h677 1.6 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 h677 1.6 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 h677 1.9 //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 h677 1.6 // Item.Item := Board;
122 h677 1.5 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 h677 1.6 // Item.Item := ThreadItem;
143 h677 1.4 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 h677 1.12 // Item: TRoundItem;
156 hi_ 1.1 begin
157     idx := Find(Board);
158     if idx <> -1 then begin
159 h677 1.8 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 h677 1.12 // Item: TRoundItem;
168 hi_ 1.1 begin
169     idx := Find(ThreadItem);
170     if idx <> -1 then begin
171 h677 1.8 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 h677 1.14 for i := FBoardList.Count - 1 downto 0 do begin
181 h677 1.8 if FBoardList[i] <> nil then
182     TRoundItem(FBoardList[i]).Free;
183 hi_ 1.1 FBoardList.Delete(i);
184     end;
185 h677 1.16 FBoardList.Capacity := FBoardList.Count;
186 h677 1.14 for i := FItemList.Count - 1 downto 0 do begin
187 h677 1.8 if FItemList[i] <> nil then
188     TRoundItem(FItemList[i]).Free;
189 hi_ 1.1 FItemList.Delete(i);
190     end;
191 h677 1.16 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 h677 1.5 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 h677 1.5 if Item.FURL = ThreadItem.URL then begin
220 hi_ 1.1 Result := i;
221     Exit;
222     end;
223     end;
224     end;
225 h677 1.6 function TRoundList.Find(URL: string; RoundType: TGikoRoundType): Integer;
226     var
227     i: Integer;
228     Item: TRoundItem;
229     begin
230     Result := -1;
231 h677 1.14 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 h677 1.6 end;
249 h677 1.14 end;
250 h677 1.6 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 h677 1.14
261 h677 1.6 if RoundType = grtBoard then begin
262 h677 1.14 Item := TRoundItem(FBoardList[idx]);
263     Item.Free;
264     FBoardList.Delete(idx);
265 h677 1.6 board := BBSsFindBoardFromURL(URL);
266 h677 1.14 if board <> nil then begin
267     board.Round := False;
268     board.RoundName := '';
269     end;
270 h677 1.6 end else begin
271 h677 1.14 Item := TRoundItem(FItemList[idx]);
272     Item.Free;
273     FItemList.Delete(idx);
274    
275 h677 1.6 threadItem := BBSsFindThreadFromURL(URL);
276 h677 1.14 if threadItem <> nil then begin
277     threadItem.Round := false;
278     threadItem.RoundName := '';
279     end;
280 h677 1.6 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 h677 1.5 procedure TRoundList.LoadRoundBoardFile;
329 hi_ 1.1 var
330     i: Integer;
331     sl: TStringList;
332     FileName: string;
333 h677 1.7 errorSl: TStringList;
334     errorFileName: string;
335 hi_ 1.1 Item: TRoundItem;
336 h677 1.15 delCount: Integer;
337 hi_ 1.1 begin
338     sl := TStringList.Create;
339 h677 1.7 errorSl := TStringList.Create;
340     errorSl.Duplicates := dupIgnore;
341 hi_ 1.1 try
342     //鐃?鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
343     FileName := GikoSys.GetConfigDir + ROUND_BOARD_FILENAME;
344 h677 1.7 //鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
345     errorFileName := GikoSys.GetConfigDir + ERROR_BOARD_FILENAME;
346 hi_ 1.1 if FileExists(FileName) then begin
347     sl.LoadFromFile(FileName);
348 h677 1.7 if FileExists(errorFileName) then begin
349     try
350     errorSl.LoadFromFile(errorFileName);
351     except
352     end;
353     end;
354     //Item := TRoundItem.Create;
355 h677 1.15 delCount := 0;
356 h677 1.5 //鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申
357     if sl[0] = ROUND_INDEX_VERSION then begin
358 deux 1.13 for i := 1 to sl.Count - 1 do begin
359 h677 1.15 Item := ParseRoundBoardLine(sl[i - delCount]);
360 h677 1.7 if Item <> nil then begin
361     FBoardList.Add(Item);
362     RoundNameList.Add(Item.RoundName);
363     end else begin
364 h677 1.15 errorSl.Add( sl[i - delCount] );
365     sl.Delete(i- delCount);
366     Inc(delCount);
367 h677 1.7 end;
368 h677 1.5 end;
369     end else begin
370 h677 1.6 if FOldFileRead then begin //鐃?鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
371 deux 1.13 for i := 1 to sl.Count - 1 do begin
372 h677 1.15 Item := ParseOldRoundBoardLine(sl[i - delCount]);
373 h677 1.7 if Item <> nil then begin
374     FBoardList.Add(Item);
375     RoundNameList.Add(Item.RoundName);
376     end else begin
377 h677 1.15 errorSl.Add( sl[i- delCount] );
378     sl.Delete(i- delCount);
379     Inc(delCount);
380 h677 1.7 end;
381 h677 1.6 end;
382     end else
383     FOldFileRead := true;
384 h677 1.5 end;
385 hi_ 1.1 end;
386 h677 1.7 if errorSl.Count > 0 then
387     errorSl.SaveToFile(errorFileName);
388 h677 1.5 finally
389 h677 1.7 errorSl.Free;
390 h677 1.5 sl.Free;
391     end;
392     end;
393     procedure TRoundList.LoadRoundThreadFile;
394     var
395     i: Integer;
396 h677 1.12 // j: Integer;
397 h677 1.5 sl: TStringList;
398     FileName: string;
399 h677 1.7 errorSl: TStringList;
400     errorFileName: string;
401 h677 1.5 Item: TRoundItem;
402 h677 1.15 delCount: Integer;
403 h677 1.8 // boardList : TStringList;
404 h677 1.5 begin
405 h677 1.8 // boardList := TStringList.Create;
406     // boardList.Duplicates := dupIgnore;
407 h677 1.7 errorSl := TStringList.Create;
408     errorSl.Duplicates := dupIgnore;
409 h677 1.5 sl := TStringList.Create;
410     try
411 hi_ 1.1 //鐃?鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
412     FileName := GikoSys.GetConfigDir + ROUND_ITEM_FILENAME;
413 h677 1.7 //鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
414     errorFileName := GikoSys.GetConfigDir + ERROR_ITEM_FILENAME;
415 hi_ 1.1 if FileExists(FileName) then begin
416     sl.LoadFromFile(FileName);
417 h677 1.7 if FileExists(errorFileName) then begin
418     try
419     errorSl.LoadFromFile(errorFileName);
420     except
421     end;
422     end;
423     //Item := TRoundItem.Create;
424 h677 1.15 delCount := 0;
425 h677 1.5 //鐃?鐃?鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申
426     if sl[0] = ROUND_INDEX_VERSION then begin
427 deux 1.13 for i := 1 to sl.Count - 1 do begin
428 h677 1.15 Item := ParseRoundThreadLine(sl[i - delCount]);
429 h677 1.7 if Item <> nil then begin
430     FItemList.Add(Item);
431     RoundNameList.Add(Item.RoundName);
432     end else begin
433 h677 1.15 errorSl.Add(sl[i - delCount]);
434     sl.Delete(i - delCount);
435     Inc(delCount);
436 h677 1.7 end;
437     end;
438 h677 1.5 end else begin
439 h677 1.6 LoadRoundBoardFile;
440 deux 1.13 for i := 1 to sl.Count - 1 do begin
441 h677 1.15 Item := ParseOldRoundThreadLine(sl[i - delCount]);
442 h677 1.7 if Item <> nil then begin
443     FItemList.Add(Item);
444     RoundNameList.Add(Item.RoundName);
445     end else begin
446 h677 1.15 errorSl.Add(sl[i - delCount]);
447     sl.Delete(i - delCount);
448     Inc(delCount);
449 h677 1.7 end;
450 h677 1.5 end;
451     end;
452 h677 1.8 // 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 h677 1.7 if errorSl.Count > 0 then
459     errorSl.SaveToFile(errorFileName);
460 hi_ 1.1 end;
461     finally
462 h677 1.16 errorSl.Free;
463 hi_ 1.1 sl.Free;
464 h677 1.8 // 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 deux 1.13 for i := 0 to FBoardList.Count - 1 do begin
482 hi_ 1.1 Item := TRoundItem(FBoardList[i]);
483 yoffy 1.3 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 deux 1.13 for i := 0 to FItemList.Count - 1 do begin
493 hi_ 1.1 Item := TRoundItem(FItemList[i]);
494 yoffy 1.3 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 h677 1.5 function TRoundList.ParseRoundBoardLine(Line: string): TRoundItem;
507 hi_ 1.1 var
508     s: string;
509     i: Integer;
510     begin
511     Result := TRoundItem.Create;
512 h677 1.5 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 h677 1.7 try
518     case i of
519 h677 1.5 0:
520 h677 1.7 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 h677 1.5 end;
530     end;
531 hi_ 1.1 end;
532 h677 1.5
533 h677 1.8 function TRoundList.ParseRoundThreadLine(Line: string): TRoundItem;
534 h677 1.4 var
535 h677 1.5 s: string;
536 h677 1.4 i: Integer;
537 h677 1.12 // threadItem: TThreadItem;
538 h677 1.4 begin
539 h677 1.5 Result := TRoundItem.Create;
540     Result.RoundType := grtItem;
541     for i := 0 to 4 do begin
542     s := GikoSys.GetTokenIndex(Line, #1, i);
543 h677 1.7 try
544     case i of
545     0:
546     begin
547     Result.URL := s;
548 h677 1.8 //threadItem := BBSsFindThreadFromURL( s );
549     //if threadItem <> nil then begin
550     // BoardList.Add( threadItem.ParentBoard.URL );
551     //end;
552 h677 1.5 end;
553 h677 1.7 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 h677 1.5 end;
562     end;
563     end;
564 h677 1.4
565 h677 1.5 function TRoundList.ParseOldRoundBoardLine(Line: string): TRoundItem;
566     var
567     i: Integer;
568 h677 1.4 s: string;
569 h677 1.5 board: TBoard;
570 h677 1.4 begin
571 h677 1.5 Result := TRoundItem.Create;
572     Result.ThreadTitle := '';
573     Result.FileName := '';
574     Result.RoundType := grtBoard;
575 h677 1.6 for i := 0 to 2 do begin
576 h677 1.5 s := GikoSys.GetTokenIndex(Line, #1, i);
577 h677 1.7 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 h677 1.5 end;
595     end;
596     end;
597 h677 1.4
598 h677 1.8 function TRoundList.ParseOldRoundThreadLine(Line: string): TRoundItem;
599 h677 1.4 var
600     i: Integer;
601     s: string;
602     buf: string;
603     board: TBoard;
604 h677 1.7 // threadItem: TThreadItem;
605 h677 1.6 bbsID: string;
606 h677 1.4 begin
607     Result := TRoundItem.Create;
608 h677 1.5 Result.RoundType := grtItem;
609 h677 1.6 for i := 0 to 4 do begin
610 h677 1.5 s := GikoSys.GetTokenIndex(Line, #1, i);
611 h677 1.7 try
612     case i of
613     0: bbsID := s;
614     1: Result.BoardTitle := s;
615     2:
616     begin
617     Result.FileName := s;
618 h677 1.10 board := BBSs[ 0 ].FindBBSID(bbsID);
619 h677 1.7 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 h677 1.10 raise Exception.Create('鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申');
624 h677 1.7 end;
625     end;
626     3: Result.ThreadTitle := s;
627     4: Result.RoundName := s;
628     end;
629     except
630     Result := nil;
631 h677 1.15 break;
632 h677 1.5 end;
633     end;
634 h677 1.17 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 h677 1.18 if TRoundItem(FBoardList[i]).FURL = oldURLs[j] then
652     TRoundItem(FBoardList[i]).FURL := newURLs[j];
653 h677 1.17 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 h677 1.4 end;
678 hi_ 1.1
679     end.

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