X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=ExternalBoardManager.pas;h=a298e4b48170028e463db878aad19b8a8a16a1a5;hb=20bba43133ed0b8e5115bba320604c704d1bdd5c;hp=3b961a31bc4c3d9b3004bedc6b83668bd371ec5d;hpb=a427e069818b4fcc697cb62c550bf8b058f662dd;p=gikonavigoeson%2Fgikonavi.git diff --git a/ExternalBoardManager.pas b/ExternalBoardManager.pas index 3b961a3..a298e4b 100644 --- a/ExternalBoardManager.pas +++ b/ExternalBoardManager.pas @@ -5,100 +5,9 @@ interface uses Windows, Classes, SysUtils, IdHTTP, IdComponent, IdGlobal, IdException, - AbonUnit; + ExternalBoardPlugInMain, ExternalFilePath, ExternalThreadItem, ExternalBoardItem; type - // TThreadItem ‚̃vƒƒpƒeƒBÝ’è^Žæ“¾ ID - TThreadItemProperty = ( - tipContext, // : DWORD // Ž©—R‚ɐݒ肵‚Ä‚¢‚¢’l - tipNo, // : Integer // ”ԍ† - tipFileName, // : string // ƒXƒŒƒbƒhƒtƒ@ƒCƒ‹–¼ - tipTitle, // : string // ƒXƒŒƒbƒhƒ^ƒCƒgƒ‹ - tipRoundDate, // : TDateTime // ƒXƒŒƒbƒh‚ðŽæ“¾‚µ‚½“úŽži„‰ñ“úŽžj - tipLastModified, // : TDateTime // ƒXƒŒƒbƒh‚ªXV‚³‚ê‚Ä‚¢‚é“úŽžiƒT[ƒo‘¤“úŽžj - tipCount, // : Integer // ƒXƒŒƒbƒhƒJƒEƒ“ƒgiƒ[ƒJƒ‹j - tipAllResCount, // : Integer // ƒXƒŒƒbƒhƒJƒEƒ“ƒgiƒT[ƒoj - tipNewResCount, // : Integer // ƒXƒŒƒbƒhV’…” - tipSize, // : Integer // ƒXƒŒƒbƒhƒTƒCƒY - tipRound, // : Boolean // „‰ñƒtƒ‰ƒO - tipRoundName, // : string // „‰ñ–¼ - tipIsLogFile, // : Boolean // ƒƒO‘¶Ýƒtƒ‰ƒO - tipKokomade, // : Integer // ƒRƒR‚Ü‚Å“Ç‚ñ‚¾”ԍ† - tipNewReceive, // : Integer // ƒRƒR‚©‚çV‹KŽóM - tipNewArrival, // : Boolean // V’… - tipUnRead, // : Boolean // –¢“ǃtƒ‰ƒO - tipScrollTop, // : Integer // ƒXƒNƒ[ƒ‹ˆÊ’u - tipDownloadHost, // : string // ¡‚̃zƒXƒg‚ƈႤê‡‚̃zƒXƒg - tipAgeSage, // : TThreadAgeSage // ƒAƒCƒeƒ€‚̏グ‰º‚° - tipURL, // : string // ƒXƒŒƒbƒh‚ðƒuƒ‰ƒEƒU‚Å•\Ž¦‚·‚éÛ‚Ì URL - tipFilePath // : string // ‚±‚̃XƒŒ‚ª•Û‘¶‚³‚ê‚Ä‚¢‚éƒpƒX - ); - - // ************************************************************************* - // ƒvƒ‰ƒOƒCƒ“‚̃o[ƒWƒ‡ƒ“ - // ************************************************************************* - TOnVersionInfo = procedure( - var outAgent : PChar; // ƒo[ƒWƒ‡ƒ“‚ðˆêØŠÜ‚Ü‚È‚¢ƒˆ‚È–¼Ì - var outMajor : DWORD; // ƒƒWƒƒ[ƒo[ƒWƒ‡ƒ“ - var outMinor : DWORD; // ƒ}ƒCƒi[ƒo[ƒWƒ‡ƒ“ - var outRelease : PChar; // ƒŠƒŠ[ƒX’iŠK–¼ - var outRevision : DWORD // ƒŠƒrƒWƒ‡ƒ“ƒiƒ“ƒo[ - ); stdcall; - - // ************************************************************************* - // Žw’肵‚½ URL ‚ð‚±‚Ìƒvƒ‰ƒOƒCƒ“‚Ŏ󂯕t‚¯‚é‚©‚Ç‚¤‚© - // ************************************************************************* - TOnAcceptURL = function( - inURL : PChar // ”»’f‚ð‹Â‚¢‚Å‚¢‚é URL - ): Boolean; stdcall; // Žó‚¯•t‚¯‚é‚È‚ç True - - // ************************************************************************* - // TThreadItem ‚ª¶¬‚³‚ꂽ - // ************************************************************************* - TThreadItemCreate = procedure( - inInstance : DWORD - ); stdcall; - - // ************************************************************************* - // TThreadItem ‚ª”jŠü‚³‚ꂽ - // ************************************************************************* - TThreadItemDispose = procedure( - inInstance : DWORD - ); stdcall; - - // ************************************************************************* - // ƒ_ƒEƒ“ƒ[ƒh‚ðŽwŽ¦‚³‚ꂽ - // ************************************************************************* - TThreadItemOnDownload = procedure( - inInstance : DWORD // ƒCƒ“ƒXƒ^ƒ“ƒX - ); stdcall; // ƒ_ƒEƒ“ƒ[ƒh‚³‚ꂽƒXƒŒƒbƒh - - // ************************************************************************* - // ƒŒƒX”ԍ† n ‚ɑ΂·‚é html ‚ð—v‹‚³‚ꂽ - // ************************************************************************* - TThreadItemOnGetRes = function( - inInstance : DWORD; // ƒCƒ“ƒXƒ^ƒ“ƒX - inNo : DWORD // •\Ž¦‚·‚郌ƒX”ԍ† - ) : PChar; stdcall; // •\Ž¦‚·‚é HTML - - // ************************************************************************* - // ƒXƒŒƒbƒh‚̃wƒbƒ_ html ‚ð—v‹‚³‚ꂽ - // ************************************************************************* - TThreadItemOnGetHeader = function( - inInstance : DWORD; // ƒNƒ‰ƒX‚̃Cƒ“ƒXƒ^ƒ“ƒX - inOptionalHeader : PChar // ’ljÁ‚̃wƒbƒ_ - ) : PChar; stdcall; // ®Œ`‚³‚ꂽ HTML - - // ************************************************************************* - // ƒXƒŒƒbƒh‚̃tƒbƒ^ html ‚ð—v‹‚³‚ꂽ - // ************************************************************************* - TThreadItemOnGetFooter = function( - inInstance : DWORD; // ƒNƒ‰ƒX‚̃Cƒ“ƒXƒ^ƒ“ƒX - inOptionalFooter : PChar // ’ljÁ‚̃tƒbƒ^ - ) : PChar; stdcall; // ®Œ`‚³‚ꂽ HTML - - - // ========================================================================= // ƒvƒ‰ƒOƒCƒ“‚ðŠÇ—‚·‚é TBoardPlugin ƒNƒ‰ƒX // ========================================================================= @@ -107,22 +16,40 @@ type FFilePath : string; // ƒvƒ‰ƒOƒCƒ“‚ðŽ¦‚·ƒpƒX FModule : HMODULE; // ƒvƒ‰ƒOƒCƒ“‚̃‚ƒWƒ…[ƒ‹ƒnƒ“ƒhƒ‹ + FLoad : TOnLoad; FVersionInfo : TOnVersionInfo; FAcceptURL : TOnAcceptURL; + FExtractBoardURL : TOnExtractBoardURL; + FPlugInMenu : TOnPlugInMenu; + FCreateThreadItem : TThreadItemCreate; FDisposeThreadItem : TThreadItemDispose; - FDownload : TThreadItemOnDownload; + FDownloadThread : TThreadItemOnDownload; + FWriteThread : TThreadItemOnWrite; FGetRes : TThreadItemOnGetRes; + FGetDat : TThreadItemOnGetDat; FGetHeader : TThreadItemOnGetHeader; FGetFooter : TThreadItemOnGetFooter; + FGetBoardURL : TThreadItemOnGetBoardURL; + + FCreateBoardItem : TBoardItemCreate; + FDisposeBoardItem : TBoardItemDispose; + FDownloadBoard : TBoardItemOnDownload; + FCreateThread : TBoardItemOnCreateThread; + FEnumThread : TBoardItemOnEnumThread; + FFileName2ThreadURL : TBoardItemOnFileName2ThreadURL; public + // ƒRƒ“ƒXƒgƒ‰ƒNƒ^ + constructor Create; // ƒvƒ‰ƒOƒCƒ“‚̃pƒX‚ðŽw’肵‚č쐬 constructor CreateFromPath( inPath : string ); // ƒvƒ‰ƒOƒCƒ“–¼‚ðŽw’肵‚č쐬 constructor CreateFromName( inName : string ); // ƒ‚ƒWƒ…[ƒ‹ƒnƒ“ƒhƒ‹‚ðŽw’肵‚č쐬 constructor CreateFromModule( inModule : HMODULE ); + // ƒfƒXƒgƒ‰ƒNƒ^ + destructor Destroy; override; // ƒvƒ‰ƒOƒCƒ“‚̃pƒX‚ðŽw’肵‚㍁[ƒh procedure LoadFromPath( inPath : string ); @@ -130,24 +57,54 @@ type procedure LoadFromName( inName : string ); // ƒ‚ƒWƒ…[ƒ‹ƒnƒ“ƒhƒ‹‚ðŽw’肵‚㍁[ƒh procedure LoadFromModule( inModule : HMODULE ); + + //===== PlugInMain ŠÖ˜A + // ƒvƒ‰ƒOƒCƒ“‚ª(³‚µ‚­)ƒ[ƒh‚³‚ꂽ + procedure Loaded; // ƒo[ƒWƒ‡ƒ“î•ñ procedure VersionInfo( var outAgent : string; var outMajor : DWORD; var outMinor : DWORD; var outRelease : string; var outRevision : DWORD ); // Žw’肵‚½ URL ‚ð‚±‚Ìƒvƒ‰ƒOƒCƒ“‚Ŏ󂯕t‚¯‚é‚©‚Ç‚¤‚© - function AcceptURL( inURL : string ) : Boolean; + function AcceptURL( inURL : string ) : TAcceptType; + // URL‚©‚çŽg‚¦‚éBoard‚ÌURL‚𓱂«o‚· + function ExtractBoardURL( inURL : string ): string; + // ƒƒjƒ…[ƒnƒ“ƒhƒ‰ + procedure PlugInMenu( inHandle : HMENU ); + + //===== TThreadItem ŠÖ˜A // TThreadItem ‚ª¶¬‚³‚ꂽ procedure CreateThreadItem( threadItem : DWORD ); // TThreadItem ‚ª”jŠü‚³‚ꂽ procedure DisposeThreadItem( threadItem : DWORD ); // ƒ_ƒEƒ“ƒ[ƒh‚ðŽwŽ¦ - procedure Download( threadItem: DWORD ); + function DownloadThread( threadItem : DWORD ) : TDownloadState; + // ‘‚«ž‚Ý‚ðŽwŽ¦ + function WriteThread( threadItem : DWORD; inName : string; inMail : string; inMessage : string ) : TDownloadState; // ƒŒƒX”ԍ† n ‚ɑ΂·‚é html ‚ð—v‹ function GetRes( threadItem : DWORD; inNo : DWORD ) : string; + // ƒŒƒX”ԍ† n ‚ɑ΂·‚é Dat ‚ð—v‹ + function GetDat( threadItem : DWORD; inNo : DWORD ) : string; // ƒXƒŒƒbƒh‚̃wƒbƒ_ html ‚ð—v‹ function GetHeader( threadItem : DWORD; inOptionalHeader : string ) : string; // ƒXƒŒƒbƒh‚̃tƒbƒ^ html ‚ð—v‹ function GetFooter( threadItem : DWORD; inOptionalFooter : string ) : string; + // ‚±‚Ì ThreadItem ‚ª‘®‚·‚é”Â‚Ì URL ‚ð—v‹ + function GetBoardURL( threadItem : DWORD ) : string; + + //===== TBoardItem ŠÖ˜A + // TBoard ‚ª¶¬‚³‚ꂽ + procedure CreateBoardItem( boardItem : DWORD ); + // TBoardItem ‚ª”jŠü‚³‚ꂽ + procedure DisposeBoardItem( boardItem : DWORD ); + // ƒ_ƒEƒ“ƒ[ƒh‚ðŽwŽ¦ + function DownloadBoard( boardItem : DWORD ) : TDownloadState; + // ƒXƒŒ—§‚Ä‚ðŽwŽ¦ + function CreateThread( boardItem : DWORD; inSubject : string; inName : string; inMail : string; inMessage : string ) : TDownloadState; + // ‚±‚̔‚ɕۗL‚µ‚Ä‚¢‚éƒXƒŒ‚ð—ñ‹“ + procedure EnumThread( boardItem : DWORD; inCallBack : TBoardItemEnumThreadCallBack ); + // ƒtƒ@ƒCƒ‹–¼‚©‚çƒXƒŒƒbƒh‚Ì URL ‚ð—v‹ + function FileName2ThreadURL( boardItem : DWORD; inFileName : string ) : string; private procedure LoadPlugInAPI; @@ -166,29 +123,10 @@ var procedure InitializeBoardPlugIns; -function CreateResultString( - resultStr : string -) : PChar; stdcall; - -function ThreadItemDat2HTML( - inInstance : DWORD; // ƒNƒ‰ƒX‚̃Cƒ“ƒXƒ^ƒ“ƒX - inDatRes : PChar; // –¼‘O<>ƒ[ƒ‹<>“ú•tID<>–{•¶<> ‚ō\¬‚³‚ꂽƒeƒLƒXƒg - inResNo : DWORD; // ƒŒƒX”ԍ† - inIsNew : Boolean // V’…ƒŒƒX‚È‚ç True -) : PChar; stdcall; // ®Œ`‚³‚ꂽ HTML - -procedure DisposeResultString( - resultStr : PChar -); stdcall; - implementation uses GikoSystem, BoardGroup; -// ========================================================================= -// ƒvƒ‰ƒOƒCƒ“‚ðŠÇ—‚·‚é TBoardPlugin ƒNƒ‰ƒX -// ========================================================================= - // ************************************************************************* // BoardPlugin ƒtƒHƒ‹ƒ_‚É‚ ‚éƒvƒ‰ƒOƒCƒ“‚ð‘S‚㍁[ƒh // ************************************************************************* @@ -200,12 +138,27 @@ begin pluginNames := TStringList.Create; try - GikoSys.GetFileList( GikoSys.Setting.GetBoardPlugInDir, '*', pluginNames, False, False ); + //GikoSys.GetFileList( GikoSys.Setting.GetBoardPlugInDir, '*', pluginNames, False, False ); + pluginNames.BeginUpdate; + GikoSys.GetFileList( GikoSys.Setting.GetBoardPlugInDir, '*.dll', pluginNames, False ); + pluginNames.EndUpdate; SetLength( BoardPlugIns, pluginNames.Count ); - + // + SetLength( BoardGroups, pluginNames.Count + 1 ); + BoardGroups[0] := TBoardGroup.Create; + BoardGroups[0].Sorted := true; + BoardGroups[0].BoardPlugIn := nil; + // bound := pluginNames.Count - 1; - for i := 0 to bound do - BoardPlugIns[ i ] := TBoardPlugIn.CreateFromName( pluginNames.Strings[ i ] ); + for i := 0 to bound do begin + try + BoardPlugIns[ i ] := TBoardPlugIn.CreateFromName( pluginNames.Strings[ i ] ); + BoardPlugIns[ i ].Loaded; + BoardGroups[ i + 1 ] := TBoardGroup.Create; + BoardGroups[ i + 1 ].Sorted := True; + BoardGroups[ i + 1 ].BoardPlugIn := BoardPlugIns[ i ]; + except end; + end; finally pluginNames.Free; end; @@ -219,6 +172,38 @@ end; // ========================================================================= // ************************************************************************* +// ƒRƒ“ƒXƒgƒ‰ƒNƒ^ +// ************************************************************************* +constructor TBoardPlugIn.Create; +begin + + inherited; + + FLoad := nil; + FVersionInfo := nil; + FAcceptURL := nil; + FExtractBoardURL := nil; + FPlugInMenu := nil; + + FCreateThreadItem := nil; + FDisposeThreadItem := nil; + FDownloadThread := nil; + FWriteThread := nil; + FGetRes := nil; + FGetDat := nil; + FGetHeader := nil; + FGetFooter := nil; + + FCreateBoardItem := nil; + FDisposeBoardItem := nil; + FDownloadBoard := nil; + FCreateThread := nil; + FEnumThread := nil; + FFileName2ThreadURL := nil; + +end; + +// ************************************************************************* // ƒvƒ‰ƒOƒCƒ“‚̃pƒX‚ðŽw’肵‚č쐬 // ************************************************************************* constructor TBoardPlugIn.CreateFromPath( @@ -226,7 +211,7 @@ constructor TBoardPlugIn.CreateFromPath( ); begin - inherited Create; + Create; LoadFromPath( inPath ); @@ -240,7 +225,7 @@ constructor TBoardPlugIn.CreateFromName( ); begin - inherited Create; + Create; LoadFromName( inName ); @@ -261,6 +246,18 @@ begin end; // ************************************************************************* +// ƒfƒXƒgƒ‰ƒNƒ^ +// ************************************************************************* +destructor TBoardPlugIn.Destroy; +begin + + FreeLibrary( FModule ); + + inherited; + +end; + +// ************************************************************************* // ƒvƒ‰ƒOƒCƒ“‚̃pƒX‚ðŽw’肵‚㍁[ƒh // ************************************************************************* procedure TBoardPlugIn.LoadFromPath( @@ -309,6 +306,17 @@ begin end; // ************************************************************************* +// ƒvƒ‰ƒOƒCƒ“‚ª(³‚µ‚­)ƒ[ƒh‚³‚ꂽ +// ************************************************************************* +procedure TBoardPlugIn.Loaded; +begin + + if Assigned( FLoad ) then + FLoad( DWORD( Self ) ); + +end; + +// ************************************************************************* // ƒo[ƒWƒ‡ƒ“î•ñ // ************************************************************************* procedure TBoardPlugIn.VersionInfo( @@ -338,13 +346,42 @@ end; // ************************************************************************* function TBoardPlugIn.AcceptURL( inURL : string -) : Boolean; +) : TAcceptType; begin if Assigned( FAcceptURL ) then Result := FAcceptURL( PChar( inURL ) ) else - Result := False; + Result := atNoAccept; + +end; +// ************************************************************************* +// Žw’肵‚½ URL ‚©‚çŽg‚¦‚éBoard‚ÌURL‚𓱂«o‚· +// ************************************************************************* +function TBoardPlugIn.ExtractBoardURL( + inURL : string +) : string; +var + URL : PChar; +// tmp : string; +begin + Result := inURL; + if Assigned( FExtractBoardURL ) then begin + FExtractBoardURL( PChar(inURL), URL); + Result := string(URL); + DisposeResultString(URL); + end; +end; +// ************************************************************************* +// ƒƒjƒ…[ƒnƒ“ƒhƒ‰ +// ************************************************************************* +procedure TBoardPlugIn.PlugInMenu( + inHandle : HMENU // ƒƒjƒ…[ƒnƒ“ƒhƒ‹ +); +begin + + if Assigned( FPlugInMenu ) then + FPlugInMenu( inHandle ); end; @@ -352,7 +389,7 @@ end; // TThreadItem ‚ª¶¬‚³‚ꂽ // ************************************************************************* procedure TBoardPlugIn.CreateThreadItem( - threadItem : DWORD + threadItem : DWORD // ThreadItem ‚̃Cƒ“ƒXƒ^ƒ“ƒX ); begin @@ -365,7 +402,7 @@ end; // TThreadItem ‚ª”jŠü‚³‚ꂽ // ************************************************************************* procedure TBoardPlugIn.DisposeThreadItem( - threadItem : DWORD + threadItem : DWORD // ThreadItem ‚̃Cƒ“ƒXƒ^ƒ“ƒX ); begin @@ -377,11 +414,33 @@ end; // ************************************************************************* // ƒ_ƒEƒ“ƒ[ƒh‚ðŽwŽ¦ // ************************************************************************* -procedure TBoardPlugIn.Download( threadItem: DWORD ); +function TBoardPlugIn.DownloadThread( + threadItem : DWORD // ThreadItem ‚̃Cƒ“ƒXƒ^ƒ“ƒX +) : TDownloadState; +begin + + if Assigned( FDownloadThread ) then + Result := FDownloadThread( threadItem ) + else + Result := dsError; + +end; + +// ************************************************************************* +// ‘‚«ž‚Ý‚ðŽwŽ¦ +// ************************************************************************* +function TBoardPlugIn.WriteThread( + threadItem : DWORD; // ThreadItem ‚̃Cƒ“ƒXƒ^ƒ“ƒX + inName : string; // –¼‘O(ƒnƒ“ƒhƒ‹) + inMail : string; // ƒ[ƒ‹ƒAƒhƒŒƒX + inMessage : string // –{•¶ +) : TDownloadState; // ‘‚«ž‚Ý‚ª¬Œ÷‚µ‚½‚©‚Ç‚¤‚© begin - if Assigned( FDownload ) then - FDownload( threadItem ); + if Assigned( FWriteThread ) then + Result := FWriteThread( threadItem, PChar( inName ), PChar( inMail ), PChar( inMessage ) ) + else + Result := dsError; end; @@ -389,7 +448,7 @@ end; // ƒŒƒX”ԍ† n ‚ɑ΂·‚é html ‚ð—v‹ // ************************************************************************* function TBoardPlugIn.GetRes( - threadItem : DWORD; // ƒCƒ“ƒXƒ^ƒ“ƒX + threadItem : DWORD; // ThreadItem ‚̃Cƒ“ƒXƒ^ƒ“ƒX inNo : DWORD // •\Ž¦‚·‚郌ƒX”ԍ† ) : string; // •\Ž¦‚·‚é HTML var @@ -398,8 +457,32 @@ begin if Assigned( FGetRes ) then begin tmp := FGetRes( threadItem, inNo ); - Result := string( tmp ); - DisposeResultString( tmp ); + try + Result := string( tmp ); + finally + DisposeResultString( tmp ); + end; + end; + +end; + +// ************************************************************************* +// ƒŒƒX”ԍ† n ‚ɑ΂·‚é Dat ‚ð—v‹ +// ************************************************************************* +function TBoardPlugIn.GetDat( + threadItem : DWORD; // ThreadItem ‚̃Cƒ“ƒXƒ^ƒ“ƒX + inNo : DWORD // •\Ž¦‚·‚郌ƒX”ԍ† +) : string; // ‚Q‚¿‚á‚ñ‚Ë‚é‚ÌdatŒ`Ž® +var + tmp : PChar; +begin + + if Assigned( FGetDat ) then begin + tmp := FGetDat( threadItem, inNo ); + try + Result := string( tmp ); + finally + DisposeResultString(tmp); end; end; end; @@ -408,7 +491,7 @@ end; // ƒXƒŒƒbƒh‚̃wƒbƒ_ html ‚ð—v‹ // ************************************************************************* function TBoardPlugIn.GetHeader( - threadItem : DWORD; // ƒNƒ‰ƒX‚̃Cƒ“ƒXƒ^ƒ“ƒX + threadItem : DWORD; // ThreadItem ‚̃Cƒ“ƒXƒ^ƒ“ƒX inOptionalHeader : string // ’ljÁ‚̃wƒbƒ_ ) : string; // ®Œ`‚³‚ꂽ HTML var @@ -417,8 +500,11 @@ begin if Assigned( FGetHeader ) then begin tmp := FGetHeader( threadItem, PChar( inOptionalHeader ) ); - Result := string( tmp ); - DisposeResultString( tmp ); + try + Result := string( tmp ); + finally + DisposeResultString( tmp ); + end; end; end; @@ -427,7 +513,7 @@ end; // ƒXƒŒƒbƒh‚̃tƒbƒ^ html ‚ð—v‹ // ************************************************************************* function TBoardPlugIn.GetFooter( - threadItem : DWORD; // ƒNƒ‰ƒX‚̃Cƒ“ƒXƒ^ƒ“ƒX + threadItem : DWORD; // ThreadItem ‚̃Cƒ“ƒXƒ^ƒ“ƒX inOptionalFooter : string // ’ljÁ‚̃tƒbƒ^ ) : string; // ®Œ`‚³‚ꂽ HTML var @@ -443,747 +529,151 @@ begin end; // ************************************************************************* -// ƒvƒ‰ƒOƒCƒ“‚Ì API ‚ðŽæ“¾ -// ************************************************************************* -procedure TBoardPlugIn.LoadPlugInAPI; -begin - - try - if Assigned( Pointer( FModule ) ) then begin - FVersionInfo := GetProcAddress( FModule, 'OnVersionInfo' ); - FAcceptURL := GetProcAddress( FModule, 'OnAcceptURL' ); - FCreateThreadItem := GetProcAddress( FModule, 'ThreadItemCreate' ); - FDisposeThreadItem := GetProcAddress( FModule, 'ThreadItemDispose' ); - FDownload := GetProcAddress( FModule, 'ThreadItemOnDownload' ); - FGetRes := GetProcAddress( FModule, 'ThreadItemOnGetRes' ); - FGetHeader := GetProcAddress( FModule, 'ThreadItemOnGetHeader' ); - FGetFooter := GetProcAddress( FModule, 'ThreadItemOnGetFooter' ); - end; - except - end; - -end; - - - -// ========================================================================= -// PlugInMain -// ========================================================================= - -// ************************************************************************* -// –ß‚è’l‚ª PChar ‚Å‚ ‚é API ‚̃ƒ‚ƒŠ‚ðŠm•Û‚·‚é -// ************************************************************************* -function CreateResultString( - resultStr : string -) : PChar; stdcall; -var - tmp : PChar; -begin - - tmp := PChar( resultStr ); - GetMem( Result, Length( tmp ) + 1 ); - Move( tmp^, Result^, Length( tmp ) + 1 ); - -end; - -// ************************************************************************* -// –ß‚è’l‚ª PChar ‚Å‚ ‚é API ‚̃ƒ‚ƒŠ‚ðŠJ•ú‚·‚é -// ************************************************************************* -procedure DisposeResultString( - resultStr : PChar -); stdcall; -begin - - FreeMem( resultStr ); - -end; - -// ************************************************************************* -// ƒvƒƒOƒ‰ƒ€–{‘̂̃o[ƒWƒ‡ƒ“‚ðŽæ“¾‚·‚é -// ************************************************************************* -procedure VersionInfo( - var outAgent : PChar; // ƒo[ƒWƒ‡ƒ“‚ðˆêØŠÜ‚Ü‚È‚¢ƒˆ‚È–¼Ì - var outMajor : DWORD; // ƒƒWƒƒ[ƒo[ƒWƒ‡ƒ“ - var outMinor : DWORD; // ƒ}ƒCƒi[ƒo[ƒWƒ‡ƒ“ - var outRelease : PChar; // ƒŠƒŠ[ƒX’iŠK–¼ - var outRevision : DWORD // ƒŠƒrƒWƒ‡ƒ“ƒiƒ“ƒo[ -); stdcall; -begin - - outAgent := CreateResultString( PChar( APP_NAME ) ); - outMajor := 1; - outMinor := 0; - outRelease := CreateResultString( PChar( BETA_VERSION_NAME_E ) ); - outRevision := BETA_VERSION; - -end; - -// ************************************************************************* -// Žw’肵‚½ URL ‚ðƒ_ƒEƒ“ƒ[ƒh‚µ‚Ä•Ô‚· -// ************************************************************************* -function InternalDownload( - inURL : PChar; // ƒ_ƒEƒ“ƒ[ƒh‚·‚é URL - var ioModified : Double; // ÅŒã‚Ɏ擾‚µ‚½“úŽž - var outResultData : PChar; // ƒ_ƒEƒ“ƒ[ƒh‚³‚ꂽ•¶Žš—ñ - inRangeStart : DWORD; // ŠJŽnˆÊ’u - inRangeEnd : DWORD // I—¹ˆÊ’u -) : Longint; stdcall; // ƒŒƒXƒ|ƒ“ƒXƒR[ƒh -var - httpSocket : TIdHTTP; - resStream : TMemoryStream; - content : string; -begin - - Result := -1; - - httpSocket := TIdHTTP.Create( nil ); - try - // ƒCƒxƒ“ƒg‚̐ݒè - if Assigned( OnWork ) then - httpSocket.OnWork := OnWork; - if Assigned( OnWorkBegin ) then - httpSocket.OnWorkBegin := OnWorkBegin; - if Assigned( OnWorkEnd ) then - httpSocket.OnWorkEnd := OnWorkEnd; - - // ’ʐM‚ÉŠÖ‚·‚éÝ’è - httpSocket.Request.CustomHeaders.Clear; - httpSocket.Response.Clear; - httpSocket.Request.Clear; - - httpSocket.Request.UserAgent := GikoSys.GetUserAgent; - httpSocket.RecvBufferSize := Gikosys.Setting.RecvBufferSize; - httpSocket.ProxyParams.BasicAuthentication := False; - {$IFDEF DEBUG} - Writeln('------------------------------------------------------------'); - {$ENDIF} - //httpSocket.AllowCookies := False; - if GikoSys.Setting.ReadProxy then begin - if GikoSys.Setting.ProxyProtocol then - httpSocket.ProtocolVersion := pv1_1 - else - httpSocket.ProtocolVersion := pv1_0; - httpSocket.ProxyParams.ProxyServer := GikoSys.Setting.ReadProxyAddress; - httpSocket.ProxyParams.ProxyPort := GikoSys.Setting.ReadProxyPort; - httpSocket.ProxyParams.ProxyUsername := GikoSys.Setting.ReadProxyUserID; - httpSocket.ProxyParams.ProxyPassword := GikoSys.Setting.ReadProxyPassword; - if GikoSys.Setting.ReadProxyUserID <> '' then - httpSocket.ProxyParams.BasicAuthentication := True; - {$IFDEF DEBUG} - Writeln('ƒvƒƒLƒVÝ’è‚ ‚è'); - Writeln('ƒzƒXƒg: ' + GikoSys.Setting.ReadProxyAddress); - Writeln('ƒ|[ƒg: ' + IntToStr( GikoSys.Setting.ReadProxyPort )); - {$ENDIF} - end else begin - if GikoSys.Setting.Protocol then - httpSocket.ProtocolVersion := pv1_1 - else - httpSocket.ProtocolVersion := pv1_0; - httpSocket.ProxyParams.ProxyServer := ''; - httpSocket.ProxyParams.ProxyPort := 80; - httpSocket.ProxyParams.ProxyUsername := ''; - httpSocket.ProxyParams.ProxyPassword := ''; - {$IFDEF DEBUG} - Writeln('ƒvƒƒLƒVÝ’è‚È‚µ'); - {$ENDIF} - end; - - httpSocket.Request.ContentRangeStart := inRangeStart; - httpSocket.Request.ContentRangeEnd := inRangeEnd; - if (ioModified <> 0) and (ioModified <> ZERO_DATE) then - httpSocket.Request.LastModified := ioModified - OffsetFromUTC; - if inRangeStart = 0 then - httpSocket.Request.AcceptEncoding := 'gzip' - else - httpSocket.Request.AcceptEncoding := ''; - httpSocket.Request.Accept := 'text/html'; - - resStream := TMemoryStream.Create; - try - try - resStream.Clear; - - {$IFDEF DEBUG} - Writeln('URL: ' + inURL); - {$ENDIF} - httpSocket.Get( inURL, resStream ); - {$IFDEF DEBUG} - Writeln('Žæ“¾‚Å—áŠO‚È‚µ'); - {$ENDIF} - - content := GikoSys.GzipDecompress( resStream, httpSocket.Response.ContentEncoding ); - ioModified := httpSocket.Response.LastModified; - - Result := httpSocket.ResponseCode; - if (Length( content ) = 0) and (Result = 206) then - Result := 304; - - outResultData := CreateResultString( content ); - except - on E: EIdSocketError do begin - ioModified := ZERO_DATE; - outResultData := nil; - end; - on E: EIdConnectException do begin - ioModified := ZERO_DATE; - outResultData := nil; - //Item.ErrText := E.Message; - end; - on E: Exception do begin - {$IFDEF DEBUG} - Writeln('Žæ“¾‚Å—áŠO‚ ‚è'); - Writeln('E.Message: ' + E.Message); - {$ENDIF} - ioModified := ZERO_DATE; - outResultData := nil; - Result := httpSocket.ResponseCode; - //Item.ErrText := E.Message; - end; - end; - finally - resStream.Free; - end; - - finally - httpSocket.Free; - end; - -end; - -// ************************************************************************* -// ‚Q‚¿‚á‚ñ‚Ë‚é‚Ì dat Œ`Ž®‚ðƒ[ƒJƒ‹‚ ‚ځ`‚ñ‚É’Ê‚· +// ‚±‚Ì ThreadItem ‚ª‘®‚·‚é”Â‚Ì URL ‚ð—v‹ // ************************************************************************* -function InternalAbon( - inDatText : PChar // –¼‘O<>ƒ[ƒ‹<>“ú•tID<>–{•¶<>[‰üs] ‚ō\¬‚³‚ꂽƒeƒLƒXƒg -) : PChar; stdcall; // ‚ ‚ځ`‚ñÏ‚Ý‚Ì dat Œ`Ž®ƒeƒLƒXƒg +function TBoardPlugIn.GetBoardURL( + threadItem : DWORD // ThreadItem ‚̃Cƒ“ƒXƒ^ƒ“ƒX +) : string; var - datList : TStringList; -begin - - datList := TStringList.Create; - datList.Text := string( inDatText ); - //GikoSys.FAbon.IndividualAbon( datList, ChangeFileExt(FileName,'.NG')); - GikoSys.FAbon.Execute( datList ); - GikoSys.FSelectResFilter.Execute( datList ); - - Result := CreateResultString( datList.Text ); - -end; - -// ************************************************************************* -// ‚Q‚¿‚á‚ñ‚Ë‚é‚Ì dat Œ`Ž® 1 s‚ð HTML ‚É•ÏŠ·‚·‚é -// ************************************************************************* -function InternalDat2HTML( - inDatRes : PChar; // –¼‘O<>ƒ[ƒ‹<>“ú•tID<>–{•¶<> ‚ō\¬‚³‚ꂽƒeƒLƒXƒg - inResNo : DWORD; // ƒŒƒX”ԍ† - inIsNew : Boolean // V’…ƒŒƒX‚È‚ç True -) : PChar; stdcall; // ®Œ`‚³‚ꂽ HTML -var - board : TBoard; - threadItem : TThreadItem; + tmp : PChar; begin - // ƒ_ƒ~[‚̃Nƒ‰ƒX - board := TBoard.Create; - threadItem := TThreadItem.Create; - - try - threadItem.ParentBoard := Board; - - Result := ThreadItemDat2HTML( DWORD( threadItem ), inDatRes, inResNo, inIsNew ); - except - Result := nil; + if Assigned( FGetBoardURL ) then begin + tmp := FGetBoardURL( threadItem ); + Result := string( tmp ); + DisposeResultString( tmp ); end; end; - - -// ========================================================================= -// FilePath -// ========================================================================= - -// ************************************************************************* -// ƒuƒ‰ƒEƒU–{‘Ì‚ª’u‚¢‚Ä‚ ‚éƒtƒHƒ‹ƒ_ -// ************************************************************************* -function ApplicationFolder : PChar; stdcall; -begin - - Result := CreateResultString( GikoSys.GetAppDir ); - -end; - -// ************************************************************************* -// ‰ŠúÝ’èƒtƒHƒ‹ƒ_ -// ************************************************************************* -function PreferencesFolder : PChar; stdcall; -begin - - Result := CreateResultString( GikoSys.GetConfigDir ); - -end; - -// ************************************************************************* -// ‰ŠúÝ’èƒtƒ@ƒCƒ‹ -// ************************************************************************* -function PreferencesFile : PChar; stdcall; -begin - - Result := CreateResultString( GikoSys.GetAppDir + 'gikoNavi.ini' ); - -end; - -// ************************************************************************* -// ƒƒOƒtƒHƒ‹ƒ_ -// ************************************************************************* -function LogFolder : PChar; stdcall; -begin - - Result := CreateResultString( GikoSys.GetAppDir + 'Log\' ); - -end; - -// ************************************************************************* -// CSS ƒtƒHƒ‹ƒ_ -// ************************************************************************* -function CSSFolder : PChar; stdcall; -begin - - Result := CreateResultString( GikoSys.GetStyleSheetDir ); - -end; - -// ************************************************************************* -// ƒXƒLƒ“‚ð“ü‚ê‚Ä‚¨‚­ƒtƒHƒ‹ƒ_ -// ************************************************************************* -function SkinFolder : PChar; stdcall; -begin - - Result := CreateResultString( GikoSys.GetSkinDir ); - -end; - // ************************************************************************* -// Žg—p‚µ‚Ä‚¢‚é CSS / ƒXƒLƒ“ +// TBoardItem ‚ª¶¬‚³‚ꂽ // ************************************************************************* -function SkinFile : PChar; stdcall; -begin - - Result := CreateResultString( GikoSys.Setting.CSSFileName ); - -end; - -// ************************************************************************* -// ‚ ‚ځ[‚ñ‹K‘¥‚ª’u‚¢‚Ä‚ ‚éƒfƒBƒŒƒNƒgƒŠ -// ************************************************************************* -function AbonFolder : PChar; stdcall; +procedure TBoardPlugIn.CreateBoardItem( + boardItem : DWORD // BoardItem ‚̃Cƒ“ƒXƒ^ƒ“ƒX +); begin - Result := CreateResultString( GikoSys.Setting.GetNGWordsDir ); + if Assigned( FCreateBoardItem ) then + FCreateBoardItem( boardItem ); end; // ************************************************************************* -// Žg—p‚µ‚Ä‚¢‚é‚ ‚ځ[‚ñ‹K‘¥ +// TBoardItem ‚ª”jŠü‚³‚ꂽ // ************************************************************************* -function AbonFile : PChar; stdcall; +procedure TBoardPlugIn.DisposeBoardItem( + boardItem : DWORD // BoardItem ‚̃Cƒ“ƒXƒ^ƒ“ƒX +); begin - Result := CreateResultString( GikoSys.FAbon.GetNGwordpath ); + if Assigned( FDisposeBoardItem ) then + FDisposeBoardItem( boardItem ); end; - - -// ========================================================================= -// ThreadItem -// ========================================================================= - // ************************************************************************* -// TThreadItem ƒNƒ‰ƒX‚̃vƒƒpƒeƒB‚ðŽæ“¾‚·‚é +// ƒ_ƒEƒ“ƒ[ƒh‚ðŽwŽ¦ // ************************************************************************* -function ThreadItemGetLong( - instance : DWORD; - propertyID : TThreadItemProperty -) : DWORD; stdcall; -var - threadItem : TThreadItem; +function TBoardPlugIn.DownloadBoard( + boardItem : DWORD // BoardItem ‚̃Cƒ“ƒXƒ^ƒ“ƒX +) : TDownloadState; begin - threadItem := TThreadItem( instance ); - case propertyID of - tipContext: // : DWORD // Ž©—R‚ɐݒ肵‚Ä‚¢‚¢’l - Result := threadItem.Context; - tipNo: // : Integer // ”ԍ† - Result := threadItem.No; - tipFileName: // : string // ƒXƒŒƒbƒhƒtƒ@ƒCƒ‹–¼ - Result := DWORD( CreateResultString( threadItem.FileName ) ); - tipTitle: // : string // ƒXƒŒƒbƒhƒ^ƒCƒgƒ‹ - Result := DWORD( CreateResultString( threadItem.Title ) ); - tipCount: // : Integer // ƒXƒŒƒbƒhƒJƒEƒ“ƒgiƒ[ƒJƒ‹j - Result := threadItem.Count; - tipAllResCount: // : Integer // ƒXƒŒƒbƒhƒJƒEƒ“ƒgiƒT[ƒoj - Result := threadItem.AllResCount; - tipNewResCount: // : Integer // ƒXƒŒƒbƒhV’…” - Result := threadItem.NewResCount; - tipSize: // : Integer // ƒXƒŒƒbƒhƒTƒCƒY - Result := threadItem.Size; - tipRound: // : Boolean // „‰ñƒtƒ‰ƒO - Result := DWORD( threadItem.Round ); - tipRoundName: // : string // „‰ñ–¼ - Result := DWORD( CreateResultString( threadItem.RoundName ) ); - tipIsLogFile: // : Boolean // ƒƒO‘¶Ýƒtƒ‰ƒO - Result := DWORD( threadItem.IsLogFile ); - tipKokomade: // : Integer // ƒRƒR‚Ü‚Å“Ç‚ñ‚¾”ԍ† - Result := threadItem.Kokomade; - tipNewReceive: // : Integer // ƒRƒR‚©‚çV‹KŽóM - Result := threadItem.NewReceive; - tipNewArrival: // : Boolean // V’… - Result := DWORD( threadItem.NewArrival ); - tipUnRead: // : Boolean // –¢“ǃtƒ‰ƒO - Result := DWORD( threadItem.UnRead ); - tipScrollTop: // : Integer // ƒXƒNƒ[ƒ‹ˆÊ’u - Result := threadItem.ScrollTop; - tipDownloadHost: // : string // ¡‚̃zƒXƒg‚ƈႤê‡‚̃zƒXƒg - Result := DWORD( CreateResultString( threadItem.DownloadHost ) ); - tipAgeSage: // : TThreadAgeSage // ƒAƒCƒeƒ€‚̏グ‰º‚° - Result := DWORD( threadItem.AgeSage ); - tipURL: // : string // ƒXƒŒƒbƒh‚ðƒuƒ‰ƒEƒU‚Å•\Ž¦‚·‚éÛ‚Ì URL - Result := DWORD( CreateResultString( threadItem.URL ) ); - tipFilePath: // ‚±‚̃XƒŒ‚ª•Û‘¶‚³‚ê‚Ä‚¢‚éƒpƒX - Result := DWORD( CreateResultString( threadItem.FilePath ) ); + if Assigned( FDownloadBoard ) then + Result := FDownloadBoard( boardItem ) else - Result := 0; - end; -end; - -// ************************************************************************* -// TThreadItem ƒNƒ‰ƒX‚̃vƒƒpƒeƒB‚ðÝ’è‚·‚é -// ************************************************************************* -procedure ThreadItemSetLong( - instance : DWORD; - propertyID : TThreadItemProperty; - param : DWORD -); stdcall; -var - threadItem : TThreadItem; -begin - - threadItem := TThreadItem( instance ); - case propertyID of - tipContext: // : DWORD // Ž©—R‚ɐݒ肵‚Ä‚¢‚¢’l - threadItem.Context := param; - tipNo: // : Integer // ”ԍ† - threadItem.No := param; - tipFileName: // : string // ƒXƒŒƒbƒhƒtƒ@ƒCƒ‹–¼ - threadItem.FileName := string( PChar( param ) ); - tipTitle: // : string // ƒXƒŒƒbƒhƒ^ƒCƒgƒ‹ - threadItem.Title := string( PChar( param ) ); - tipCount: // : Integer // ƒXƒŒƒbƒhƒJƒEƒ“ƒgiƒ[ƒJƒ‹j - threadItem.Count := param; - tipAllResCount: // : Integer // ƒXƒŒƒbƒhƒJƒEƒ“ƒgiƒT[ƒoj - threadItem.AllResCount := param; - tipNewResCount: // : Integer // ƒXƒŒƒbƒhV’…” - threadItem.NewResCount := param; - tipSize: // : Integer // ƒXƒŒƒbƒhƒTƒCƒY - threadItem.Size := param; - tipRound: // : Boolean // „‰ñƒtƒ‰ƒO - threadItem.Round := Boolean( param ); - tipRoundName: // : string // „‰ñ–¼ - threadItem.RoundName := string( PChar( param ) ); - tipIsLogFile: // : Boolean // ƒƒO‘¶Ýƒtƒ‰ƒO - threadItem.IsLogFile := Boolean( param ); - tipKokomade: // : Integer // ƒRƒR‚Ü‚Å“Ç‚ñ‚¾”ԍ† - threadItem.Kokomade := param; - tipNewReceive: // : Integer // ƒRƒR‚©‚çV‹KŽóM - threadItem.NewReceive := param; - tipNewArrival: // : Boolean // V’… - threadItem.NewArrival := Boolean( param ); - tipUnRead: // : Boolean // –¢“ǃtƒ‰ƒO - threadItem.UnRead := Boolean( param ); - tipScrollTop: // : Integer // ƒXƒNƒ[ƒ‹ˆÊ’u - threadItem.ScrollTop := param; - tipDownloadHost: // : string // ¡‚̃zƒXƒg‚ƈႤê‡‚̃zƒXƒg - threadItem.DownloadHost := string( PChar( param ) ); - tipAgeSage: // : TThreadAgeSage // ƒAƒCƒeƒ€‚̏グ‰º‚° - threadItem.AgeSage := TGikoAgeSage( param ); - tipURL: // : string // ƒXƒŒƒbƒh‚ðƒuƒ‰ƒEƒU‚Å•\Ž¦‚·‚éÛ‚Ì URL - threadItem.URL := string( PChar( param ) ); - tipFilePath: // : string // ‚±‚̃XƒŒ‚ª•Û‘¶‚³‚ê‚Ä‚¢‚éƒpƒX - threadItem.FilePath := string( PChar( param ) ); - end; + Result := dsError; end; // ************************************************************************* -// TThreadItem ƒNƒ‰ƒX‚̃vƒƒpƒeƒB‚ðŽæ“¾‚·‚é +// ƒXƒŒ—§‚Ä‚ðŽwŽ¦ // ************************************************************************* -function ThreadItemGetDouble( - instance : DWORD; - propertyID : TThreadItemProperty -) : Double; stdcall; -var - threadItem : TThreadItem; +function TBoardPlugIn.CreateThread( + boardItem : DWORD; // BoardItem ‚̃Cƒ“ƒXƒ^ƒ“ƒX + inSubject : string; // ƒXƒŒƒ^ƒC + inName : string; // –¼‘O(ƒnƒ“ƒhƒ‹) + inMail : string; // ƒ[ƒ‹ƒAƒhƒŒƒX + inMessage : string // –{•¶ +) : TDownloadState; // ‘‚«ž‚Ý‚ª¬Œ÷‚µ‚½‚©‚Ç‚¤‚© begin - threadItem := TThreadItem( instance ); - case propertyID of - tipRoundDate: // : TDateTime // ƒXƒŒƒbƒh‚ðŽæ“¾‚µ‚½“úŽži„‰ñ“úŽžj - Result := threadItem.RoundDate; - tipLastModified: // : TDateTime // ƒXƒŒƒbƒh‚ªXV‚³‚ê‚Ä‚¢‚é“úŽžiƒT[ƒo‘¤“úŽžj - Result := threadItem.LastModified; + if Assigned( FCreateThread ) then + Result := FCreateThread( boardItem, PChar( inSubject ), PChar( inName ), PChar( inMail ), PChar( inMessage ) ) else - Result := 0; - end; + Result := dsError; end; // ************************************************************************* -// TThreadItem ƒNƒ‰ƒX‚̃vƒƒpƒeƒB‚ðÝ’è‚·‚é +// ‚±‚̔‚ɕۗL‚µ‚Ä‚¢‚éƒXƒŒ‚ð—ñ‹“ // ************************************************************************* -procedure ThreadItemSetDouble( - instance : DWORD; - propertyID : TThreadItemProperty; - param : Double -); stdcall; -var - threadItem : TThreadItem; +procedure TBoardPlugIn.EnumThread( + boardItem : DWORD; // BoardItem ‚̃Cƒ“ƒXƒ^ƒ“ƒX + inCallBack : TBoardItemEnumThreadCallBack +); begin - threadItem := TThreadItem( instance ); - case propertyID of - tipRoundDate: // : TDateTime // ƒXƒŒƒbƒh‚ðŽæ“¾‚µ‚½“úŽži„‰ñ“úŽžj - threadItem.RoundDate := param; - tipLastModified: // : TDateTime // ƒXƒŒƒbƒh‚ªXV‚³‚ê‚Ä‚¢‚é“úŽžiƒT[ƒo‘¤“úŽžj - threadItem.LastModified := param; - end; + if Assigned( FEnumThread ) then + FEnumThread( boardItem, inCallBack ); end; // ************************************************************************* -// TThreadItem ƒNƒ‰ƒX‚ðŒ³‚É‚Q‚¿‚á‚ñ‚Ë‚é‚Ì dat Œ`Ž® 1 s‚ð HTML ‚É•ÏŠ·‚·‚é +// ƒtƒ@ƒCƒ‹–¼‚©‚çƒXƒŒƒbƒh‚Ì URL ‚ð—v‹ // ************************************************************************* -function ThreadItemDat2HTML( - inInstance : DWORD; // ƒNƒ‰ƒX‚̃Cƒ“ƒXƒ^ƒ“ƒX - inDatRes : PChar; // –¼‘O<>ƒ[ƒ‹<>“ú•tID<>–{•¶<> ‚ō\¬‚³‚ꂽƒeƒLƒXƒg - inResNo : DWORD; // ƒŒƒX”ԍ† - inIsNew : Boolean // V’…ƒŒƒX‚È‚ç True -) : PChar; stdcall; // ®Œ`‚³‚ꂽ HTML +function TBoardPlugIn.FileName2ThreadURL( + boardItem : DWORD; // BoardItem ‚̃Cƒ“ƒXƒ^ƒ“ƒX + inFileName : string +) : string; var - threadItem : TThreadItem; - res : TResRec; - no : string; + tmp : PChar; begin - threadItem := TThreadItem( inInstance ); - // ˆø”‚𕪉ð - res := GikoSys.DivideStrLine( string( inDatRes ) ); - no := IntToStr( inResNo ); - - try - if GikoSys.Setting.UseSkin then begin - // ƒXƒLƒ“ - if inIsNew then - Result := CreateResultString( GikoSys.SkinedRes( - GikoSys.LoadFromSkin( - GikoSys.Setting.GetSkinNewResFileName, threadItem, threadItem.SizeByte - ), res, no - ) ) - else - Result := CreateResultString( GikoSys.SkinedRes( - GikoSys.LoadFromSkin( - GikoSys.Setting.GetSkinResFileName, threadItem, threadItem.SizeByte - ), res, no - ) ); - end else begin - // CSS or ƒfƒtƒHƒ‹ƒg - if res.FName = '' then - res.FName := ' '; - if res.FMailTo = '' then - Result := CreateResultString( '' - + '
' + no + ' ' - + '–¼‘OF ' - + '' + res.FName + ' ' - + '“Še“úF ' - + '' + res.FDateTime+ '
' - + '
' + res.FBody + '
' ) - else if GikoSys.Setting.ShowMail then - Result := CreateResultString( '' - + '
' + no + '' - + ' –¼‘OF ' - + '' - + '' + res.FName + ' [' + res.FMailTo + ']' - + ' “Še“úF' - + ' ' + res.FDateTime+ '
' - + '
' + res.FBody + '
' ) - else - Result := CreateResultString( '' - + '
' + no + '' - + ' –¼‘OF ' - + '' - + '' + res.FName + '' - + ' “Še“úF' - + ' ' + res.FDateTime+ '
' - + '
' + res.FBody + '
' ); - end; - except - Result := nil; + if Assigned( FFileName2ThreadURL ) then begin + tmp := FFileName2ThreadURL( boardItem, PChar( inFileName ) ); + Result := string( tmp ); + DisposeResultString( tmp ); end; end; // ************************************************************************* -// TThreadItem ƒNƒ‰ƒX‚ðŒ³‚ÉƒXƒŒƒbƒh‚̃wƒbƒ_‚ðŽæ“¾‚·‚é +// ƒvƒ‰ƒOƒCƒ“‚Ì API ‚ðŽæ“¾ // ************************************************************************* -function ThreadItemGetHeader( - inInstance : DWORD; // ƒNƒ‰ƒX‚̃Cƒ“ƒXƒ^ƒ“ƒX - inOptionalHeader : PChar // ’ljÁ‚̃wƒbƒ_ -) : PChar; stdcall; // ®Œ`‚³‚ꂽ HTML -var - threadItem : TThreadItem; - skinHeader : string; - optionalHeader : string; +procedure TBoardPlugIn.LoadPlugInAPI; begin - threadItem := TThreadItem( inInstance ); - optionalHeader := string( inOptionalHeader ); - try - if GikoSys.Setting.UseSkin then begin - // ƒXƒLƒ“ - skinHeader := GikoSys.LoadFromSkin( GikoSys.Setting.GetSkinHeaderFileName, threadItem, threadItem.SizeByte ); - if Length( optionalHeader ) > 0 then - skinHeader := StringReplace( skinHeader, '', - string( optionalHeader ) + '', [] ); - end else if GikoSys.Setting.UseCSS then begin - // CSS - skinHeader := - '' + - '' + threadItem.Title + '' + - '' + - optionalHeader + - '' + - '' + - '
' + threadItem.Title + '
'; - end else begin - // ƒfƒtƒHƒ‹ƒg - skinHeader := - '' + - '' + threadItem.Title + '' + - optionalHeader + - '' + - '' + - '
' + threadItem.Title + '
'; - end; - except - end; - - Result := CreateResultString( skinHeader ); - -end; - -// ************************************************************************* -// TThreadItem ƒNƒ‰ƒX‚ðŒ³‚ÉƒXƒŒƒbƒh‚̃tƒbƒ^‚ðŽæ“¾‚·‚é -// ************************************************************************* -function ThreadItemGetFooter( - inInstance : DWORD; // ƒNƒ‰ƒX‚̃Cƒ“ƒXƒ^ƒ“ƒX - inOptionalFooter : PChar // ’ljÁ‚̃tƒbƒ^ -) : PChar; stdcall; // ®Œ`‚³‚ꂽ HTML -var - threadItem : TThreadItem; - skinFooter : string; - optionalFooter : string; -begin - - threadItem := TThreadItem( inInstance ); - optionalFooter := string( inOptionalFooter ); + if Assigned( Pointer( FModule ) ) then begin + FLoad := GetProcAddress( FModule, 'OnLoad' ); + FVersionInfo := GetProcAddress( FModule, 'OnVersionInfo' ); + FAcceptURL := GetProcAddress( FModule, 'OnAcceptURL' ); + FExtractBoardURL := GetProcAddress( FModule, 'OnExtractBoardURL' ); + FPlugInMenu := GetProcAddress( FModule, 'OnPlugInMenu' ); - try - if GikoSys.Setting.UseSkin then begin - skinFooter := GikoSys.LoadFromSkin( GikoSys.Setting.GetSkinFooterFileName, threadItem, threadItem.SizeByte ); - if Length( optionalFooter ) > 0 then - skinFooter := StringReplace( skinFooter, '', - string( optionalFooter ) + '', [] ); - end else begin - skinFooter := '' + - '' + - '' + - ''; + FCreateThreadItem := GetProcAddress( FModule, 'ThreadItemCreate' ); + FDisposeThreadItem := GetProcAddress( FModule, 'ThreadItemDispose' ); + FDownloadThread := GetProcAddress( FModule, 'ThreadItemOnDownload' ); + FWriteThread := GetProcAddress( FModule, 'ThreadItemOnWrite' ); + FGetRes := GetProcAddress( FModule, 'ThreadItemOnGetRes' ); + FGetDat := GetProcAddress( FModule, 'ThreadItemOnGetDat' ); + FGetHeader := GetProcAddress( FModule, 'ThreadItemOnGetHeader' ); + FGetFooter := GetProcAddress( FModule, 'ThreadItemOnGetFooter' ); + FGetBoardURL := GetProcAddress( FModule, 'ThreadItemOnGetBoardURL' ); + + FCreateBoardItem := GetProcAddress( FModule, 'BoardItemCreate' ); + FDisposeBoardItem := GetProcAddress( FModule, 'BoardItemDispose' ); + FDownloadBoard := GetProcAddress( FModule, 'BoardItemOnDownload' ); + FCreateThread := GetProcAddress( FModule, 'BoardItemOnCreateThread' ); + FEnumThread := GetProcAddress( FModule, 'BoardItemOnEnumThread' ); + FFileName2ThreadURL := GetProcAddress( FModule, 'BoardItemOnFileName2ThreadURL' ); end; except end; - Result := CreateResultString( skinFooter ); - -end; - -// ************************************************************************* -// ƒ_ƒEƒ“ƒ[ƒh‚ªis‚µ‚½ -// ************************************************************************* -procedure ThreadItemWork( - inInstance : DWORD; // ƒNƒ‰ƒX‚̃Cƒ“ƒXƒ^ƒ“ƒX - inWorkCount : Integer // Œ»Ý‚̐i•àó‹µ(ƒJƒEƒ“ƒg) -); stdcall; -begin - - if Assigned( OnWork ) then - OnWork( TObject( inInstance ), wmRead, inWorkCount ); - end; -// ************************************************************************* -// ƒ_ƒEƒ“ƒ[ƒh‚ªŽn‚Ü‚Á‚½ -// ************************************************************************* -procedure ThreadItemWorkBegin( - inInstance : DWORD; // ƒNƒ‰ƒX‚̃Cƒ“ƒXƒ^ƒ“ƒX - inWorkCountMax : Integer // ’ʐM‚̏I‚í‚è‚ðŽ¦‚·ƒJƒEƒ“ƒg -); stdcall; -begin - - if Assigned( OnWorkBegin ) then - OnWorkBegin( TObject( inInstance ), wmRead, inWorkCountMax ); - -end; - -// ************************************************************************* -// ƒ_ƒEƒ“ƒ[ƒh‚ªI‚í‚Á‚½ -// ************************************************************************* -procedure ThreadItemWorkEnd( - inInstance : DWORD // ƒNƒ‰ƒX‚̃Cƒ“ƒXƒ^ƒ“ƒX -); stdcall; -begin - - if Assigned( OnWorkEnd ) then - OnWorkEnd( TObject( inInstance ), wmRead ); - -end; - -exports - CreateResultString, - DisposeResultString, - VersionInfo, - ApplicationFolder, - PreferencesFolder, - PreferencesFile, - LogFolder, - CSSFolder, - SkinFolder, - SkinFile, - AbonFolder, - AbonFile, - InternalDownload, - InternalAbon, - InternalDat2HTML, - ThreadItemGetLong, - ThreadItemSetLong, - ThreadItemGetDouble, - ThreadItemSetDouble, - ThreadItemDat2HTML, - ThreadItemGetHeader, - ThreadItemGetFooter, - ThreadItemWork, - ThreadItemWorkBegin, - ThreadItemWorkEnd; - end.