interface
uses
- Windows, SysUtils, Classes, ComCtrls, IniFiles, {HTTPApp,} YofUtils, IdGlobal,
- ExternalBoardManager, ExternalBoardPlugInMain, StrUtils, DateUtils;
+ Windows, SysUtils, Classes, ComCtrls, {HTTPApp,} YofUtils, IdGlobal,
+ ExternalBoardManager, ExternalBoardPlugInMain, StrUtils;
type
//\83\8a\83X\83g\82Ì\95\\8e¦\83A\83C\83e\83\80\91I\91ð
TBoard = class;
TThreadItem = class;
+
// BBS \82Ì\83\8b\81[\83g
TBBS = class(TList)
private
end;
// \83J\83e\83S\83\8a(\94Â URL \82Ì\83\8a\83X\83g)
-// TCategory = class(THashedStringList)
TCategory = class(TStringList)
private
FNo: Integer;
property NodeExpand: Boolean read FExpand write FExpand;
end;
-
+ //! \83X\83\8c\83b\83h\90\94\83J\83E\83\93\83g\8fð\8c\8f\95¶
+ TThreadCount = function(Item : TThreadItem): Boolean;
+
// \94Â(\83X\83\8c\83b\83h URL \82Ì\83\8a\83X\83g)
-// TBoard = class(THashedStringList)
TBoard = class(TStringList)
private
FContext: DWORD; // \83v\83\89\83O\83C\83\93\82ª\8e©\97R\82É\90Ý\92è\82µ\82Ä\82¢\82¢\92l(\8eå\82É\83C\83\93\83X\83^\83\93\83X\82ª\93ü\82é)
FURL: string; //\83{\81[\83hURL
FRound: Boolean; //\83X\83\8c\83b\83h\88ê\97\97\8f\84\89ñ\97\\96ñ
FRoundName: string; //\8f\84\89ñ\96¼
- //FRoundName: PChar; //\8f\84\89ñ\96¼
FRoundDate: TDateTime; //\83X\83\8c\83b\83h\88ê\97\97\82ð\8eæ\93¾\82µ\82½\93ú\8e\9e\81i\8f\84\89ñ\93ú\8e\9e\81j
FLastModified: TDateTime; //\83X\83\8c\83b\83h\88ê\97\97\82ª\8dX\90V\82³\82ê\82Ä\82¢\82é\93ú\8e\9e\81i\83T\81[\83o\91¤\93ú\8e\9e\81j
FLastGetTime: TDateTime; //\83X\83\8c\83b\83h\82Ü\82½\82Í\83X\83\8c\83b\83h\88ê\97\97\82ð\8dÅ\8cã\82É\8dX\90V\82µ\82½\93ú\8e\9e\81i\83T\81[\83o\91¤\93ú\8e\9e\81E\8f\91\82«\8d\9e\82Ý\8e\9e\82É\8eg\97p\82·\82é\81j
function GetUserThreadCount: Integer;
function GetNewThread(Index: Integer): TThreadItem;
function GetLogThread(Index: Integer): TThreadItem; overload;
- function GetLogThread(Index: Integer; Base: Integer): TThreadItem; overload;
function GetArchiveThread(Index: Integer): TThreadItem;
function GetLiveThread(Index: Integer): TThreadItem;
function GetUserThread(Index: Integer): TThreadItem;
-
+ function GetThreadCount(func :TThreadCount ): Integer;
+ function GetThread(func :TThreadCount;const Index :Integer ): TThreadItem;
procedure BeginUpdate;
procedure EndUpdate;
property NodeExpand: Boolean read FExpand write FExpand;
public
constructor Create(const inPlugIn : TBoardPlugIn; const inBoard : TBoard; inURL : string ); overload;
constructor Create(const inPlugIn : TBoardPlugIn; const inBoard : TBoard;
- inURL : string; inExist: Boolean; const inFilename: string ); overload;
+ const inURL : string; inExist: Boolean; const inFilename: string ); overload;
destructor Destroy; override;
property BoardPlugIn : TBoardPlugIn read FBoardPlugIn write FBoardPlugIn;
end;
+ // \93Á\8eê\97p\93r\97pTBoard
+ TSpecialBoard = class(TBoard)
+ public
+ function Add(item: TThreadItem): integer; overload;
+ procedure Clear; overload;
+ end;
function BBSsFindBoardFromBBSID( inBBSID : string ) : TBoard;
function BBSsFindBoardFromURL( inURL : string ) : TBoard;
function BBSsFindThreadFromURL(const inURL : string ) : TThreadItem;
function ConvertDateTimeString( inDateTimeString : string) : TDateTime;
+ procedure DestorySpecialBBS( inBBS : TBBS );
+
var
BBSs : array of TBBS;
BoardGroups : array of TBoardGroup;
+ SpecialBBS : TBBS;
+ SpecialBoard: TSpecialBoard;
implementation
uses
- GikoSystem, RoundData, MojuUtils;
+ GikoSystem, RoundData, MojuUtils, DateUtils, IniFiles;
const
BBS2CH_NAME: string = '\82Q\82¿\82á\82ñ\82Ë\82é';
HEADTXT_FILENAME: string = 'head.html';
//DEFAULT_LIST_COUNT: Integer = 100;
-// COLUMN_CATEGORY: array[0..0] of string = ('\83J\83e\83S\83\8a\96¼');
-// COLUMN_BOARD: array[0..3] of string = ('\94Â\96¼', '\8eæ\93¾\90\94', '\8f\84\89ñ\97\\96ñ', '\91O\89ñ\8f\84\89ñ\93ú\8e\9e');
-// COLUMN_THREADITEM: array[0..3] of string = ('\83X\83\8c\83b\83h\96¼', '\83J\83E\83\93\83g', '\8f\84\89ñ\97\\96ñ', '\91O\89ñ\8f\84\89ñ\93ú\8e\9e');
+//! \83\8d\83O\82ð\8e\9d\82Á\82Ä\82¢\82é\82È\82ç\90^\82ð\95Ô\82·
+function CountLog(Item: TThreadItem): Boolean;
+begin
+ Result := Item.IsLogFile;
+end;
+//! \90V\92\85\82È\82ç\90^\82ð\95Ô\82·
+function CountNew(Item: TThreadItem): Boolean;
+begin
+ Result := Item.NewArrival;
+end;
+//! DAT\97\8e\82¿\82È\82ç\90^\82ð\95Ô\82·
+function CountDat(Item: TThreadItem): Boolean;
+begin
+ Result := (Item.AgeSage = gasArch);
+end;
+//! \90¶\91¶\83X\83\8c\82È\82ç\90^\82ð\95Ô\82·
+function CountLive(Item: TThreadItem): Boolean;
+begin
+ Result := (Item.AgeSage <> gasArch);
+end;
+
+//! \8fí\82É\90^
+function CountAll(Item: TThreadItem): Boolean;
+begin
+ Result := True;
+end;
+
+
// BBSID \82ð\97p\82¢\82é 2 \82¿\82á\82ñ\82Ë\82é\82Ì\82Ý\92T\82µ\8fo\82µ\82Ü\82·
// BBSID \82Ì\8eg\97p\82Í\8bÉ\97Í\94ð\82¯\82Ä\82\82¾\82³\82¢\81B
end;
end;
+{!
+\brief \93Á\8eê\97p\93rBBS\8dí\8f\9c
+\param bbs \8dí\8f\9c\82·\82é\93Á\8eê\97p\93rBBS
+}
+procedure DestorySpecialBBS( inBBS : TBBS );
+var
+ sCategory : TCategory;
+ sBoard : TSpecialBoard;
+begin
+ if inBBS <> nil then begin
+ sCategory := inBBS.Items[0];
+ if sCategory <> nil then begin
+ sBoard := TSpecialBoard(sCategory.Items[0]);
+ if sBoard <> nil then begin
+ sBoard.Modified := False;
+ sBoard.Clear;
+ FreeAndNil(sBoard);
+ end;
+ end;
+ FreeAndNil(inBBS);
+ end;
+end;
(*************************************************************************
*\8b@\94\\96¼\81FTBBS\83R\83\93\83X\83g\83\89\83N\83^
// Result := inDateTimeString;
end;
-// \83T\83u\83W\83F\83N\83gURL\8eæ\93¾
+//! \83T\83u\83W\83F\83N\83gURL\8eæ\93¾
function TBoard.GetReadCgiURL: string;
begin
- //Result := URL + SUBJECT_FILENAME;
- //Result := GikoSys.UrlToServer(URL)
- // + 'test/read.cgi/' + BBSID + '/?raw=0.0';
Result := URL + SUBJECT_FILENAME;
end;
-// \83T\83u\83W\83F\83N\83g\83t\83@\83C\83\8b\96¼\8eæ\93¾\81i\83p\83X\81{\83t\83@\83C\83\8b\96¼\81j
+//! \83T\83u\83W\83F\83N\83g\83t\83@\83C\83\8b\96¼\8eæ\93¾\81i\83p\83X\81{\83t\83@\83C\83\8b\96¼\81j
function TBoard.GetSubjectFileName: string;
begin
if Length( FilePath ) > 0 then
+ BBS2CH_LOG_FOLDER + PATH_DELIM + BBSID + PATH_DELIM + SUBJECT_FILENAME;
end;
-// \83C\83\93\83f\83b\83N\83X\83t\83@\83C\83\8b\96¼(folder.idx)\8eæ\93¾\81i\83p\83X\81{\83t\83@\83C\83\8b\96¼\81j
+//! \83C\83\93\83f\83b\83N\83X\83t\83@\83C\83\8b\96¼(folder.idx)\8eæ\93¾\81i\83p\83X\81{\83t\83@\83C\83\8b\96¼\81j
function TBoard.GetFolderIndexFileName: string;
begin
if Length( FilePath ) > 0 then
Result := GikoSys.Setting.LogFolderP
+ BBS2CH_LOG_FOLDER + PATH_DELIM + BBSID + PATH_DELIM + FOLDER_INDEX_FILENAME;
end;
-//SETTING.TXT\82Ì\83t\83@\83C\83\8b\96¼\8eæ\93¾
+//! SETTING.TXT\82Ì\83t\83@\83C\83\8b\96¼\8eæ\93¾
function TBoard.GetSETTINGTXTFileName: string;
begin
if Length( FilePath ) > 0 then
// \83X\83\8c\97§\82Ä\91\97\90MURL
function TBoard.GetSendURL: string;
-//var
-// Protocol, Host, Path, Document, Port, Bookmark : string;
begin
Result := GikoSys.UrlToServer(URL);
- //GikoSys.ParseURI( URL, Protocol,Host, Path, Document, Port, Bookmark );
- //if GikoSys.Is2chHost(Host) then
if Self.Is2ch then
Result := Result + 'test/bbs.cgi'
else
if FUpdate then
FModified := True;
end;
-{
-procedure TBoard.SetRoundName(s: PChar);
-begin
- if FRoundName = s then Exit;
- FRoundName := s;
- if FUpdate then
- FModified := True;
-end;
-}
+
procedure TBoard.SetLastModified(d: TDateTime);
begin
if FLastModified = d then Exit;
if FUpdate then
FModified := True;
end;
-
-function TBoard.GetNewThreadCount: Integer;
+//! func\82Ì\8fð\8c\8f\82É\88ê\92v\82·\82é\83X\83\8c\83b\83h\82Ì\90\94\82ð\95Ô\82·
+function TBoard.GetThreadCount(func :TThreadCount ): Integer;
var
i: Integer;
begin
if Length( ParentCategory.ParenTBBS.ShortSelectText ) = 0 then
begin
for i := 0 to Count - 1 do begin
- if Items[i].NewArrival then
+ if func(Items[i]) then
inc(Result);
end;
end else begin
for i := 0 to Count - 1 do begin
- if Items[i].NewArrival then
+ if func(Items[i]) then
begin
if Items[i].ShortTitle = '' then
Items[i].ShortTitle := CustomStringReplace(ZenToHan(Items[i].Title), ' ', '');
end;
end;
end;
-
+//! \90V\92\85\83X\83\8c\83b\83h\82Ì\90\94\82ð\8eæ\93¾\82·\82é
+function TBoard.GetNewThreadCount: Integer;
+begin
+ Result := GetThreadCount(CountNew);
+end;
+//! \83\8d\83O\97L\82è\83X\83\8c\83b\83h\82Ì\90\94\82ð\8eæ\93¾\82·\82é
function TBoard.GetLogThreadCount: Integer;
-var
- i: Integer;
begin
- Result := 0;
- if Length( ParentCategory.ParenTBBS.ShortSelectText ) = 0 then
- begin
- for i := 0 to Count - 1 do begin
- if Items[i].IsLogFile then
- inc(Result);
- end;
- end else begin
- for i := 0 to Count - 1 do begin
- if Items[i].IsLogFile then
- begin
- if Items[i].ShortTitle = '' then
- Items[i].ShortTitle := CustomStringReplace(ZenToHan(Items[i].Title), ' ', '');
- if AnsiPos(ParentCategory.ParenTBBS.ShortSelectText, Items[i].ShortTitle) <> 0 then
- inc(Result);
- end;
- end;
- end;
+ Result := GetThreadCount(CountLog);
end;
-
+//! \8di\8d\9e\82Ý\8fð\8c\8f\82É\88ê\92v\82·\82é\83X\83\8c\83b\83h\82Ì\90\94\82ð\8eæ\93¾\82·\82é
function TBoard.GetUserThreadCount: Integer;
-var
- i: Integer;
begin
- Result := 0;
- if Length( ParentCategory.ParenTBBS.ShortSelectText ) = 0 then
- Result := Count
- else
- for i := 0 to Count - 1 do begin
- if Items[i].ShortTitle = '' then
- Items[i].ShortTitle := CustomStringReplace(ZenToHan(Items[i].Title), ' ', '');
- if AnsiPos(ParentCategory.ParenTBBS.ShortSelectText, Items[i].ShortTitle) <> 0 then
- inc(Result);
- end;
+ Result := GetThreadCount(CountAll);
end;
+//! DAT\97\8e\82¿\83X\83\8c\83b\83h\82Ì\90\94\82ð\8eæ\93¾\82·\82é
function TBoard.GetArchiveThreadCount: Integer;
-var
- i: Integer;
begin
- Result := 0;
- if Length( ParentCategory.ParenTBBS.ShortSelectText ) = 0 then
- begin
- for i := 0 to Count - 1 do begin
- if Items[i].AgeSage = gasArch then
- inc(Result);
- end;
- end else begin
- for i := 0 to Count - 1 do begin
- if Items[i].AgeSage = gasArch then
- begin
- if Items[i].ShortTitle = '' then
- Items[i].ShortTitle := CustomStringReplace(ZenToHan(Items[i].Title), ' ', '');
- if AnsiPos(ParentCategory.ParenTBBS.ShortSelectText, Items[i].ShortTitle) <> 0 then
- inc(Result);
- end;
- end;
- end;
+ Result := GetThreadCount(CountDat);
end;
-
+//! \90¶\91¶\83X\83\8c\83b\83h\82Ì\90\94\82ð\8eæ\93¾\82·\82é
function TBoard.GetLiveThreadCount: Integer;
-var
- i: Integer;
begin
- Result := 0;
- if Length( ParentCategory.ParenTBBS.ShortSelectText ) = 0 then
- begin
- for i := 0 to Count - 1 do begin
- if Items[i].AgeSage <> gasArch then
- inc(Result);
- end;
- end else begin
- for i := 0 to Count - 1 do begin
- if Items[i].AgeSage <> gasArch then
- begin
- if Items[i].ShortTitle = '' then
- Items[i].ShortTitle := CustomStringReplace(ZenToHan(Items[i].Title), ' ', '');
- if AnsiPos(ParentCategory.ParenTBBS.ShortSelectText, Items[i].ShortTitle) <> 0 then
- inc(Result);
- end;
- end;
- end;
+ Result := GetThreadCount(CountLive);
end;
-function TBoard.GetArchiveThread(Index: Integer): TThreadItem;
+//! func\82Ì\8fð\8c\8f\82É\93K\8d\87\82·\82éIndex\94Ô\96Ú\82Ì\83X\83\8c\83b\83h\82ð\8eæ\93¾\82·\82é
+function TBoard.GetThread(func :TThreadCount;const Index :Integer ): TThreadItem;
var
i: Integer;
Cnt: Integer;
if Length( ParentCategory.ParenTBBS.ShortSelectText ) = 0 then
begin
for i := 0 to Count - 1 do begin
- if Items[i].AgeSage = gasArch then
- begin
+ if func(Items[i]) then begin
if Index = Cnt then begin
Result := Items[i];
Exit;
end;
end else begin
for i := 0 to Count - 1 do begin
- if Items[i].AgeSage = gasArch then
- begin
- if Items[i].ShortTitle = '' then
+ if func(Items[i]) then begin
+ if Length(Items[i].ShortTitle) = 0 then
Items[i].ShortTitle := CustomStringReplace(ZenToHan(Items[i].Title), ' ', '');
if AnsiPos(ParentCategory.ParenTBBS.ShortSelectText, Items[i].ShortTitle) <> 0 then begin
if Index = Cnt then begin
end;
end;
end;
+//! DAT\97\8e\82¿\83X\83\8c\83b\83h\82ÅIndex\94Ô\96Ú\82Ì\83X\83\8c\83b\83h\82ð\8eæ\93¾\82·\82é
+function TBoard.GetArchiveThread(Index: Integer): TThreadItem;
+begin
+ Result := GetThread(CountDat, Index);
+end;
+//! \90¶\91¶\83X\83\8c\83b\83h\82ÅIndex\94Ô\96Ú\82Ì\83X\83\8c\83b\83h\82ð\8eæ\93¾\82·\82é
function TBoard.GetLiveThread(Index: Integer): TThreadItem;
-var
- i: Integer;
- Cnt: Integer;
begin
- Result := nil;
- Cnt := 0;
- if Length( ParentCategory.ParenTBBS.ShortSelectText ) = 0 then
- begin
- for i := 0 to Count - 1 do begin
- if Items[i].AgeSage <> gasArch then
- begin
- if Index = Cnt then begin
- Result := Items[i];
- Exit;
- end;
- inc(Cnt);
- end;
- end;
- end else begin
- for i := 0 to Count - 1 do begin
- if Items[i].AgeSage <> gasArch then
- begin
- if Items[i].ShortTitle = '' then
- Items[i].ShortTitle := CustomStringReplace(ZenToHan(Items[i].Title), ' ', '');
- if AnsiPos(ParentCategory.ParenTBBS.ShortSelectText, Items[i].ShortTitle) <> 0 then begin
- if Index = Cnt then begin
- Result := Items[i];
- Exit;
- end;
- inc(Cnt);
- end;
- end;
- end;
- end;
+ Result := GetThread(CountLive, Index);
end;
+//! \90V\92\85\83X\83\8c\83b\83h\82ÅIndex\94Ô\96Ú\82Ì\83X\83\8c\83b\83h\82ð\8eæ\93¾\82·\82é
function TBoard.GetNewThread(Index: Integer): TThreadItem;
-var
- i: Integer;
- Cnt: Integer;
begin
- Result := nil;
- Cnt := 0;
- if Length( ParentCategory.ParenTBBS.ShortSelectText ) = 0 then
- begin
- for i := 0 to Count - 1 do begin
- if Items[i].NewArrival then
- begin
- if Index = Cnt then begin
- Result := Items[i];
- Exit;
- end;
- inc(Cnt);
- end;
- end;
- end else begin
- for i := 0 to Count - 1 do begin
- if Items[i].NewArrival then
- begin
- if Items[i].ShortTitle = '' then
- Items[i].ShortTitle := CustomStringReplace(ZenToHan(Items[i].Title), ' ', '');
- if AnsiPos(ParentCategory.ParenTBBS.ShortSelectText, Items[i].ShortTitle) <> 0 then begin
- if Index = Cnt then begin
- Result := Items[i];
- Exit;
- end;
- inc(Cnt);
- end;
- end;
- end;
- end;
+ Result := GetThread(CountNew, Index);
end;
-
+//! Log\82 \82è\83X\83\8c\83b\83h\82ÌIndex\94Ô\96Ú\82Ì\83X\83\8c\83b\83h\82ð\8eæ\93¾\82·\82é
function TBoard.GetLogThread(Index: Integer): TThreadItem;
-var
- i: Integer;
- Cnt: Integer;
begin
- Cnt := 0;
- if Length( ParentCategory.ParenTBBS.ShortSelectText ) = 0 then
- begin
- for i := 0 to Count - 1 do begin
- if Items[i].IsLogFile then
- begin
- if Index = Cnt then begin
- Result := Items[i];
- Exit;
- end;
- inc(Cnt);
- end;
- end;
- end else begin
- for i := 0 to Count - 1 do begin
- if Items[i].IsLogFile then
- begin
- if Items[i].ShortTitle = '' then
- Items[i].ShortTitle := ZenToHan(Items[i].Title);
- if AnsiPos(ParentCategory.ParenTBBS.ShortSelectText, Items[i].ShortTitle) <> 0 then begin
- if Index = Cnt then begin
- Result := Items[i];
- Exit;
- end;
- inc(Cnt);
- end;
- end;
- end;
- end;
- Result := nil;
-end;
-function TBoard.GetLogThread(Index: Integer; Base: Integer): TThreadItem;
-var
- i: Integer;
- Cnt: Integer;
-begin
- Cnt := 0;
- if Length( ParentCategory.ParenTBBS.ShortSelectText ) = 0 then
- begin
- for i := Base to Count - 1 do begin
- if Items[i].IsLogFile then
- begin
- if Index = Cnt then begin
- Result := Items[i];
- Exit;
- end;
- inc(Cnt);
- end;
- end;
- end else begin
- for i := Base to Count - 1 do begin
- if Items[i].IsLogFile then
- begin
- if Items[i].ShortTitle = '' then
- Items[i].ShortTitle := ZenToHan(Items[i].Title);
- if AnsiPos(ParentCategory.ParenTBBS.ShortSelectText, Items[i].ShortTitle) <> 0 then begin
- if Index = Cnt then begin
- Result := Items[i];
- Exit;
- end;
- inc(Cnt);
- end;
- end;
- end;
- end;
- Result := nil;
+ Result := GetThread(CountLog, Index);
end;
+//! \8di\8d\9e\82Ý\82ÅIndex\94Ô\96Ú\82Ì\83X\83\8c\83b\83h\82ð\8eæ\93¾\82·\82é
function TBoard.GetUserThread(Index: Integer): TThreadItem;
-var
- i: Integer;
- Cnt: Integer;
begin
- Result := nil;
- Cnt := 0;
- if Length( ParentCategory.ParenTBBS.ShortSelectText ) = 0 then
- begin
- for i := 0 to Count - 1 do begin
- if Index = Cnt then
- begin
- Result := Items[ i ];
- Exit;
- end;
- inc( Cnt );
- end;
- end else begin
- for i := 0 to Count - 1 do begin
- if Items[i].ShortTitle = '' then
- Items[i].ShortTitle := CustomStringReplace(ZenToHan(Items[i].Title), ' ', '');
- if AnsiPos(ParentCategory.ParenTBBS.ShortSelectText, Items[i].ShortTitle) <> 0 then begin
- if Index = Cnt then begin
- Result := Items[i];
- Exit;
- end;
- inc(Cnt);
- end;
- end;
- end;
+ Result := GetThread(CountAll, Index);
end;
procedure TBoard.BeginUpdate;
FUpdate := True;
end;
-{class function TBoard.GetColumnName(Index: Integer): string;
-begin
- Result := COLUMN_THREADITEM[Index];
-end;
-
-class function TBoard.GetColumnCount: Integer;
-begin
- Result := Length(COLUMN_THREADITEM);
-end;}
-
//constructor TThreadItem.Create(AOwner: TComponent);
procedure TThreadItem.Init;
begin
constructor TThreadItem.Create(
const inPlugIn : TBoardPlugIn;
const inBoard : TBoard;
- inURL : string;
+ const inURL : string;
inExist: Boolean;
const inFilename: string
);
// dat \82Ì\95Û\91¶\83p\83X\82ð\90Ý\92è
FileName := inFilename;
IsLogFile := inExist;
- URL := GikoSys.Get2chBrowsableThreadURL( inURL );
+ URL := inURL;
end else begin
// \83v\83\89\83O\83C\83\93\82É TThreadItem \82ª\8dì\90¬\82³\82ê\82½\82±\82Æ\82ð\93`\82¦\82é
inPlugIn.CreateThreadItem( DWORD( Self ) );
end;
-// *************************************************************************
-// \8aO\95\94\94Â\83v\83\89\83O\83C\83\93\82ª\8eg\97p\89Â\94\\82©
-// *************************************************************************
-{
-function TThreadItem.IsBoardPlugInAvailable : Boolean;
-begin
-
- repeat
- if BoardPlugIn = nil then
- Break;
-
- if not Assigned( Pointer( BoardPlugIn.Module ) ) then
- Break;
-
- Result := True;
- Exit;
- until True;
-
- Result := False;
-
-end;
-}
function TThreadItem.GetDatURL: string;
var
Protocol, Host, Path, Document, Port, Bookmark: string;
end;
end;
-{function TThreadItem.GetOldDatgzURL: string;
-var
- Protocol, Host, Path, Document, Port, Bookmark: string;
-begin
- Result := Format('%s%s/%.3s/%s.gz', [ParentBoard.URL,
- 'kako',
- FileName,
- FileName]);
- if FDownloadHost <> '' then begin
- ParseURI(Result, Protocol, Host, Path, Document, Port, Bookmark);
- Result := Format('%s://%s%s%s', [Protocol,
- DownloadHost,
- Path,
- Document]);
-
- end;
-end;}
-
function TThreadItem.GetOfflawCgiURL(const SessionID: string): string;
-//var
-// Protocol, Host, Path, Document, Port, Bookmark: string;
begin
-// Result := GikoSys.UrlToServer(ParentBoard.URL)
-// + 'test/offlaw.cgi/' + ParentBoard.BBSID + '/'
-// + ChangeFileExt(FileName, '') + '/?raw=.0&sid=' + HttpEncode(SessionID);
if FDownloadHost = '' then begin
Result := GikoSys.UrlToServer(ParentBoard.URL)
+ 'test/offlaw.cgi/' + ParentBoard.BBSID + '/'
Result := 'http://' + FDownloadHost
+ '/test/offlaw.cgi/' + ParentBoard.BBSID + '/'
+ ChangeFileExt(FileName, '') + '/?raw=.0&sid=' + HttpEncode(SessionID);
-// Result := Format('%s://%s%s%s', [Protocol,
-// DownloadHost,
-// Path,
-// Document]);
end;
end;
ParentBoard.FModified := True;
end;
-{procedure TThreadItem.SetRoundNo(i: Integer);
-begin
- if FRoundNo = i then Exit;
- FRoundNo := i;
- if FUpdate and (ParentBoard <> nil) then
- ParentBoard.FModified := True;
-end;}
-
procedure TThreadItem.SetRound(b: Boolean);
begin
if b then
if FUpdate and (ParentBoard <> nil) then
ParentBoard.FModified := True;
end;
-{
-procedure TThreadItem.SetRoundName(const s: PChar);
-begin
- if FRoundName = s then Exit;
- FRoundName := s;
- if FUpdate and (ParentBoard <> nil) then
- ParentBoard.FModified := True;
-end;
-}
+
+
procedure TThreadItem.SetKokomade(i: Integer);
begin
if FKokomade = i then Exit;
FUpdate := True;
end;
-{initialization
- BBS2ch := TBBS.Create;
-
-finalization
- if BBS2ch <> nil then
- BBS2ch.Free;}
function TThreadItem.GetCreateDate: TDateTime;
-var
- unixtime: Int64;
- tmp: string;
begin
// \83t\83@\83C\83\8b\96¼\82©\82ç\83X\83\8c\8dì\90¬\93ú\8e\9e\82ð\8b\81\82ß\82é
try
Result := ZERO_DATE
else begin
// \83\8d\83O\83t\83@\83C\83\8b\82Ì\8ag\92£\8eq\82ð\82Í\82¸\82µ\82½\82à\82Ì\82ª\83X\83\8c\8dì\90¬\93ú\8e\9e
- tmp := ChangeFileExt(FFileName, '');
- if AnsiPos('_', tmp) <> 0 then
- if AnsiPos('_', tmp) > 9 then
- tmp := Copy(tmp, 1, AnsiPos('_', tmp)-1)
- else
- Delete(tmp, AnsiPos('_', tmp), 1);
-
- if ( Length(tmp) = 9) and ( tmp[1] = '0' ) then
- Insert('1', tmp, 1);
-
- unixtime := StrToInt64Def(tmp, ZERO_DATE);
- Result := UnixToDateTime(unixtime) + OffsetFromUTC;
+ Result := GikoSys.GetCreateDateFromName(FFileName);
if GikoSys.Setting.FutureThread then begin
if CompareDateTime(Result, Now) = 1 then
Result := ZERO_DATE;
end;
+function TSpecialBoard.Add(item: TThreadItem): integer;
+begin
+ Result := inherited AddObject(Item.URL, Item);
+end;
+
+procedure TSpecialBoard.Clear;
+var
+ i: integer;
+begin
+ for i := Count - 1 downto 0 do
+ DeleteList(i);
+ Capacity := 0;
+end;
end.