Develop and Download Open Source Software

Browse CVS Repository

Annotation of /gikonavigoeson/gikonavi/BoardGroup.pas

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


Revision 1.5 - (hide annotations) (download) (as text)
Fri Oct 31 15:04:26 2003 UTC (20 years, 5 months ago) by yoffy
Branch: MAIN
Branch point for: stable
Changes since 1.4: +14 -0 lines
File MIME type: text/x-pascal
・将来の拡張のため、TThreadItem にスレの URL を持たせるようになった。

1 hi_ 1.1 unit BoardGroup;
2    
3     interface
4    
5     uses
6 yoffy 1.2 SysUtils, Classes, ComCtrls, IniFiles, {HTTPApp,} YofUtils, IdGlobal;
7 hi_ 1.1
8     type
9     //???鴻????;腓冴?≪?ゃ?????御??
10     TGikoViewType = (gvtAll, gvtLog, gvtNew, gvtUser);
11     //???鴻??????篁倶??/span>
12     //TGikoListCount = (glc50, glc100, glc200, glc500, glc1000, glcAll);
13     //綏≦?????/span>
14     //TGikoRoundNo = (grnNone, grn1, grn2, grn3, grn4, grn5, grnOnce);
15     //???鴻???????筝???
16     TGikoAgeSage = (gasNone, gasAge, gasSage, gasNew);
17    
18     { TFolder = class
19     private
20     FItemList: TList; //絖??≪?ゃ???????鴻??
21     FLeaf: Boolean; //筝????????????????ゃ???????堺?ャ????
22     public
23     function Add(Item: TFolder): Integer;
24     procedure Clear;
25     procedure Delete(Index: Integer);
26     procedure Exchange(Index1, Index2: Integer);
27     procedure Insert(Index: Integer; Item: TFolder);
28     procedure Move(CurIndex, NewIndex: Integer);
29     function Remove(Item: TFolder): Integer;
30     procedure Sort(Compare: TListSortCompare);
31     property Capacity: Integer read FCapacity write SetCapacity;
32     property Count: Integer read FCount write SetCount;
33     property Items[Index: Integer]: TFolder read Get write Put; default;
34    
35     property Leaf: Boolean read FLeaf;
36     end;
37    
38     TBBS = class(TFolder)
39     end;
40     TCategory class(TFolder)
41     end;
42     TBoard = class(TFolder)
43     end;
44     TThreadItem = class(TFolder)
45     end;
46     }
47    
48     {
49     TBBS2ch = class(TBBS)
50     end;
51     TBoard2ch = class(TBoard)
52     end;
53     TThreadItem2ch = class(TThreadItem)
54     end;
55     }
56    
57     // ITest = interface
58     // end;
59     // IBBS = interface
60     // end;
61     // ICategory = interface
62     // end;
63     // IBoard = interface
64     // end;
65     // IThreadItem = interface
66     // end;
67    
68     TCategory = class;
69     TBoard = class;
70     TThreadItem = class;
71    
72     //??????????鐚??<?????????????若??
73     TBBS2ch = class(TList)
74     private
75     FTitle: string;
76     FLogFolder: string;
77     FExpand: Boolean;
78     FKubetsuChk: Boolean; //腟?莨若?炊??紊ф??絖?絨??絖??阪??/span>
79     FSelectText: string; //腟?莨若?炊??絖???
80     FShortSelectText: string;
81    
82     function GetCategory(index: integer): TCategory;
83     procedure SetCategory(index: integer; value: TCategory);
84     procedure SetSelectText(s: string);
85     public
86     constructor Create(LogFolder: string);
87     destructor Destroy; override;
88    
89     procedure ReadBoardFile;
90    
91     function GetBoardFromBBSID(BBSID: string): TBoard;
92    
93     function Add(item: TCategory): integer;
94     procedure Delete(index: integer);
95     procedure Clear; override;
96     function Find(key: string): TCategory;
97     function FindBBSID(BBSID: string): TBoard;
98     function FindBoardFromTitle(Title: string): TBoard;
99     function FindThreadItem(BBSID: string; FileName: string): TThreadItem;
100     function GetLogFolder: string;
101    
102     property Items[index: integer]: TCategory read GetCategory write SetCategory;
103     property Title: string read FTitle write FTitle;
104     property NodeExpand: Boolean read FExpand write FExpand;
105    
106     property KubetsuChk: Boolean read FKubetsuChk write FKubetsuChk;
107     property SelectText: string read FSelectText write SetSelectText;
108     property ShortSelectText: string read FShortSelectText write FShortSelectText;
109     end;
110    
111     //?????眼??/span>
112     TCategory = class(TList)
113     private
114     FNo: Integer;
115     FTitle: string;
116     FParentBBS2ch: TBBS2ch;
117     FExpand: Boolean;
118    
119     function GetBoard(index: integer): TBoard;
120     procedure SetBoard(index: integer; value: TBoard);
121     public
122     constructor Create;
123     destructor Destroy; override;
124    
125     property No: Integer read FNo write FNo;
126     property Title: string read FTitle write FTitle;
127     property Items[index: integer]: TBoard read GetBoard write SetBoard;
128     property ParentBBS2ch: TBBS2ch read FParentBBS2ch write FParentBBS2ch;
129    
130     function Add(item: TBoard): integer;
131     procedure Delete(index: integer);
132     procedure Clear; override;
133     function FindName(key: string): TBoard;
134     function FindBBSID(BBSID: string): TBoard;
135     function FindBoardFromTitle(Title: string): TBoard;
136     function IsMidoku: Boolean;
137    
138     property NodeExpand: Boolean read FExpand write FExpand;
139     end;
140    
141     //??/span>
142     TBoard = class(TList)
143     private
144     FNo: Integer; //???/span>
145     FTitle: string; //???若???帥?ゃ????/span>
146     FBBSID: string; //BBSID
147     FURL: string; //???若??URL
148     FRound: Boolean; //?鴻??????筝?荀у掘??篋?膣?
149     FRoundName: string; //綏≦????
150     FRoundDate: TDateTime; //?鴻??????筝?荀с????緇??????ユ??鐚?綏≦???ユ??鐚?
151     FLastModified: TDateTime; //?鴻??????筝?荀с???贋?違???????????ユ??鐚??泣?若???贋?ユ??鐚?
152     FLastGetTime: TDateTime; //?鴻???????障?????鴻??????筝?荀с????緇????贋?違?????ユ??鐚??泣?若???贋?ユ???紙?吾??莨若?炊????戎??????鐚?
153     FIsThreadDatRead: Boolean; //?鴻?????????鴻??????粋昭?障??????????鐚?
154     FUnRead: Integer; //?鴻???????????/span>
155     FParentCategory: TCategory; //荀??????眼??/span>
156     FModified: Boolean; //篆????????/span>
157     FBoolData: Boolean; //??????????????戎??yo
158     FSPID: string; //?吾??莨若?睡??PID
159     FPON: string; //?吾??莨若?睡??ON
160     FKotehanName: string; //?潟????喝????
161     FKotehanMail: string; //?潟????潟?<?若??/span>
162    
163     FUpdate: Boolean;
164     FExpand: Boolean;
165    
166     function GetThreadItem(index: integer): TThreadItem;
167     procedure SetThreadItem(index: integer; value: TThreadItem);
168     procedure SetRound(b: Boolean);
169     procedure SetRoundName(s: string);
170     procedure SetLastModified(d: TDateTime);
171     procedure SetLastGetTime(d: TDateTime);
172     procedure SetUnRead(i: Integer);
173     procedure SetKotehanName(s: string);
174     procedure SetKotehanMail(s: string);
175     public
176     constructor Create;
177     destructor Destroy; override;
178    
179     property Items[index: integer]: TThreadItem read GetThreadItem write SetThreadItem;
180     property No: Integer read FNo write FNo;
181     property Title: string read FTitle write FTitle;
182     property BBSID: string read FBBSID write FBBSID;
183     property URL: string read FURL write FURL;
184     property Round: Boolean read FRound write SetRound;
185     property RoundName: string read FRoundName write SetRoundName;
186     property RoundDate: TDateTime read FRoundDate write FRoundDate;
187     property LastModified: TDateTime read FLastModified write SetLastModified;
188     property LastGetTime: TDateTime read FLastGetTime write SetLastGetTime;
189     property UnRead: Integer read FUnRead write SetUnRead;
190     property Modified: Boolean read FModified write FModified;
191     property IsThreadDatRead: Boolean read FIsThreadDatRead write FIsThreadDatRead;
192     property ParentCategory: TCategory read FParentCategory write FParentCategory;
193    
194     function Add(item: TThreadItem): integer;
195     procedure Insert(Index: Integer; Item: TThreadItem);
196     procedure Delete(index: integer);
197     procedure DeleteList(index: integer);
198     procedure Clear; override;
199     function Find(ItemFileName: string): TThreadItem;
200     function GetIndex(ItemFileName: string): Integer;
201     procedure LoadSettings;
202     procedure SaveSettings;
203     function GetReadCgiURL: string;
204     function GetSubjectFileName: string;
205     function GetFolderIndexFileName: string;
206 yoffy 1.2 function GetSendURL: string;
207 hi_ 1.1
208     function GetNewThreadCount: Integer;
209     function GetLogThreadCount: Integer;
210     function GetUserThreadCount: Integer;
211     function GetNewThread(Index: Integer): TThreadItem;
212     function GetLogThread(Index: Integer): TThreadItem;
213     function GetUserThread(Index: Integer): TThreadItem;
214    
215     procedure BeginUpdate;
216     procedure EndUpdate;
217     property NodeExpand: Boolean read FExpand write FExpand;
218     property BoolData: Boolean read FBoolData write FBoolData;
219     property SPID: string read FSPID write FSPID;
220     property PON: string read FPON write FPON;
221     property KotehanName: string read FKotehanName write SetKotehanName;
222     property KotehanMail: string read FKotehanMail write SetKotehanMail;
223     end;
224    
225     //?鴻??/span>
226     TThreadItem = class(TObject)
227     private
228     FNo: Integer; //???/span>
229     FFileName: string; //?鴻?????????<?ゃ????
230     FTitle: string; //?鴻???????帥?ゃ????/span>
231     FShortTitle: string; //?????鴻???????帥?ゃ?????罎?膣∝???
232     FRoundDate: TDateTime; //?鴻??????????緇??????ユ??鐚?綏≦???ユ??鐚?
233     FLastModified: TDateTime; //?鴻?????????贋?違???????????ユ??鐚??泣?若???贋?ユ??鐚?
234     FCount: Integer; //?鴻???????????潟??鐚????若?????
235     FAllResCount: Integer; //?鴻???????????潟??鐚??泣?若??鐚?
236     FNewResCount: Integer; //?鴻???????亥????/span>
237     FSize: Integer; //?鴻???????泣?ゃ??/span>
238     FRound: Boolean; //綏≦????????/span>
239     FRoundName: string; //綏≦????
240     FIsLogFile: Boolean; //???医?????????/span>
241     FParentBoard: TBoard; //荀????若??
242     FKokomade: Integer; //?潟?潟?障?ц????????/span>
243     FNewReceive: Integer; //?潟?潟?????域???篆?/span>
244     FNewArrival: Boolean; //?亥??
245     FUnRead: Boolean; //?????????/span>
246     FScrollTop: Integer; //?鴻?????若???臀?/span>
247     FDownloadHost: string; //篁??????鴻?????????翫???????鴻??
248     FAgeSage: TGikoAgeSage; //?≪?ゃ?????????筝???
249     // FSPID: string; //?吾??莨若?睡??PID
250    
251     FUpdate: Boolean;
252     FExpand: Boolean;
253 yoffy 1.5 FURL: string;
254 hi_ 1.1
255     procedure SetLastModified(d: TDateTime);
256     procedure SetRound(b: Boolean);
257     procedure SetRoundName(s: string);
258     procedure SetKokomade(i: Integer);
259     procedure SetUnRead(b: Boolean);
260     procedure SetScrollTop(i: Integer);
261 yoffy 1.5 function GetURLWrapper: string;
262 hi_ 1.1 public
263     constructor Create;
264     destructor Destroy; override;
265    
266     function GetDatURL: string;
267     function GetDatgzURL: string;
268     // function GetOldDatgzURL: string;
269     function GetOfflawCgiURL(SessionID: string): string;
270     function GetSendURL: string;
271     procedure DeleteLogFile;
272     function GetThreadFileName: string;
273     procedure BeginUpdate;
274     procedure EndUpdate;
275    
276     property No: Integer read FNo write FNo;
277     property FileName: string read FFileName write FFileName;
278     property Title: string read FTitle write FTitle;
279     property ShortTitle: string read FShortTitle write FShortTitle;
280     property RoundDate: TDateTime read FRoundDate write FRoundDate;
281     property LastModified: TDateTime read FLastModified write SetLastModified;
282     property Count: Integer read FCount write FCount;
283     property AllResCount: Integer read FAllResCount write FAllResCount;
284     property NewResCount: Integer read FNewResCount write FNewResCount;
285     property Size: Integer read FSize write FSize;
286     property Round: Boolean read FRound write SetRound;
287     property RoundName: string read FRoundName write SetRoundName;
288    
289     property IsLogFile: Boolean read FIsLogFile write FIsLogFile;
290     property ParentBoard: TBoard read FParentBoard write FParentBoard;
291     property Kokomade: Integer read FKokomade write SetKokomade;
292     property NewReceive: Integer read FNewReceive write FNewReceive;
293     property NewArrival: Boolean read FNewArrival write FNewArrival;
294     property UnRead: Boolean read FUnRead write SetUnRead;
295     property ScrollTop: Integer read FScrollTop write SetScrollTop;
296     property Expand: Boolean read FExpand write FExpand;
297     property DownloadHost: string read FDownloadHost write FDownloadHost;
298     property AgeSage: TGikoAgeSage read FAgeSage write FAgeSage;
299     // property SPID: string read FSPID write FSPID;
300 yoffy 1.5
301     property URL: string read GetURLWrapper write FURL;
302 hi_ 1.1 end;
303    
304    
305    
306     //罎?膣∝??????鴻??
307     { TSearchList = class(TList)
308     private
309     function GetThreadItem(index: integer): TThreadItem;
310     procedure SetThreadItem(index: integer; value: TThreadItem);
311     public
312     constructor Create;
313     destructor Destroy; override;
314    
315     property Items[index: integer]: TThreadItem read GetThreadItem write SetThreadItem;
316    
317     function Add(item: TThreadItem): integer;
318     procedure Delete(index: integer);
319     procedure Clear; override;
320     end;}
321    
322     var
323     BBS2ch: TBBS2ch;
324    
325     implementation
326    
327     uses
328     GikoSystem, RoundData;
329    
330     const
331     BBS2CH_NAME: string = '鐚??<????????';
332     BBS2CH_LOG_FOLDER: string = '2ch';
333    
334     FOLDER_INI_FILENAME: string = 'Folder.ini';
335     FOLDER_INDEX_FILENAME: string = 'Folder.idx';
336     SUBJECT_FILENAME: string = 'subject.txt';
337     PATH_DELIM: string = '\';
338     //DEFAULT_LIST_COUNT: Integer = 100;
339    
340     // COLUMN_CATEGORY: array[0..0] of string = ('?????眼????');
341     // COLUMN_BOARD: array[0..3] of string = ('?水??', '??緇???#39;, '綏≦??篋?膣?', '????綏≦???ユ??');
342     // COLUMN_THREADITEM: array[0..3] of string = ('?鴻????????', '?????潟??', '綏≦??篋?膣?', '????綏≦???ユ??');
343    
344     (*************************************************************************
345     *罘??遵??鐚?TBBS?潟?潟?鴻????????/span>
346     *Public
347     *************************************************************************)
348     constructor TBBS2ch.Create(LogFolder: string);
349     begin
350     Title := BBS2CH_NAME;
351     FLogFolder := LogFolder;
352     end;
353    
354     (*************************************************************************
355     *罘??遵??鐚?TBBS???鴻????????/span>
356     *Public
357     *************************************************************************)
358     destructor TBBS2ch.Destroy;
359     begin
360     Clear;
361     inherited;
362     end;
363    
364     (*************************************************************************
365     *罘??遵??鐚?
366     *Public
367     *************************************************************************)
368     function TBBS2ch.GetCategory(index: integer): TCategory;
369     begin
370     Result := TCategory(inherited Items[index]);
371     end;
372    
373     procedure TBBS2ch.SetCategory(index: integer; value: TCategory);
374     begin
375     inherited Items[index] := value;
376     end;
377    
378     function TBBS2ch.Add(item: TCategory): integer;
379     begin
380     Item.ParentBBS2ch := self;
381     Result := inherited Add(item);
382     end;
383    
384     procedure TBBS2ch.Delete(index: integer);
385     begin
386     if Items[index] <> nil then
387     TCategory(Items[index]).Free;
388     Items[index] := nil;
389     inherited Delete(index);
390     end;
391    
392     procedure TBBS2ch.Clear;
393     var
394     i: integer;
395     begin
396     for i := Count - 1 downto 0 do
397     Delete(i);
398     end;
399    
400     function TBBS2ch.Find(key: string): TCategory;
401     begin
402     Result := nil;
403     end;
404    
405     function TBBS2ch.FindBBSID(BBSID: string): TBoard;
406     var
407     i: Integer;
408     Category: TCategory;
409     Board: TBoard;
410     begin
411     Result := nil;
412     for i := 0 to Count - 1 do begin
413     Category := Items[i];
414     Board := Category.FindBBSID(BBSID);
415     if Board <> nil then begin
416     Result := Board;
417     Exit;
418     end;
419     end;
420     end;
421    
422     function TBBS2ch.FindBoardFromTitle(Title: string): TBoard;
423     var
424     i: Integer;
425     Category: TCategory;
426     Board: TBoard;
427     begin
428     Result := nil;
429     for i := 0 to Count - 1 do begin
430     Category := Items[i];
431     Board := Category.FindBoardFromTitle(Title);
432     if Board <> nil then begin
433     Result := Board;
434     Exit;
435     end;
436     end;
437     end;
438    
439     function TBBS2ch.FindThreadItem(BBSID: string; FileName: string): TThreadItem;
440     var
441     Board: TBoard;
442     begin
443     Result := nil;
444     Board := FindBBSID(BBSID);
445     if Board = nil then
446     Exit;
447     Result := Board.Find(FileName);
448     end;
449    
450     (*************************************************************************
451     *罘??遵??????鐚????若?????<?ゃ????粋昭??/span>
452     *?????????鐚?Public
453     *絮ユ?鐚?????鐚??域?篏???
454     *************************************************************************)
455     procedure TBBS2ch.ReadBoardFile;
456     var
457     i, j: integer;
458     idx: Integer;
459     ini: TMemIniFile;
460     CategoryList: TStringList;
461     BoardList: TStringList;
462     Category: TCategory;
463     Board: TBoard;
464     inistr: string;
465     RoundItem: TRoundItem;
466     BBSList: TStringList;
467     CustomList: TStringList;
468     begin
469     ini := TMemIniFile.Create('');
470     BBSList := TStringList.Create;
471     CustomList := TStringList.Create;
472     try
473     if FileExists(GikoSys.GetBoardFileName) then
474     BBSList.LoadFromFile(GikoSys.GetBoardFileName);
475     if FileExists(GikoSys.GetCustomBoardFileName) then
476     CustomList.LoadFromFile(GikoSys.GetCustomBoardFileName);
477     BBSList.AddStrings(CustomList);
478     ini.SetStrings(BBSList);
479    
480     CategoryList := TStringList.Create;
481     BoardList := TStringList.Create;
482     try
483     ini.ReadSections(CategoryList);
484     for i := 0 to CategoryList.Count - 1 do begin
485    
486     ini.ReadSection(CategoryList[i], BoardList);
487     Category := TCategory.Create;
488     Category.No := i + 1;
489     Category.Title := CategoryList[i];
490    
491     for j := 0 to BoardList.Count - 1 do begin
492     inistr := ini.ReadString(CategoryList[i], BoardList[j], '');
493     Board := TBoard.Create;
494     Board.BeginUpdate;
495     Board.No := j + 1;
496     Board.Title := BoardList[j];
497     Board.BBSID := GikoSys.UrlToID(inistr);
498     Board.URL := inistr;
499     Board.RoundDate := ZERO_DATE;
500    
501     idx := RoundList.Find(Board);
502     if idx <> -1 then begin
503     RoundItem := RoundList.Items[idx, grtBoard];
504     Board.Round := True;
505     Board.RoundName := RoundItem.RoundName;
506     end;
507     Category.Add(Board);
508     Board.EndUpdate;
509     end;
510     BBS2ch.Add(Category);
511     end;
512     finally
513     BoardList.Free;
514     CategoryList.Free;
515     end;
516     finally
517     BBSList.Free;
518     CustomList.Free;
519     ini.Free;
520     end;
521     end;
522    
523     function TBBS2ch.GetBoardFromBBSID(BBSID: string): TBoard;
524     var
525     i: integer;
526     begin
527     Result := nil;
528     for i := 0 to BBS2ch.Count - 1 do begin
529     Result := BBS2ch.Items[i].FindBBSID(BBSID);
530     if Result <> nil then
531     Exit;
532     end;
533     end;
534    
535     (*************************************************************************
536     *???違??????????緇?
537     *
538     *************************************************************************)
539     function TBBS2ch.GetLogFolder: string;
540     begin
541     Result := IncludeTrailingPathDelimiter(FLogFolder)
542     + BBS2CH_LOG_FOLDER + PATH_DELIM;
543     end;
544    
545     procedure TBBS2ch.SetSelectText(s: string);
546     begin
547     FSelectText := s;
548     ShortSelectText := GikoSys.ZenToHan(s);
549     end;
550    
551     {class function TBBS2ch.GetColumnName(Index: Integer): string;
552     begin
553     Result := COLUMN_CATEGORY[Index];
554     end;
555    
556     class function TBBS2ch.GetColumnCount: Integer;
557     begin
558     Result := Length(COLUMN_CATEGORY);
559     end;}
560    
561     //===================
562     //TCategory
563     //===================
564     constructor TCategory.Create;
565     begin
566     end;
567    
568     destructor TCategory.Destroy;
569     begin
570     Clear;
571     inherited;
572     end;
573    
574     function TCategory.GetBoard(index: integer): TBoard;
575     begin
576     Result := TBoard(inherited Items[index]);
577     end;
578    
579     procedure TCategory.SetBoard(index: integer; value: TBoard);
580     begin
581     inherited Items[index] := value;
582     end;
583    
584     function TCategory.Add(item: TBoard): integer;
585     begin
586     Item.ParentCategory := self;
587     Result := inherited Add(item);
588     end;
589    
590     procedure TCategory.Delete(index: integer);
591     begin
592     if Items[index] <> nil then
593     TBoard(Items[index]).Free;
594     Items[index] := nil;
595     inherited Delete(index);
596     end;
597    
598     procedure TCategory.Clear;
599     var
600     i: integer;
601     begin
602     for i := Count - 1 downto 0 do
603     Delete(i);
604     end;
605    
606     function TCategory.FindName(key: string): TBoard;
607     begin
608     Result := nil;
609     end;
610    
611     function TCategory.FindBBSID(BBSID: string): TBoard;
612     var
613     i: integer;
614     begin
615     Result := nil;
616     for i := 0 to Count - 1 do begin
617     if Items[i].FBBSID = BBSID then begin
618     Result := Items[i];
619     Exit;
620     end;
621     end;
622     end;
623    
624     function TCategory.FindBoardFromTitle(Title: string): TBoard;
625     var
626     i: integer;
627     begin
628     Result := nil;
629     for i := 0 to Count - 1 do begin
630     if Items[i].FTitle = Title then begin
631     Result := Items[i];
632     Exit;
633     end;
634     end;
635     end;
636    
637     function TCategory.IsMidoku: Boolean;
638     var
639     i: Integer;
640     j: Integer;
641     begin
642     Result := False;
643     for i := 0 to Count - 1 do begin
644     if Items[i] <> nil then begin
645     for j := 0 to Items[i].Count - 1 do begin
646     if Items[i].Items[j] <> nil then begin
647     // if (Items[i].Items[j].IsLogFile) and (Items[i].Items[j].Count > Items[i].Items[j].Kokomade) then begin
648     if (Items[i].Items[j].IsLogFile) and (Items[i].Items[j].UnRead) then begin
649     Result := True;
650     Exit;
651     end;
652     end;
653     end;
654     end;
655     end;
656     end;
657    
658     {class function TCategory.GetColumnName(Index: Integer): string;
659     begin
660     Result := COLUMN_BOARD[Index];
661     end;
662    
663     class function TCategory.GetColumnCount: Integer;
664     begin
665     Result := Length(COLUMN_BOARD);
666     end;}
667    
668     //===================
669     //TBoard
670     //===================
671     constructor TBoard.Create;
672     begin
673     FNo := 0;
674     FTitle := '';
675     FBBSID := '';
676     FURL := '';
677     FRound := False;
678     FRoundDate := ZERO_DATE;
679     FLastModified := ZERO_DATE;
680     FLastGetTime := ZERO_DATE;
681     FIsThreadDatRead := False;
682     FUnRead := 0;
683     // FListStyle := vsReport;
684     // FItemNoVisible := True;
685    
686     FUpdate := True;
687     end;
688    
689     destructor TBoard.Destroy;
690     begin
691     if FModified then begin
692     GikoSys.WriteThreadDat(Self);
693     SaveSettings;
694     end;
695    
696     Clear;
697     inherited;
698     end;
699    
700     function TBoard.GetThreadItem(index: integer): TThreadItem;
701     begin
702     Result := TThreadItem(inherited Items[index]);
703     end;
704    
705     procedure TBoard.SetThreadItem(index: integer; value: TThreadItem);
706     begin
707     inherited Items[index] := value;
708     end;
709    
710     function TBoard.Add(Item: TThreadItem): Integer;
711     begin
712     Item.ParentBoard := Self;
713     Result := inherited Add(Item);
714     end;
715    
716     procedure TBoard.Insert(Index: Integer; Item: TThreadItem);
717     begin
718     Item.ParentBoard := Self;
719     inherited Insert(Index, Item);
720     end;
721    
722     //Index?ф??絎????????鴻???????????吾?с???????贋?
723     procedure TBoard.Delete(index: Integer);
724     begin
725     if Items[index] <> nil then
726     TThreadItem(Items[index]).Free;
727     Items[index] := nil;
728     inherited Delete(index);
729     end;
730    
731     //Index?ф??絎????????鴻???????????鴻?????????わ??鴻???????吾?с????????????鐚?
732     procedure TBoard.DeleteList(index: integer);
733     begin
734     inherited Delete(index);
735     end;
736    
737     procedure TBoard.Clear;
738     var
739     i: integer;
740     begin
741     // FUnRead := 0;
742     for i := Count - 1 downto 0 do
743     Delete(i);
744     end;
745    
746     function TBoard.Find(ItemFileName: string): TThreadItem;
747     var
748     i: integer;
749     begin
750     Result := nil;
751     for i := 0 to Count - 1 do begin
752     if Items[i].FileName = ItemFileName then begin
753     Result := Items[i];
754     Exit;
755     end;
756     end;
757     end;
758    
759     function TBoard.GetIndex(ItemFileName: string): Integer;
760     var
761     i: integer;
762     begin
763     Result := -1;
764     for i := 0 to Count - 1 do begin
765     if Items[i].FileName = ItemFileName then begin
766     Result := i;
767     Exit;
768     end;
769     end;
770     end;
771    
772     {function TBoard.GetMidokuCount: Integer;
773     var
774     i: integer;
775     begin
776     Result := 0;
777     for i := 0 to Count- 1 do begin
778     if Items[i] <> nil then begin
779     if (Items[i].IsLogFile) and (Items[i].Count > Items[i].Kokomade) then
780     inc(Result);
781     end;
782     end;
783     end;
784     }
785    
786     procedure TBoard.LoadSettings;
787     var
788     ini: TMemIniFile;
789     FileName: string;
790     begin
791     FileName := ParentCategory.ParentBBS2ch.GetLogFolder
792     + BBSID + PATH_DELIM + FOLDER_INI_FILENAME;
793    
794     if not FileExists(FileName) then
795     Exit;
796     ini := TMemIniFile.Create(FileName);
797     try
798     // Round := ini.ReadBool('Status', 'Round', False);
799     FRoundDate := ini.ReadDateTime('Status', 'RoundDate', ZERO_DATE);
800     FLastModified := ini.ReadDateTime('Status', 'LastModified', ZERO_DATE);
801     FLastGetTime := ini.ReadDateTime('Status', 'LastGetTime', ZERO_DATE);
802     FUnRead := ini.ReadInteger('Status', 'UnRead', 0);
803     FSPID := ini.ReadString('Cookie', 'SPID', '');
804     FPON := ini.ReadString('Cookie', 'PON', '');
805     FKotehanName := ini.ReadString('Kotehan', 'Name', '');
806     FKotehanMail := ini.ReadString('Kotehan', 'Mail', '');
807     // ListStyle := TViewStyle(Ord(ini.ReadInteger('Status', 'ListStyle', 3)));
808     // ItemNoVisible := ini.ReadBool('Status', 'ItemNoVisible', True);
809     // ViewType := TGikoViewType(Ord(ini.ReadInteger('Status', 'ViewType', 0)));
810     if UnRead < 0 then
811     UnRead := 0;
812     finally
813     ini.Free;
814     end;
815     end;
816    
817     procedure TBoard.SaveSettings;
818     var
819     ini: TMemIniFile;
820     FileName: string;
821     begin
822     FileName := ParentCategory.ParentBBS2ch.GetLogFolder
823     + BBSID + PATH_DELIM;
824     if not GikoSys.DirectoryExistsEx(FileName) then
825     GikoSys.ForceDirectoriesEx(FileName);
826     FileName := FileName + FOLDER_INI_FILENAME;
827     ini := TMemIniFile.Create(FileName);
828     try
829     if UnRead < 0 then
830     UnRead := 0;
831     // ini.WriteBool('Status', 'Round', Round);
832     ini.WriteDateTime('Status', 'RoundDate', FRoundDate);
833     ini.WriteDateTime('Status', 'LastModified', FLastModified);
834     ini.WriteDateTime('Status', 'LastGetTime', FLastGetTime);
835     ini.WriteInteger('Status', 'UnRead', FUnRead);
836     ini.WriteString('Cookie', 'SPID', FSPID);
837     ini.WriteString('Cookie', 'PON', FPON);
838     ini.WriteString('Kotehan', 'Name', FKotehanName);
839     ini.WriteString('Kotehan', 'Mail', FKotehanMail);
840     // ini.WriteInteger('Status', 'ListStyle', Ord(ListStyle));
841     // ini.WriteBool('Status', 'ItemNoVisible', ItemNoVisible);
842     // ini.WriteInteger('Status', 'ViewType', Ord(ViewType));
843     ini.UpdateFile;
844     finally
845     ini.Free;
846     end;
847     end;
848    
849     // ?泣???吾?с????URL??緇?
850     function TBoard.GetReadCgiURL: string;
851     begin
852     //Result := URL + SUBJECT_FILENAME;
853     //Result := GikoSys.UrlToServer(URL)
854     // + 'test/read.cgi/' + BBSID + '/?raw=0.0';
855     Result := URL + SUBJECT_FILENAME;
856    
857     end;
858    
859     // ?泣???吾?с???????<?ゃ??????緇?鐚????刻????<?ゃ????鐚?
860     function TBoard.GetSubjectFileName: string;
861     begin
862     Result := ParentCategory.ParentBBS2ch.GetLogFolder
863     + BBSID + PATH_DELIM + SUBJECT_FILENAME;
864     end;
865    
866     // ?ゃ?潟???????鴻???<?ゃ????(folder.idx)??緇?鐚????刻????<?ゃ????鐚?
867     function TBoard.GetFolderIndexFileName: string;
868     begin
869     Result := ParentCategory.ParentBBS2ch.GetLogFolder
870     + BBSID + PATH_DELIM + FOLDER_INDEX_FILENAME;
871     end;
872    
873 yoffy 1.2 // ?鴻???????篆?RL
874     function TBoard.GetSendURL: string;
875     begin
876     Result := GikoSys.UrlToServer(URL) + 'test/subbbs.cgi';
877     end;
878    
879 hi_ 1.1 procedure TBoard.SetRound(b: Boolean);
880     begin
881     if b then
882     RoundList.Add(Self)
883     else
884     RoundList.Delete(Self);
885     if FRound = b then Exit;
886     FRound := b;
887     if FUpdate then
888     FModified := True;
889     end;
890    
891     procedure TBoard.SetRoundName(s: string);
892     begin
893     if FRoundName = s then Exit;
894     FRoundName := s;
895     if FUpdate then
896     FModified := True;
897     end;
898    
899     procedure TBoard.SetLastModified(d: TDateTime);
900     begin
901     if FLastModified = d then Exit;
902     FLastModified := d;
903     if FUpdate then
904     FModified := True;
905     end;
906    
907     procedure TBoard.SetLastGetTime(d: TDateTime);
908     begin
909     if FLastGetTime = d then Exit;
910     FLastGetTime := d;
911     if FUpdate then
912     FModified := True;
913     end;
914    
915     procedure TBoard.SetUnRead(i: Integer);
916     begin
917     if FUnRead = i then Exit;
918     if i < 0 then i := 0;
919     FUnRead := i;
920     if FUpdate then
921     FModified := True;
922     end;
923    
924     procedure TBoard.SetKotehanName(s: string);
925     begin
926     if FKotehanName = s then Exit;
927     FKotehanName := s;
928     if FUpdate then
929     FModified := True;
930     end;
931    
932     procedure TBoard.SetKotehanMail(s: string);
933     begin
934     if FKotehanMail = s then Exit;
935     FKotehanMail := s;
936     if FUpdate then
937     FModified := True;
938     end;
939    
940     function TBoard.GetNewThreadCount: Integer;
941     var
942     i: Integer;
943     begin
944     Result := 0;
945 yoffy 1.2 if Length( ParentCategory.ParentBBS2ch.ShortSelectText ) = 0 then
946     begin
947     for i := 0 to Count - 1 do begin
948     if Items[i].NewArrival then
949     inc(Result);
950     end;
951     end else begin
952     for i := 0 to Count - 1 do begin
953     if Items[i].NewArrival then
954     begin
955     if Items[i].ShortTitle = '' then
956     Items[i].ShortTitle := GikoSys.ZenToHan(Items[i].Title);
957     if AnsiPos(ParentCategory.ParentBBS2ch.ShortSelectText, Items[i].ShortTitle) <> 0 then
958     inc(Result);
959     end;
960     end;
961     end;
962 hi_ 1.1 end;
963    
964     function TBoard.GetLogThreadCount: Integer;
965     var
966     i: Integer;
967     begin
968     Result := 0;
969 yoffy 1.2 if Length( ParentCategory.ParentBBS2ch.ShortSelectText ) = 0 then
970     begin
971     for i := 0 to Count - 1 do begin
972     if Items[i].IsLogFile then
973     inc(Result);
974     end;
975     end else begin
976     for i := 0 to Count - 1 do begin
977     if Items[i].IsLogFile then
978     begin
979     if Items[i].ShortTitle = '' then
980     Items[i].ShortTitle := GikoSys.ZenToHan(Items[i].Title);
981     if AnsiPos(ParentCategory.ParentBBS2ch.ShortSelectText, Items[i].ShortTitle) <> 0 then
982     inc(Result);
983     end;
984     end;
985     end;
986 hi_ 1.1 end;
987    
988     function TBoard.GetUserThreadCount: Integer;
989     var
990     i: Integer;
991     begin
992     Result := 0;
993 yoffy 1.2 if Length( ParentCategory.ParentBBS2ch.ShortSelectText ) = 0 then
994     Result := Count
995     else
996 hi_ 1.1 for i := 0 to Count - 1 do begin
997     if Items[i].ShortTitle = '' then
998     Items[i].ShortTitle := GikoSys.ZenToHan(Items[i].Title);
999     if AnsiPos(ParentCategory.ParentBBS2ch.ShortSelectText, Items[i].ShortTitle) <> 0 then
1000     inc(Result);
1001     end;
1002     end;
1003    
1004     function TBoard.GetNewThread(Index: Integer): TThreadItem;
1005     var
1006     i: Integer;
1007     Cnt: Integer;
1008     begin
1009     Result := nil;
1010     Cnt := 0;
1011 yoffy 1.2 if Length( ParentCategory.ParentBBS2ch.ShortSelectText ) = 0 then
1012     begin
1013     for i := 0 to Count - 1 do begin
1014     if Items[i].NewArrival then
1015     begin
1016     if Index = Cnt then begin
1017     Result := Items[i];
1018     Exit;
1019     end;
1020     inc(Cnt);
1021     end;
1022     end;
1023     end else begin
1024     for i := 0 to Count - 1 do begin
1025     if Items[i].NewArrival then
1026     begin
1027     if Items[i].ShortTitle = '' then
1028     Items[i].ShortTitle := GikoSys.ZenToHan(Items[i].Title);
1029     if AnsiPos(ParentCategory.ParentBBS2ch.ShortSelectText, Items[i].ShortTitle) <> 0 then begin
1030     if Index = Cnt then begin
1031     Result := Items[i];
1032     Exit;
1033     end;
1034     inc(Cnt);
1035     end;
1036     end;
1037     end;
1038     end;
1039 hi_ 1.1 end;
1040    
1041     function TBoard.GetLogThread(Index: Integer): TThreadItem;
1042     var
1043     i: Integer;
1044     Cnt: Integer;
1045     begin
1046 h677 1.4 Cnt := 0;
1047 yoffy 1.2 if Length( ParentCategory.ParentBBS2ch.ShortSelectText ) = 0 then
1048     begin
1049     for i := 0 to Count - 1 do begin
1050     if Items[i].IsLogFile then
1051     begin
1052     if Index = Cnt then begin
1053     Result := Items[i];
1054     Exit;
1055     end;
1056     inc(Cnt);
1057     end;
1058     end;
1059     end else begin
1060     for i := 0 to Count - 1 do begin
1061     if Items[i].IsLogFile then
1062     begin
1063     if Items[i].ShortTitle = '' then
1064     Items[i].ShortTitle := GikoSys.ZenToHan(Items[i].Title);
1065     if AnsiPos(ParentCategory.ParentBBS2ch.ShortSelectText, Items[i].ShortTitle) <> 0 then begin
1066     if Index = Cnt then begin
1067     Result := Items[i];
1068     Exit;
1069     end;
1070     inc(Cnt);
1071     end;
1072     end;
1073     end;
1074     end;
1075 h677 1.4 Result := nil;
1076 hi_ 1.1 end;
1077    
1078     function TBoard.GetUserThread(Index: Integer): TThreadItem;
1079     var
1080     i: Integer;
1081     Cnt: Integer;
1082     begin
1083     Result := nil;
1084     Cnt := 0;
1085 yoffy 1.2 if Length( ParentCategory.ParentBBS2ch.ShortSelectText ) = 0 then
1086     begin
1087     for i := 0 to Count - 1 do begin
1088     if Index = Cnt then
1089     begin
1090     Result := Items[ i ];
1091     Exit;
1092     end;
1093     inc( Cnt );
1094     end;
1095     end else begin
1096     for i := 0 to Count - 1 do begin
1097     if Items[i].ShortTitle = '' then
1098     Items[i].ShortTitle := GikoSys.ZenToHan(Items[i].Title);
1099     if AnsiPos(ParentCategory.ParentBBS2ch.ShortSelectText, Items[i].ShortTitle) <> 0 then begin
1100     if Index = Cnt then begin
1101     Result := Items[i];
1102     Exit;
1103     end;
1104     inc(Cnt);
1105     end;
1106     end;
1107     end;
1108 hi_ 1.1 end;
1109    
1110     procedure TBoard.BeginUpdate;
1111     begin
1112     FUpdate := False;
1113     end;
1114    
1115     procedure TBoard.EndUpdate;
1116     begin
1117     FUpdate := True;
1118     end;
1119    
1120     {class function TBoard.GetColumnName(Index: Integer): string;
1121     begin
1122     Result := COLUMN_THREADITEM[Index];
1123     end;
1124    
1125     class function TBoard.GetColumnCount: Integer;
1126     begin
1127     Result := Length(COLUMN_THREADITEM);
1128     end;}
1129    
1130     //constructor TThreadItem.Create(AOwner: TComponent);
1131     constructor TThreadItem.Create;
1132     begin
1133     FNo := 0;
1134     FFileName := '';
1135     FTitle := '';
1136     FRoundDate := ZERO_DATE;
1137     FLastModified := ZERO_DATE;
1138     FCount := 0;
1139     FAllResCount := 0;
1140     FNewResCount := 0;
1141     FSize := 0;
1142     FRound := False;
1143     FIsLogFile := False;
1144     FParentBoard := nil;
1145     FKokomade := -1;
1146     FNewReceive := 0;
1147     FNewArrival := False;
1148    
1149     FUpdate := True;
1150     end;
1151    
1152     destructor TThreadItem.Destroy;
1153     begin
1154     inherited;
1155     end;
1156    
1157     function TThreadItem.GetDatURL: string;
1158     var
1159     Protocol, Host, Path, Document, Port, Bookmark: string;
1160     begin
1161     Result := ParentBoard.URL
1162     + 'dat/'
1163     + FileName;
1164     if FDownloadHost <> '' then begin
1165     GikoSys.ParseURI(Result, Protocol, Host, Path, Document, Port, Bookmark);
1166     Result := Format('%s://%s%s%s', [Protocol,
1167     FDownloadHost,
1168     Path,
1169     Document]);
1170     end;
1171     // Result := GikoSys.UrlToServer(ParentBoard.URL)
1172     // + 'test/read.cgi/' + ParentBoard.BBSID + '/'
1173     // + ChangeFileExt(FileName, '') + '/?raw='
1174     // + IntToStr(ResNum) + '.' + IntToStr(ResSize);
1175     end;
1176    
1177     function TThreadItem.GetDatgzURL: string;
1178     function isOldKako(s: string): Boolean;
1179     begin
1180     Result := False;
1181     if AnsiPos('piza.', s) <> 0 then
1182     Result := True
1183     else if AnsiPos('www.bbspink.', s) <> 0 then
1184     Result := True
1185     else if AnsiPos('tako.', s) <> 0 then
1186     Result := True;
1187     end;
1188     var
1189     Protocol, Host, Path, Document, Port, Bookmark: string;
1190     DatNo: string;
1191     begin
1192     if FDownloadHost = '' then begin
1193     DatNo := ChangeFileExt(FileName, '');
1194     if isOldKako(ParentBoard.URL) then begin
1195     Result := Format('%s%s/%.3s/%s.dat', [ParentBoard.URL, 'kako', DatNo, DatNo]);
1196     end else begin
1197     if Length(DatNo) > 9 then begin
1198     //http://xxx.2ch.net/xxx/kako/9999/99999/999999999.dat.gz
1199     Result := Format('%s%s/%.4s/%.5s/%s.dat.gz', [ParentBoard.URL, 'kako', DatNo, DatNo, DatNo]);
1200     end else begin
1201     //http://xxx.2ch.net/xxx/kako/999/999999999.dat.gz
1202     Result := Format('%s%s/%.3s/%s.dat.gz', [ParentBoard.URL, 'kako', DatNo, DatNo]);
1203     end;
1204     end;
1205     end else begin
1206     Gikosys.ParseURI(Result, Protocol, Host, Path, Document, Port, Bookmark);
1207     DatNo := ChangeFileExt(Document, '');
1208     if isOldKako(DownloadHost) then begin
1209     Result := Format('%s://%s/%s/kako/%.3s/%s.dat', [Protocol, DownloadHost, ParentBoard.FBBSID, DatNo, DatNo]);
1210     end else begin
1211     if Length(DatNo) > 9 then begin
1212     Result := Format('%s://%s/%s/kako/%.4s/%.5s/%s.dat.gz', [Protocol, DownloadHost, ParentBoard.FBBSID, DatNo, DatNo, DatNo]);
1213     end else begin
1214     Result := Format('%s://%s/%s/kako/%.3s/%s.dat.gz', [Protocol, DownloadHost, ParentBoard.FBBSID, DatNo, DatNo]);
1215     end;
1216     end;
1217     end;
1218     end;
1219    
1220     {function TThreadItem.GetOldDatgzURL: string;
1221     var
1222     Protocol, Host, Path, Document, Port, Bookmark: string;
1223     begin
1224     Result := Format('%s%s/%.3s/%s.gz', [ParentBoard.URL,
1225     'kako',
1226     FileName,
1227     FileName]);
1228     if FDownloadHost <> '' then begin
1229     ParseURI(Result, Protocol, Host, Path, Document, Port, Bookmark);
1230     Result := Format('%s://%s%s%s', [Protocol,
1231     DownloadHost,
1232     Path,
1233     Document]);
1234    
1235     end;
1236     end;}
1237    
1238     function TThreadItem.GetOfflawCgiURL(SessionID: string): string;
1239     //var
1240     // Protocol, Host, Path, Document, Port, Bookmark: string;
1241     begin
1242     // Result := GikoSys.UrlToServer(ParentBoard.URL)
1243     // + 'test/offlaw.cgi/' + ParentBoard.BBSID + '/'
1244     // + ChangeFileExt(FileName, '') + '/?raw=.0&sid=' + HttpEncode(SessionID);
1245     if FDownloadHost = '' then begin
1246     Result := GikoSys.UrlToServer(ParentBoard.URL)
1247     + 'test/offlaw.cgi/' + ParentBoard.BBSID + '/'
1248     + ChangeFileExt(FileName, '') + '/?raw=.0&sid=' + HttpEncode(SessionID);
1249     end else begin
1250     //http://news.2ch.net/test/offlaw.cgi/newsplus/1014038577/?raw=.196928&sid=
1251     //GikoSys.ParseURI(Result, Protocol, Host, Path, Document, Port, Bookmark);
1252     Result := 'http://' + FDownloadHost
1253     + '/test/offlaw.cgi/' + ParentBoard.BBSID + '/'
1254     + ChangeFileExt(FileName, '') + '/?raw=.0&sid=' + HttpEncode(SessionID);
1255     // Result := Format('%s://%s%s%s', [Protocol,
1256     // DownloadHost,
1257     // Path,
1258     // Document]);
1259     end;
1260     end;
1261    
1262     function TThreadItem.GetSendURL: string;
1263     begin
1264     Result := GikoSys.UrlToServer(ParentBoard.URL)
1265     + 'test/bbs.cgi';
1266     end;
1267    
1268     procedure TThreadItem.DeleteLogFile;
1269     begin
1270     DeleteFile(GetThreadFileName);
1271 h677 1.3 if FileExists(ChangeFileExt(GetThreadFileName,'.NG')) = true then
1272     DeleteFile(ChangeFileExt(GetThreadFileName,'.NG'));
1273 hi_ 1.1 FRoundDate := ZERO_DATE;
1274     FLastModified := ZERO_DATE;
1275     FSize := 0;
1276     FIsLogFile := False;
1277     FKokomade := -1;
1278     FNewReceive := 0;
1279     FNewArrival := False;
1280     FUnRead := False;
1281     FScrollTop := 0;
1282     FRound := False;
1283     FDownloadHost := '';
1284     FAgeSage := gasNone;
1285    
1286     FCount := 0;
1287     FNewResCount := 0;
1288     FRoundName := '';
1289     end;
1290    
1291     function TThreadItem.GetThreadFileName: string;
1292     begin
1293     Result := ParentBoard.ParentCategory.ParentBBS2ch.GetLogFolder
1294     + ParentBoard.BBSID + PATH_DELIM + FileName;
1295     end;
1296    
1297     procedure TThreadItem.SetLastModified(d: TDateTime);
1298     begin
1299     if FLastModified = d then Exit;
1300     FLastModified := d;
1301     if FUpdate and (ParentBoard <> nil) then
1302     ParentBoard.FModified := True;
1303     end;
1304    
1305     {procedure TThreadItem.SetRoundNo(i: Integer);
1306     begin
1307     if FRoundNo = i then Exit;
1308     FRoundNo := i;
1309     if FUpdate and (ParentBoard <> nil) then
1310     ParentBoard.FModified := True;
1311     end;}
1312    
1313     procedure TThreadItem.SetRound(b: Boolean);
1314     begin
1315     if b then
1316     RoundList.Add(Self)
1317     else
1318     RoundList.Delete(Self);
1319     if FRound = b then Exit;
1320     FRound := b;
1321     if FUpdate and (ParentBoard <> nil) then
1322     ParentBoard.FModified := True;
1323     end;
1324    
1325     procedure TThreadItem.SetRoundName(s: string);
1326     begin
1327     if FRoundName = s then Exit;
1328     FRoundName := s;
1329     if FUpdate and (ParentBoard <> nil) then
1330     ParentBoard.FModified := True;
1331     end;
1332    
1333     procedure TThreadItem.SetKokomade(i: Integer);
1334     begin
1335     if FKokomade = i then Exit;
1336     FKokomade := i;
1337     if FUpdate and (ParentBoard <> nil) then
1338     ParentBoard.FModified := True;
1339     end;
1340    
1341     procedure TThreadItem.SetUnRead(b: Boolean);
1342     begin
1343     if FUnRead = b then Exit;
1344     FUnRead := b;
1345     if FUpdate and (ParentBoard <> nil) then
1346     ParentBoard.FModified := True;
1347     end;
1348    
1349     procedure TThreadItem.SetScrollTop(i: Integer);
1350     begin
1351     if FScrollTop = i then Exit;
1352     FScrollTop := i;
1353     if FUpdate and (ParentBoard <> nil) then
1354     ParentBoard.FModified := True;
1355     end;
1356    
1357     procedure TThreadItem.BeginUpdate;
1358     begin
1359     FUpdate := False;
1360     end;
1361    
1362     procedure TThreadItem.EndUpdate;
1363     begin
1364     FUpdate := True;
1365 yoffy 1.5 end;
1366    
1367     function TThreadItem.GetURLWrapper: string;
1368     begin
1369    
1370     If FURL = '' Then
1371     Result := GikoSys.GetURL( ParentBoard.BBSID, FileName )
1372     Else
1373     Result := FURL;
1374    
1375 hi_ 1.1 end;
1376    
1377     {initialization
1378     BBS2ch := TBBS2ch.Create;
1379    
1380     finalization
1381     if BBS2ch <> nil then
1382     BBS2ch.Free;}
1383     end.
1384    

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