{HttpApp,} URLMon, IdGlobal, IdURI, {Masks,}
Setting, BoardGroup, gzip, Dolib, bmRegExp, AbonUnit,
ExternalBoardManager, ExternalBoardPlugInMain,
- GikoBayesian;
+ GikoBayesian, GikoMessage;
type
TVerResourceKey = (
FNoParam: Boolean; //!< \83\8c\83X\94Ô\83p\83\89\83\81\81[\83^\82È\82µ
end;
- //! MessageList
- TGikoMessageListType = (gmLogout, gmLogin, gmForceLogin, gmSureItiran,
- gmUnKnown, gmSureSyutoku, gmSureDiff, gmNotMod, gmAbort, gmError,
- gmNewRes, gmNewSure, gmResError, gmSureError);
-
TGikoSys = class(TObject)
private
{ Private \90é\8c¾ }
FResRange : Longint;
FBayesian : TGikoBayesian; //!< \83x\83C\83W\83A\83\93\83t\83B\83\8b\83^
FVersion : String; //!< \83t\83@\83C\83\8b\83o\81[\83W\83\87\83\93
-// FExitWrite: TStringList;
-// function StrToFloatDef(s: string; Default: Double): Double;
+ FGikoMessage: TGikoMessage;
+ //! \82 \82é\83Z\83p\83\8c\81[\83^\82Å\8bæ\90Ø\82ç\82ê\82½\95¶\8e\9a\97ñ\82©\82ç\82\8e\94Ô\96Ú\82Ì\95¶\8e\9a\97ñ\82ð\8eæ\82è\8fo\82·
+ function ChooseString(const Text, Separator: string; Index: integer): string;
+ //! \88ê\8e\9e\83t\83@\83C\83\8b\82©\82ç\82Ì\95\9c\8b\8c
+ procedure RestoreThreadData(Board: TBoard);
public
{ Public \90é\8c¾ }
FAbon : TAbon;
function GetMainKeyFileName : String;
function GetEditorKeyFileName: String;
+ function GetInputAssistFileName: String;
procedure ReadSubjectFile(Board: TBoard);
procedure CreateThreadDat(Board: TBoard);
procedure WriteThreadDat(Board: TBoard);
procedure GetPopupResNumber(URL : string; var stRes, endRes : Int64);
- //! Samba24\82Ì\83t\83@\83C\83\8b\82ª\91¶\8dÝ\82·\82é\82©\81B\91¶\8dÝ\82µ\82È\82¢\8fê\8d\87\81Adefault\83t\83@\83C\83\8b\82ðrename\82·\82é
- procedure SambaFileExists();
-
property Bayesian : TGikoBayesian read FBayesian write FBayesian;
- function GetSameIDResAnchor(const AID : string; ThreadItem: TThreadItem; limited: boolean):string; overload;
- function GetSameIDResAnchor(AIDNum : Integer; ThreadItem: TThreadItem; limited: boolean):string; overload;
+ function GetSameIDResAnchor(const AID : string; ThreadItem: TThreadItem; limited: Integer):string; overload;
+ function GetSameIDResAnchor(AIDNum : Integer; ThreadItem: TThreadItem; limited: Integer):string; overload;
procedure GetSameIDRes(const AID : string; ThreadItem: TThreadItem;var body: TStringList); overload;
procedure GetSameIDRes(AIDNum : Integer; ThreadItem: TThreadItem;var body: TStringList); overload;
function GetSameIDResCount(const AID : string; ThreadItem: TThreadItem):Integer; overload;
//! IE\82Ì\83o\81[\83W\83\87\83\93\8fî\95ñ\82Ì\8eæ\93¾
function GetIEVersion: string;
function SetUserOptionalStyle(): string;
-
+ //! \83M\83R\83i\83r\82Ì\83\81\83b\83Z\81[\83W\82ð\90Ý\92è\82·\82é
+ procedure SetGikoMessage;
+ //! \83M\83R\83i\83r\82Ì\83\81\83b\83Z\81[\83W\82ð\8eæ\93¾\82·\82é
+ function GetGikoMessage(MesType: TGikoMessageListType): String;
+ //! GMT\82Ì\8e\9e\8d\8f\82ðTDateTime\82É\95Ï\8a·\82·\82é
+ function DateStrToDateTime(const DateStr: string): TDateTime;
+ //! User32.dll\82ª\97\98\97p\82Å\82«\82é\82©
+ function CanUser32DLL: Boolean;
+ //! OE\88ø\97p\95\84\8eæ\93¾
+ function GetOEIndentChar : string;
+ //! \92u\8a·\90Ý\92è\83t\83@\83C\83\8b\8eæ\93¾
+ function GetReplaceFileName: String;
end;
var
ZERO_DATE: Integer = 25569;
BETA_VERSION_NAME_E = 'beta';
BETA_VERSION_NAME_J = 'ÊÞÀ';
- BETA_VERSION = 51;
+ BETA_VERSION = 55;
BETA_VERSION_BUILD = ''; //!< debug\94Å\82È\82Ç
APP_NAME = 'gikoNavi';
BE_PHP_URL = 'http://be.2ch.net/test/p.php?i=';
uses
Giko, RoundData, Favorite, Registry, HTMLCreate, MojuUtils, Sort, YofUtils,
- IniFiles;
+ IniFiles, DateUtils;
const
FOLDER_INDEX_VERSION = '1.01';
FVersion := Trim(GetVersionInfo(vrFileVersion));
FBayesian := TGikoBayesian.Create;
//FBoardURLList := TStringList.Create;
+ //\83\81\83b\83Z\81[\83W\82Ì\8dì\90¬
+ FGikoMessage := TGikoMessage.Create;
end;
// *************************************************************************
FDolib.Free;
FAbon.Free;
FSelectResFilter.Free;
+ FGikoMessage.Free;
//FBoardURLList.Free;
//\83e\83\93\83|\83\89\83\8aHTML\82ð\8dí\8f\9c
FileList := TStringList.Create;
\brief \95¶\8e\9a\97ñ\90\94\8e\9a\83`\83F\83b\83N
\param s \83`\83F\83b\83N\82·\82é\95¶\8e\9a\97ñ
\return s \82ª\95\84\8d\86\95t\82«\90®\90\94\82Æ\82µ\82Ä\94F\8e¯\89Â\94\\82È\82ç True
-\todo MonaUtils.IsNumeric() \82ª\93¯\93\99\82Ì\8b@\94\\82ð\95Û\8e\9d\82µ\82Ä\82¢\82é
}
{$HINTS OFF}
function TGikoSys.IsNumeric(s: string): boolean;
\brief \95¶\8e\9a\97ñ\95\82\93®\8f¬\90\94\93_\90\94\8e\9a\83`\83F\83b\83N
\param s \83`\83F\83b\83N\82·\82é\95¶\8e\9a\97ñ
\return s \82ª\95\84\8d\86\95t\82«\95\82\93®\8f¬\90\94\82Æ\82µ\82Ä\94F\8e¯\89Â\94\\82È\82ç True
-\todo MonaUtils.IsFloat() \82ª\93¯\93\99\82Ì\8b@\94\\82ð\95Û\8e\9d\82µ\82Ä\82¢\82é
}
function TGikoSys.IsFloat(s: string): boolean;
var
ThreadItem: TThreadItem;
FileName: string;
FileList: TStringList;
- TmpFileList: TStringList;
Index: Integer;
sl: TStringList;
i: Integer;
Rec: TIndexRec;
UnRead: Integer;
- ini: TMemIniFile;
ResRec: TResRec;
-// RoundItem: TRoundItem;
-// idx: Integer;
usePlugIn : Boolean;
- tmpStr: string;
BoardPath : String;
server : String;
islog : Boolean;
- //protocol, host, path, document, port, bookmark : string;
- //is2ch : Boolean;
+ urlHead: String;
{*
FavoThreadItem : TFavoriteThreadItem;
Node: TTreeNode;
Exit;
Board.Clear;
UnRead := 0;
- //is2ch := false;
usePlugIn := Board.IsBoardPlugInAvailable;
server := UrlToServer( Board.URL );
- //is2ch := Is2chHost(server);
FileName := Board.GetFolderIndexFileName;
FileList := TStringList.Create;
FileList.Sorted := True;
FileList.BeginUpdate;
- TmpFileList := TStringList.Create;
- TmpFileList.Sorted := True;
- TmpFileList.BeginUpdate;
//IsLogFile\97pDAT\83t\83@\83C\83\8b\83\8a\83X\83g
GetFileList(ExtractFileDir(Board.GetFolderIndexFileName), '*.dat', FileList, False);
FileList.EndUpdate;
- //\91O\89ñ\88Ù\8fí\8fI\97¹\8e\9e\97pTmp\83t\83@\83C\83\8b\83\8a\83X\83g
- GetFileList(ExtractFileDir(Board.GetFolderIndexFileName), '*.tmp', TmpFileList, False);
- TmpFileList.EndUpdate;
// \8fd\95¡\82ð\96h\82®
Board.BeginUpdate;
try
if FileExists(FileName) then begin
sl.LoadFromFile(FileName);
-
+ // \83X\83\8c\83b\83h\82Å\8b¤\92Ê\82ÌURL\95\94
+ if Board.is2ch then begin
+ urlHead := server + 'test/read.cgi/' + Board.BBSID + '/';
+ end else begin
+ urlHead := server + 'test/read.cgi?bbs=' + Board.BBSID + '&key=';
+ end;
//\82Q\8ds\96Ú\82©\82ç\81i\82P\8ds\96Ú\82Í\83o\81[\83W\83\87\83\93\81j
for i := sl.Count - 1 downto 1 do begin
Rec := ParseIndexLine(sl[i]);
ThreadItem := TThreadItem.Create(
nil,
Board,
- server + 'test/read.cgi/' + Board.BBSID + '/' + ChangeFileExt( Rec.FFileName, '' ) + '/l50',
+ urlHead + ChangeFileExt( Rec.FFileName, '' ) + '/l50',
islog,
Rec.FFileName
);
ThreadItem := TThreadItem.Create(
nil,
Board,
- server + 'test/read.cgi?bbs=' + Board.BBSID + '&key=' + ChangeFileExt( Rec.FFileName, '' ) + '&ls=50',
+ urlHead + ChangeFileExt( Rec.FFileName, '' ) + '&ls=50',
islog,
Rec.FFileName
);
ThreadItem.No := Rec.FNo;
ThreadItem.FileName := Rec.FFileName;
- ThreadItem.Title := Rec.FTitle;
- //ThreadItem.ShortTitle := CustomStringReplace(ZenToHan(ThreadItem.Title), ' ', '');
+ ThreadItem.Title := MojuUtils.UnSanitize(Rec.FTitle);
ThreadItem.Count := Rec.FCount;
ThreadItem.Size := Rec.FSize;
-// ThreadItem.RoundNo := Rec.FRoundNo;
ThreadItem.RoundDate := Rec.FRoundDate;
ThreadItem.LastModified := Rec.FLastModified;
ThreadItem.Kokomade := Rec.FKokomade;
ThreadItem.NewReceive := Rec.FNewReceive;
-// ThreadItem.Round := Rec.FRound;
ThreadItem.UnRead := Rec.FUnRead;
ThreadItem.ScrollTop := Rec.FScrollTop;
ThreadItem.AllResCount := Rec.FAllResCount;
Node := FavoriteDM.TreeView.Items.AddChildObject( FavoriteDM.TreeView.Items.Item[0], ThreadItem.Title, FavoThreadItem);
*}
- {//\8f\84\89ñ\83\8a\83X\83g\82É\91¶\8dÝ\82µ\82½\82ç\8f\84\89ñ\83t\83\89\83O\83Z\83b\83g
- if ThreadItem.IsLogFile then begin
- idx := RoundList.Find(ThreadItem);
- if idx <> -1 then begin
- RoundItem := RoundList.Items[idx, grtItem];
- ThreadItem.RoundName := RoundItem.RoundName;
- ThreadItem.Round := True;
- end;
- end;
- }
-
ThreadItem.EndUpdate;
Board.Add(ThreadItem);
ThreadItem.AllResCount := ThreadItem.Count;
ThreadItem.NewResCount := ThreadItem.Count;
ThreadItem.Size := GetFileSize(FileName) - ThreadItem.Count;//1byte\82¸\82ê\82é\82Æ\82«\82ª\82 \82é\82¯\82Ç\82»\82ê\82Í\82 \82«\82ç\82ß\82é
- ThreadItem.RoundDate := ZERO_DATE;
- ThreadItem.LastModified := ZERO_DATE;
+ ThreadItem.RoundDate := FileDateToDateTime( FileAge( FileName ) );
+ ThreadItem.LastModified := ThreadItem.RoundDate;
ThreadItem.Kokomade := -1;
- ThreadItem.NewReceive := ThreadItem.Count;
+ ThreadItem.NewReceive := 0;
ThreadItem.ParentBoard := Board;
ThreadItem.IsLogFile := True;
ThreadItem.Round := False;
Board.Add(ThreadItem);
end;
Board.EndUpdate;
-
- //\91O\89ñ\88Ù\8fí\8fI\97¹\8e\9e\83`\83F\83b\83N
- for i := TmpFileList.Count - 1 downto 0 do begin
- //if TmpFileList.Count <> 0 then begin
- ThreadItem := Board.FindThreadFromFileName(ChangeFileExt(TmpFileList[i], '.dat'));
- if ThreadItem <> nil then begin
- //if TmpFileList.Find(ChangeFileExt(ThreadItem.FileName, '.tmp'), Index) then begin
- ini := TMemIniFile.Create(Boardpath + TmpFileList[i]);
- try
- tmpStr := ini.ReadString('Setting', 'RoundDate', DateTimeToStr(ZERO_DATE));
- ThreadItem.RoundDate := ConvertDateTimeString(tmpStr);
-
- tmpStr := ini.ReadString('Setting', 'LastModified', DateTimeToStr(ZERO_DATE));
- ThreadItem.LastModified := ConvertDateTimeString(tmpStr);
- ThreadItem.Count := ini.ReadInteger('Setting', 'Count', 0);
- ThreadItem.NewReceive := ini.ReadInteger('Setting', 'NewReceive', 0);
-
- ThreadItem.Size := ini.ReadInteger('Setting', 'Size', 0);
- if(ThreadItem.Size = 0) and (FileExists(ThreadItem.GetThreadFileName)) then begin
- try
- ThreadItem.Size := GetFileSize(ThreadItem.GetThreadFileName) - ThreadItem.Count;
- except
- end;
- end;
-
- //\8f\84\89ñ\82Ì\90Ý\92è\82ÍRoundData\82Ì\95û\82ª\82â\82é\82©\82ç\8f\9f\8eè\82É\90Ý\92è\82µ\82Ä\82Í\83_\83\81\81I\81@by \82à\82¶\82ã
- //ThreadItem.Round := ini.ReadBool('Setting', 'Round', False);
- //ThreadItem.RoundName := ini.ReadString('Setting', 'RoundName', ThreadItem.RoundName);
- ThreadItem.UnRead := False;//ini.ReadBool('Setting', 'UnRead', False);
- ThreadItem.ScrollTop := ini.ReadInteger('Setting', 'ScrollTop', 0);
- ThreadItem.AllResCount := ini.ReadInteger('Setting', 'AllResCount', ThreadItem.Count);
- ThreadItem.NewResCount := ini.ReadInteger('Setting', 'NewResCount', 0);
- ThreadItem.AgeSage := TGikoAgeSage(ini.ReadInteger('Setting', 'AgeSage', Ord(gasNone)));
- finally
- ini.Free;
- end;
- DeleteFile(Boardpath + TmpFileList[i]);
- end;
- end;
-
+
+ //\91O\89ñ\88Ù\8fí\8fI\97¹\8e\9e\83`\83F\83b\83N
+ RestoreThreadData( Board );
finally
sl.Free;
FileList.Free;
- TmpFileList.Free;
Board.Sorted := False;
end;
Board.IsThreadDatRead := True;
'%s'#1'%x'#1'%x'#1'%x'#1'%x'#1'%x',
[cnt, //\94Ô\8d\86
Rec.FFileName, //\83t\83@\83C\83\8b\96¼
- Rec.FTitle, //\83^\83C\83g\83\8b
+ MojuUtils.Sanitize(Rec.FTitle), //\83^\83C\83g\83\8b
Rec.FCount, //\83J\83E\83\93\83g
0, //size
0, //RoundDate
sl.Add(FOLDER_INDEX_VERSION);
// \83X\83\8c\94Ô\8d\86\95Û\91¶\82Ì\82½\82ß\83\\81[\83g
- Sort.SortNoFlag := true;
- Sort.SortOrder := true;
- Sort.SortIndex := 0;
+ Sort.SetSortNoFlag(true);
+ Sort.SetSortOrder(true);
+ Sort.SetSortIndex(0);
//Sort.SortNonAcquiredCountFlag := GikoSys.Setting.NonAcquiredCount;
Board.CustomSort(ThreadItemSortProc);
'%s'#1'%x'#1'%x'#1'%x'#1'%x'#1'%x',
[Board.Items[i].No, //\94Ô\8d\86
Board.Items[i].FileName, //\83t\83@\83C\83\8b\96¼
- Board.Items[i].Title, //\83^\83C\83g\83\8b
+ MojuUtils.Sanitize(Board.Items[i].Title), //\83^\83C\83g\83\8b
Board.Items[i].Count, //\83J\83E\83\93\83g
Board.Items[i].Size, //size
DateTimeToInt(Board.Items[i].RoundDate), //RoundDate
begin
Result.FNo := StrToIntDef('$' + RemoveToken(Line, #1), 0);
Result.FFileName := RemoveToken(Line, #1);
- Result.FTitle := RemoveToken(Line, #1);
+ Result.FTitle := MojuUtils.UnSanitize(RemoveToken(Line, #1));
Result.FCount := StrToIntDef('$' + RemoveToken(Line, #1), 0);
Result.FSize := StrToIntDef('$' + RemoveToken(Line, #1), 0);
Result.FRoundDate := IntToDateTime(StrToIntDef('$' + RemoveToken(Line, #1), ZERO_DATE));
rc: Integer;
SearchRec : TSearchRec;
s: string;
- maskExt: string;
begin
- //maskExt := Copy(Mask, 1, Length(Mask) - 1);
- maskExt := Mask;
Path := IncludeTrailingPathDelimiter(Path);
rc := FindFirst(Path + '*.*', faAnyfile, SearchRec);
try
while rc = 0 do begin
if (SearchRec.Name <> '..') and (SearchRec.Name <> '.') then begin
s := Path + SearchRec.Name;
- //if (SearchRec.Attr and faDirectory > 0) then
- // s := IncludeTrailingPathDelimiter(s)
if (SearchRec.Attr and faDirectory = 0) and (MatchesMask(s, Mask)) then
if IsPathAdd then
var
rc: Integer;
SearchRec : TSearchRec;
- s: string;
begin
Path := IncludeTrailingPathDelimiter(Path);
rc := FindFirst(Path + Mask, faAnyfile, SearchRec);
try
while rc = 0 do begin
if (SearchRec.Name <> '..') and (SearchRec.Name <> '.') then begin
- s := Path + SearchRec.Name;
-
- if (SearchRec.Attr and faDirectory = 0) then
- if IsPathAdd then
- List.Add(s)
- else
- List.Add(SearchRec.Name);
+ if (SearchRec.Attr and faDirectory = 0) then begin
+ if IsPathAdd then begin
+ List.Add(Path + SearchRec.Name)
+ end else begin
+ List.Add(SearchRec.Name);
+ end;
+ end;
end;
rc := FindNext(SearchRec);
end;
Dec(i);
Delete(s, i + 1, ln - i);
- s := MojuUtils.CustomStringReplace(s, #0, '*');
+ i := Pos(#0, s);
+ while i <> 0 do begin
+ s[i] := '*';
+ i := Pos(#0, s);
+ end;
Result := s;
finally
procedure TGikoSys.ListBoardFile;
var
boardFileList : TStringList;
- i, l, k : Integer;
+ i, l : Integer;
begin
// BBS \82Ì\8aJ\95ú
try
BoardFileList := TStringList.Create;
try
BoardFileList.BeginUpdate;
- GikoSys.GetFileList( GikoSys.Setting.GetBoardDir, '*', BoardFileList, True, True );
+ GikoSys.GetFileList( GikoSys.Setting.GetBoardDir, '*.txt', BoardFileList, True, True );
BoardFileList.EndUpdate;
- for k := BoardFileList.Count - 1 downto 0 do begin
- if AnsiCompareText(ExtractFileExt(BoardFileList[ k ]), '.bak') = 0 then
- BoardFileList.Delete(k);
- end;
- SetLength( BBSs, l + BoardFileList.Count );
+ SetLength( BBSs, l + BoardFileList.Count );
for i := BoardFileList.Count - 1 downto 0 do begin
BBSs[ l ] := TBBS.Create( BoardFileList[ i ] );
BBSs[ l ].Title := ChangeFileExt( ExtractFileName( BoardFileList[ i ] ), '' );
Result := Setting.GetSambaFileName;
end;
-//! Samba.ini \82ª\96³\82¯\82ê\82Î\8dì\90¬
-procedure TGikoSys.SambaFileExists();
-var
- sambaTmp: string;
- sambaStrList: TStringList;
-begin
- if not FileExists(GikoSys.GetSambaFileName) then begin
- sambaTmp := ChangeFileExt(GikoSys.GetSambaFileName, '.default');
- sambaStrList := TStringList.Create;
- try
- if FileExists(sambaTmp) then begin
- sambaStrList.LoadFromFile(sambaTmp);
- sambaStrList.SaveToFile(GikoSys.GetSambaFileName);
- end;
- finally
- sambaStrList.Free;
- end;
- end;
-end;
-
{!
\brief \93¯\82¶\93\8a\8de ID \82ð\8e\9d\82Â\83\8c\83X\82ð\83A\83\93\83J\81[\82É\82µ\82Ä\97ñ\8b\93
\param AID \8cÂ\90l\82ð\93Á\92è\82·\82é\93\8a\8de ID
\param ThreadItem \97ñ\8b\93\82·\82é\83X\83\8c\83b\83h
-\param limited \97ñ\8b\93\82·\82é\90\94\82ð\90§\8cÀ\82·\82é\82È\82ç True
+\param limited \97ñ\8b\93\82·\82é\90\94\82ð\90§\8cÀ\82·\82é\82È\82ç1\88È\8fã
\return \97ñ\8b\93\82³\82ê\82½\83\8c\83X\83A\83\93\83J\81[
-\todo limited \82ð Integer \82É\82·\82é\82©\81A20 \82ð\8aO\82É\8fo\82·
}
-function TGikoSys.GetSameIDResAnchor(const AID : string; ThreadItem: TThreadItem; limited: boolean):string;
+function TGikoSys.GetSameIDResAnchor(
+ const AID : string; ThreadItem: TThreadItem;
+ limited: Integer):string;
var
i: integer;
body: TStringList;
+ Res: TResRec;
+ ResLink : TResLinkRec;
begin
+ // body\88È\8aO\82Í\8eg\97p\82µ\82È\82¢\82Ì\82Å\8f\89\8aú\89»\82µ\82È\82¢
+ Res.FBody := '';
+ Res.FType := glt2chNew;
+
Result := '';
if (not IsNoValidID(AID)) and
(ThreadItem <> nil) and (ThreadItem.IsLogFile) then begin
body := TStringList.Create;
try
GetSameIDRes(AID, ThreadItem, body);
- if (limited) and (body.Count > 20) then begin
- for i := body.Count - 20 to body.Count - 1 do begin
- Result := Result + '>' + body[i] + ' ';
+ if (limited > 0) and (body.Count > limited) then begin
+ for i := body.Count - limited to body.Count - 1 do begin
+ Res.FBody := Res.FBody + '>' + body[i] + ' ';
end;
end else begin
for i := 0 to body.Count - 1 do begin
- Result := Result + '>' + body[i] + ' ';
+ Res.FBody := Res.FBody + '>' + body[i] + ' ';
end;
end;
finally
body.Free;
end;
-
- Result := HTMLCreater.ConvRes(
- Result,
- ThreadItem.ParentBoard.BBSID, ChangeFileExt(ThreadItem.FileName, ''),
- 'bbs', 'key', 'st', 'to', 'nofirst', 'true', false);
+ ResLink.FBbs := ThreadItem.ParentBoard.BBSID;
+ ResLink.FKey := ChangeFileExt(ThreadItem.FileName, '');
+ HTMLCreater.ConvRes(@Res, @ResLink, false);
+ Result := Res.FBody;
end;
end;
\brief \93¯\82¶\93\8a\8de ID \82ð\8e\9d\82Â\83\8c\83X\82ð\97ñ\8b\93
\param AIDNum \8cÂ\90l\82ð\93Á\92è\82·\82é\93\8a\8de ID
\param ThreadItem \97ñ\8b\93\82·\82é\83X\83\8c\83b\83h
-\param limited \97ñ\8b\93\82·\82é\90\94\82ð\90§\8cÀ\82·\82é\82È\82ç True
+\param limited \97ñ\8b\93\82·\82é\90\94\82ð\90§\8cÀ\82·\82é\82È\82ç1\88È\8fã
\return
-\todo limited \82ð Integer \82É\82·\82é\82©\81A20 \82ð\8aO\82É\8fo\82·
}
-function TGikoSys.GetSameIDResAnchor(AIDNum : Integer; ThreadItem: TThreadItem; limited: boolean):string;
+function TGikoSys.GetSameIDResAnchor(AIDNum : Integer;
+ ThreadItem: TThreadItem;
+ limited: Integer):string;
var
i: integer;
body: TStringList;
+ Res: TResRec;
+ ResLink : TResLinkRec;
begin
+ // body\88È\8aO\82Í\8eg\97p\82µ\82È\82¢\82Ì\82Å\8f\89\8aú\89»\82µ\82È\82¢
+ Res.FBody := '';
+ Res.FType := glt2chNew;
+
Result := '';
if (ThreadItem <> nil) and (ThreadItem.IsLogFile) then begin
body := TStringList.Create;
try
GetSameIDRes(AIDNum, ThreadItem, body);
- if (limited) and (body.Count > 20) then begin
- for i := body.Count - 20 to body.Count - 1 do begin
- Result := Result + '>' + body[i] + ' ';
- end;
+ if (limited > 0) and ( body.Count > limited) then begin
+ for i := body.Count - 20 to body.Count - 1 do begin
+ Res.FBody := Res.FBody + '>' + body[i] + ' ';
+ end;
end else begin
for i := 0 to body.Count - 1 do begin
- Result := Result + '>' + body[i] + ' ';
+ Res.FBody := Res.FBody + '>' + body[i] + ' ';
end;
end;
finally
body.Free;
end;
- Result := HTMLCreater.ConvRes(
- Result, ThreadItem.ParentBoard.BBSID,
- ChangeFileExt(ThreadItem.FileName, ''),
- 'bbs', 'key', 'st', 'to', 'nofirst', 'true',
- false);
+ ResLink.FBbs := ThreadItem.ParentBoard.BBSID;
+ ResLink.FKey := ChangeFileExt(ThreadItem.FileName, '');
+ HTMLCreater.ConvRes(@Res, @ResLink, false);
+ Result := Res.FBody;
end;
end;
begin
Result := Setting.GetEditorKeyFileName;
end;
+//! \93ü\97Í\83A\83V\83X\83g\82Ì\90Ý\92è\83t\83@\83C\83\8b\96¼
+function TGikoSys.GetInputAssistFileName: String;
+begin
+ Result := Setting.GetInputAssistFileName;
+end;
+//! \83M\83R\83i\83r\82Ì\83\81\83b\83Z\81[\83W\82ð\90Ý\92è\82·\82é
+procedure TGikoSys.SetGikoMessage;
+begin
+ if FGikoMessage = nil then begin
+ FGikoMessage := TGikoMessage.Create;
+ end else begin
+ FGikoMessage.Clear;
+ end;
+
+ if (Setting.GengoSupport) then begin
+ try
+ if (FileExists(Setting.GetLanguageFileName)) then begin
+ FGikoMessage.LoadFromFile(Setting.GetLanguageFileName);
+ end;
+ except
+ FGikoMessage.Clear;
+ end;
+ end;
+end;
+//! \83M\83R\83i\83r\82Ì\83\81\83b\83Z\81[\83W\82ð\8eæ\93¾\82·\82é
+function TGikoSys.GetGikoMessage(MesType: TGikoMessageListType): String;
+begin
+ Result := '';
+ if FGikoMessage <> nil then begin
+ Result := FGikoMessage.GetMessage(MesType);
+ end;
+end;
+
+//Tue, 17 Dec 2002 12:18:07 GMT \81¨ TDateTime\82Ö
+//MonaUtils\82©\82ç\88Ú\93®
+function TGikoSys.DateStrToDateTime(const DateStr: string): TDateTime;
+ function StrMonthToMonth(const s: string): integer;
+ const
+ m: array[1..12] of string = ('Jan','Feb','Mar','Apr','May','Jun', 'Jul','Aug','Sep','Oct','Nov','Dec');
+ var
+ i: integer;
+ begin
+ Result := -1;
+ for i := Low(m) to High(m) do begin
+ if (SameText(s, m[i])) then begin
+ Result := i;
+ Break;
+ end;
+ end;
+ end;
+var
+ wDay, wMonth, wYear: word;
+ wHour, wMinute, wSecond: word;
+ sTime: string;
+ d: TDateTime;
+begin
+ wDay := StrToIntDef(ChooseString(DateStr, ' ', 1), 0);
+ wMonth := StrMonthToMonth(ChooseString(DateStr, ' ', 2));
+ wYear := StrToIntDef(ChooseString(DateStr, ' ', 3), 0);
+ sTime := ChooseString(DateStr, ' ', 4);
+ wHour := StrToIntDef(ChooseString(sTime, ':', 0), 0);
+ wMinute := StrToIntDef(ChooseString(sTime, ':', 1), 0);
+ wSecond := StrToIntDef(ChooseString(sTime, ':', 2), 0);
+ d := EncodeDateTime(wYear, wMonth, wDay, wHour, wMinute, wSecond, 0);
+ Result := d;
+end;
+//MonaUtils\82©\82ç\88Ú\93®
+//! \82 \82é\83Z\83p\83\8c\81[\83^\82Å\8bæ\90Ø\82ç\82ê\82½\95¶\8e\9a\97ñ\82©\82ç\82\8e\94Ô\96Ú\82Ì\95¶\8e\9a\97ñ\82ð\8eæ\82è\8fo\82·
+function TGikoSys.ChooseString(const Text, Separator: string; Index: integer): string;
+var
+ S : string;
+ i, p : integer;
+begin
+ S := Text;
+ for i := 0 to Index - 1 do begin
+ if (AnsiPos(Separator, S) = 0) then S := ''
+ else S := Copy(S, AnsiPos(Separator, S) + Length(Separator), Length(S));
+ end;
+ p := AnsiPos(Separator, S);
+ if (p > 0) then Result := Copy(S, 1, p - 1) else Result := S;
+end;
+//! \88ê\8e\9e\83t\83@\83C\83\8b\82©\82ç\82Ì\95\9c\8b\8c
+procedure TGikoSys.RestoreThreadData(Board : TBoard);
+const
+ SECTION = 'Setting';
+var
+ TmpFileList : TStringList;
+ i : Integer;
+ ini : TMemIniFile;
+ ThreadItem : TThreadItem;
+ Boardpath, tmpStr : string;
+begin
+ Boardpath := ExtractFilePath(Board.GetFolderIndexFileName);
+
+ TmpFileList := TStringList.Create;
+ TmpFileList.Sorted := True;
+ TmpFileList.BeginUpdate;
+ try
+ //\91O\89ñ\88Ù\8fí\8fI\97¹\8e\9e\97pTmp\83t\83@\83C\83\8b\83\8a\83X\83g
+ GetFileList(Boardpath, '*.tmp', TmpFileList, False);
+ TmpFileList.EndUpdate;
+ //\91O\89ñ\88Ù\8fí\8fI\97¹\8e\9e\83`\83F\83b\83N
+ for i := TmpFileList.Count - 1 downto 0 do begin
+ ThreadItem := Board.FindThreadFromFileName(ChangeFileExt(TmpFileList[i], '.dat'));
+ if ThreadItem <> nil then begin
+ ini := TMemIniFile.Create(Boardpath + TmpFileList[i]);
+ try
+ tmpStr := ini.ReadString(SECTION, 'RoundDate', DateTimeToStr(ZERO_DATE));
+ ThreadItem.RoundDate := ConvertDateTimeString(tmpStr);
+ tmpStr := ini.ReadString(SECTION, 'LastModified', DateTimeToStr(ZERO_DATE));
+ ThreadItem.LastModified := ConvertDateTimeString(tmpStr);
+ ThreadItem.Count := ini.ReadInteger(SECTION, 'Count', 0);
+ ThreadItem.NewReceive := ini.ReadInteger(SECTION, 'NewReceive', 0);
+
+ ThreadItem.Size := ini.ReadInteger(SECTION, 'Size', 0);
+ if(ThreadItem.Size = 0) and (FileExists(ThreadItem.GetThreadFileName)) then begin
+ try
+ ThreadItem.Size := GetFileSize(ThreadItem.GetThreadFileName) - ThreadItem.Count;
+ except
+ end;
+ end;
+
+ //\8f\84\89ñ\82Ì\90Ý\92è\82ÍRoundData\82Ì\95û\82ª\82â\82é\82©\82ç\8f\9f\8eè\82É\90Ý\92è\82µ\82Ä\82Í\83_\83\81\81I\81@by \82à\82¶\82ã
+ //ThreadItem.Round := ini.ReadBool('Setting', 'Round', False);
+ //ThreadItem.RoundName := ini.ReadString('Setting', 'RoundName', ThreadItem.RoundName);
+ ThreadItem.UnRead := False;//ini.ReadBool('Setting', 'UnRead', False);
+ ThreadItem.ScrollTop := ini.ReadInteger(SECTION, 'ScrollTop', 0);
+ ThreadItem.AllResCount := ini.ReadInteger(SECTION, 'AllResCount', ThreadItem.Count);
+ ThreadItem.NewResCount := ini.ReadInteger(SECTION, 'NewResCount', 0);
+ ThreadItem.AgeSage := TGikoAgeSage(ini.ReadInteger(SECTION, 'AgeSage', Ord(gasNone)));
+ finally
+ ini.Free;
+ end;
+ DeleteFile(Boardpath + TmpFileList[i]);
+ end;
+ end;
+ finally
+ TmpFileList.Clear;
+ TmpFileList.Free;
+ end;
+end;
+{
+\brief User32.dll\82ª\97\98\97p\82Å\82«\82é\82©
+\return Boolean \97\98\97p\82Å\82«\82é\8fê\8d\87\82ÍTrue
+}
+function TGikoSys.CanUser32DLL: Boolean;
+var
+ hUser32 : HINST;
+begin
+ Result := False;
+ hUser32 := 0;
+ try
+ try
+ hUser32 := LoadLibrary('User32.dll');
+ if hUser32 <> 0 then begin
+ Result := True;
+ end;
+ except
+ Result := false;
+ end;
+ finally
+ FreeLibrary(hUser32);
+ end;
+end;
+{
+\brief OE\88ø\97p\95\84\8eæ\93¾
+\return OE\82Ì\88ø\97p\95\84\81i\90Ý\92è\82³\82ê\82Ä\82¢\82È\82¢\8fê\8d\87\82Í'>')
+}
+function TGikoSys.GetOEIndentChar : string;
+var
+ regKey : TRegistry;
+ Identities : string;
+ IndentChar : DWORD;
+const
+ DEFAULT_CHAR = '> ';
+ OE_MAIL_PATH = '\Software\Microsoft\Outlook Express\5.0\Mail';
+ INDENT_CHAR = 'Indent Char';
+begin
+
+ Result := DEFAULT_CHAR;
+ regKey := TRegistry.Create;
+ try
+ try
+ regKey.RootKey := HKEY_CURRENT_USER;
+ if not regKey.OpenKey( 'Identities', False ) then
+ Exit;
+ Identities := regKey.ReadString( 'Default User ID' );
+ if Identities = '' then
+ Exit;
+ if not regKey.OpenKey( Identities + OE_MAIL_PATH, False ) then
+ Exit;
+ IndentChar := regKey.ReadInteger( INDENT_CHAR );
+ Result := Char( IndentChar ) + ' ';
+ except
+ end;
+ finally
+ regKey.Free;
+ end;
+
+end;
+//! \92u\8a·\90Ý\92è\83t\83@\83C\83\8b\8eæ\93¾
+function TGikoSys.GetReplaceFileName: String;
+begin
+ Result := Setting.GetReplaceFileName;
+end;
initialization
GikoSys := TGikoSys.Create;