X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=ExternalBoardManager.pas;h=a298e4b48170028e463db878aad19b8a8a16a1a5;hb=20bba43133ed0b8e5115bba320604c704d1bdd5c;hp=f4fb737a4098dd9e91c16b7199914219e491b9ce;hpb=3ae9fd779f93b6ab45af51df5b5f17e5baaac9d6;p=gikonavigoeson%2Fgikonavi.git diff --git a/ExternalBoardManager.pas b/ExternalBoardManager.pas index f4fb737..a298e4b 100644 --- a/ExternalBoardManager.pas +++ b/ExternalBoardManager.pas @@ -4,389 +4,676 @@ interface uses Windows, Classes, SysUtils, - GikoSystem, BoardGroup, AbonUnit; + IdHTTP, IdComponent, IdGlobal, IdException, + 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 - ); + // ========================================================================= + // ƒvƒ‰ƒOƒCƒ“‚ðŠÇ—‚·‚é TBoardPlugin ƒNƒ‰ƒX + // ========================================================================= + TBoardPlugIn = class( TObject ) + private + 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; + 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 ); + // ƒvƒ‰ƒOƒCƒ“–¼‚ðŽw’肵‚㍁[ƒh + 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 ) : 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Ž¦ + 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; + + public + property FilePath : string read FFilePath; + property Module : HMODULE read FModule; + end; + +var + OnWork : TWorkEvent; + OnWorkBegin : TWorkBeginEvent; + OnWorkEnd : TWorkEndEvent; + + BoardPlugIns : array of TBoardPlugIn; + +procedure InitializeBoardPlugIns; implementation -// –ß‚è’l‚ª PChar ‚Å‚ ‚é API ‚̃ƒ‚ƒŠ‚ðŠm•Û‚·‚é -function CreateResultString( - resultStr : string -) : PChar; stdcall; +uses GikoSystem, BoardGroup; + +// ************************************************************************* +// BoardPlugin ƒtƒHƒ‹ƒ_‚É‚ ‚éƒvƒ‰ƒOƒCƒ“‚ð‘S‚㍁[ƒh +// ************************************************************************* +procedure InitializeBoardPlugIns; var - tmp : PChar; + i, bound : Integer; + pluginNames : TStringList; begin - tmp := PChar( resultStr ); - GetMem( Result, Length( resultStr ) + 1 ); - Move( tmp, Result, Length( resultStr ) + 1 ); + pluginNames := TStringList.Create; + try + //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 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; end; -// –ß‚è’l‚ª PChar ‚Å‚ ‚é API ‚̃ƒ‚ƒŠ‚ðŠJ•ú‚·‚é -procedure DisposeResultString( - resultStr : PChar -); stdcall; + + +// ========================================================================= +// ƒvƒ‰ƒOƒCƒ“‚ðŠÇ—‚·‚é TBoardPlugin ƒNƒ‰ƒX +// ========================================================================= + +// ************************************************************************* +// ƒRƒ“ƒXƒgƒ‰ƒNƒ^ +// ************************************************************************* +constructor TBoardPlugIn.Create; begin - FreeMem( resultStr ); + 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; -function ApplicationFolder : PChar; stdcall; +// ************************************************************************* +// ƒvƒ‰ƒOƒCƒ“‚̃pƒX‚ðŽw’肵‚č쐬 +// ************************************************************************* +constructor TBoardPlugIn.CreateFromPath( + inPath : string +); begin - Result := CreateResultString( GikoSys.GetAppDir ); + Create; + + LoadFromPath( inPath ); end; -function PreferencesFolder : PChar; stdcall; +// ************************************************************************* +// ƒvƒ‰ƒOƒCƒ“–¼‚ðŽw’肵‚č쐬 +// ************************************************************************* +constructor TBoardPlugIn.CreateFromName( + inName : string +); begin - Result := CreateResultString( GikoSys.GetConfigDir ); + Create; + + LoadFromName( inName ); end; -function PreferencesFile : PChar; stdcall; +// ************************************************************************* +// ƒ‚ƒWƒ…[ƒ‹ƒnƒ“ƒhƒ‹‚ðŽw’肵‚č쐬 +// ************************************************************************* +constructor TBoardPlugIn.CreateFromModule( + inModule : HMODULE +); begin - Result := CreateResultString( GikoSys.GetAppDir + 'gikoNavi.ini' ); + inherited Create; + + LoadFromModule( inModule ); end; -function LogFolder : PChar; stdcall; +// ************************************************************************* +// ƒfƒXƒgƒ‰ƒNƒ^ +// ************************************************************************* +destructor TBoardPlugIn.Destroy; begin - Result := CreateResultString( GikoSys.GetAppDir + 'Log\' ); + FreeLibrary( FModule ); + + inherited; end; -function CSSFolder : PChar; stdcall; +// ************************************************************************* +// ƒvƒ‰ƒOƒCƒ“‚̃pƒX‚ðŽw’肵‚㍁[ƒh +// ************************************************************************* +procedure TBoardPlugIn.LoadFromPath( + inPath : string +); begin - Result := CreateResultString( GikoSys.GetStyleSheetDir ); + FFilePath := inPath; + if FileExists( inPath ) then + FModule := LoadLibrary( PChar( inPath ) ) + else if FileExists( inPath + '.dll' ) then + FModule := LoadLibrary( PChar( inPath + '.dll' ) ); + + LoadPlugInAPI; end; -function SkinFolder : PChar; stdcall; +// ************************************************************************* +// ƒvƒ‰ƒOƒCƒ“–¼‚ðŽw’肵‚㍁[ƒh +// ************************************************************************* +procedure TBoardPlugIn.LoadFromName( + inName : string +); begin - Result := CreateResultString( GikoSys.GetSkinDir ); + LoadFromPath( GikoSys.Setting.GetBoardPlugInDir + inName ); end; -function SkinFile : PChar; stdcall; +// ************************************************************************* +// ƒ‚ƒWƒ…[ƒ‹ƒnƒ“ƒhƒ‹‚ðŽw’肵‚㍁[ƒh +// ************************************************************************* +procedure TBoardPlugIn.LoadFromModule( + inModule : HMODULE +); +var + tmp : array [0..MAX_PATH] of Char; begin - Result := CreateResultString( GikoSys.Setting.CSSFileName ); + GetModuleFileName( inModule, tmp, SizeOf( tmp ) ); + FFilePath := tmp; + FModule := inModule; + + LoadPlugInAPI; end; -// Žw’肵‚½ URL ‚ðƒ_ƒEƒ“ƒ[ƒh‚µ‚Ä•Ô‚· -function InternalDownload( - inURL : PChar // ƒ_ƒEƒ“ƒ[ƒh‚·‚é URL -) : PChar; stdcall; // ƒ_ƒEƒ“ƒ[ƒh‚³‚ꂽ•¶Žš—ñ +// ************************************************************************* +// ƒvƒ‰ƒOƒCƒ“‚ª(³‚µ‚­)ƒ[ƒh‚³‚ꂽ +// ************************************************************************* +procedure TBoardPlugIn.Loaded; begin + + if Assigned( FLoad ) then + FLoad( DWORD( Self ) ); + end; -// ‚Q‚¿‚á‚ñ‚Ë‚é‚Ì dat Œ`Ž®‚ðƒ[ƒJƒ‹‚ ‚ځ`‚ñ‚É’Ê‚· -function InternalAbon( - inDatText : PChar // –¼‘O<>ƒ[ƒ‹<>“ú•tID<>–{•¶<>[‰üs] ‚ō\¬‚³‚ꂽƒeƒLƒXƒg -) : PChar; stdcall; // ‚ ‚ځ`‚ñÏ‚Ý‚Ì dat Œ`Ž®ƒeƒLƒXƒg +// ************************************************************************* +// ƒo[ƒWƒ‡ƒ“î•ñ +// ************************************************************************* +procedure TBoardPlugIn.VersionInfo( + var outAgent : string; // ƒo[ƒWƒ‡ƒ“‚ðˆêØŠÜ‚Ü‚È‚¢ƒˆ‚È–¼Ì + var outMajor : DWORD; // ƒƒWƒƒ[ƒo[ƒWƒ‡ƒ“ + var outMinor : DWORD; // ƒ}ƒCƒi[ƒo[ƒWƒ‡ƒ“ + var outRelease : string; // ƒŠƒŠ[ƒX’iŠK–¼ + var outRevision : DWORD // ƒŠƒrƒWƒ‡ƒ“ƒiƒ“ƒo[ +); var - datList : TStringList; - dat : PChar; + agent : PChar; + release : PChar; 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 ); + if Assigned( FVersionInfo ) then begin + FVersionInfo( agent, outMajor, outMinor, release, outRevision ); + outAgent := string( agent ); + outRelease := string( release ); + DisposeResultString( agent ); + DisposeResultString( release ); + end; end; -// ‚Q‚¿‚á‚ñ‚Ë‚é‚Ì dat Œ`Ž® 1 s‚ðƒXƒLƒ“‚É’Ê‚· -function InternalSkin( - inDatRes : PChar; // –¼‘O<>ƒ[ƒ‹<>“ú•tID<>–{•¶<> ‚ō\¬‚³‚ꂽƒeƒLƒXƒg - inResNo : DWORD; // ƒŒƒX”ԍ† - inIsNew : Boolean // V’…ƒŒƒX‚È‚ç True -) : PChar; stdcall; // ®Œ`‚³‚ꂽ HTML +// ************************************************************************* +// Žw’肵‚½ URL ‚ð‚±‚Ìƒvƒ‰ƒOƒCƒ“‚Ŏ󂯕t‚¯‚é‚©‚Ç‚¤‚© +// ************************************************************************* +function TBoardPlugIn.AcceptURL( + inURL : string +) : TAcceptType; +begin + + if Assigned( FAcceptURL ) then + Result := FAcceptURL( PChar( inURL ) ) + else + Result := atNoAccept; + +end; +// ************************************************************************* +// Žw’肵‚½ URL ‚©‚çŽg‚¦‚éBoard‚ÌURL‚𓱂«o‚· +// ************************************************************************* +function TBoardPlugIn.ExtractBoardURL( + inURL : string +) : string; var - board : TBoard; - threadItem : TThreadItem; - sTitle : string; - res : TResRec; - no : string; + 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 - board := TBoard.Create; - threadItem := TThreadItem.Create; - res := GikoSys.DivideStrLine( string( inDatRes ) ); - no := IntToStr( inResNo ); + if Assigned( FPlugInMenu ) then + FPlugInMenu( inHandle ); - try - threadItem.ParentBoard := Board; - - if FileExists( GikoSys.GetSkinHeaderFileName ) then begin - if inIsNew then - Result := CreateResultString( GikoSys.SkinedRes( - GikoSYs.LoadFromSkin( - GikoSys.GetSkinNewResFileName, ThreadItem, sTitle, 0 - ), res, no - ) ) - else - Result := CreateResultString( GikoSys.SkinedRes( - GikoSYs.LoadFromSkin( - GikoSys.GetSkinResFileName, ThreadItem, sTitle, 0 - ), res, no - ) ); - end else begin - 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; + +// ************************************************************************* +// TThreadItem ‚ª¶¬‚³‚ꂽ +// ************************************************************************* +procedure TBoardPlugIn.CreateThreadItem( + threadItem : DWORD // ThreadItem ‚̃Cƒ“ƒXƒ^ƒ“ƒX +); +begin + + if Assigned( FCreateThreadItem ) then + FCreateThreadItem( threadItem ); + +end; + +// ************************************************************************* +// TThreadItem ‚ª”jŠü‚³‚ꂽ +// ************************************************************************* +procedure TBoardPlugIn.DisposeThreadItem( + threadItem : DWORD // ThreadItem ‚̃Cƒ“ƒXƒ^ƒ“ƒX +); +begin + + if Assigned( FDisposeThreadItem ) then + FDisposeThreadItem( threadItem ); + +end; + +// ************************************************************************* +// ƒ_ƒEƒ“ƒ[ƒh‚ðŽwŽ¦ +// ************************************************************************* +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( FWriteThread ) then + Result := FWriteThread( threadItem, PChar( inName ), PChar( inMail ), PChar( inMessage ) ) + else + Result := dsError; + +end; + +// ************************************************************************* +// ƒŒƒX”ԍ† n ‚ɑ΂·‚é html ‚ð—v‹ +// ************************************************************************* +function TBoardPlugIn.GetRes( + threadItem : DWORD; // ThreadItem ‚̃Cƒ“ƒXƒ^ƒ“ƒX + inNo : DWORD // •\Ž¦‚·‚郌ƒX”ԍ† +) : string; // •\Ž¦‚·‚é HTML +var + tmp : PChar; +begin + + if Assigned( FGetRes ) then begin + tmp := FGetRes( threadItem, inNo ); + try + Result := string( tmp ); + finally + DisposeResultString( tmp ); end; - except end; end; // ************************************************************************* -// TThreadItem ƒNƒ‰ƒX‚̃vƒƒpƒeƒB‚ðŽæ“¾‚·‚é +// ƒŒƒX”ԍ† n ‚ɑ΂·‚é Dat ‚ð—v‹ // ************************************************************************* -function ThreadItemGetLong( - instance : DWORD; - propertyID : TThreadItemProperty -) : DWORD; stdcall; +function TBoardPlugIn.GetDat( + threadItem : DWORD; // ThreadItem ‚̃Cƒ“ƒXƒ^ƒ“ƒX + inNo : DWORD // •\Ž¦‚·‚郌ƒX”ԍ† +) : string; // ‚Q‚¿‚á‚ñ‚Ë‚é‚ÌdatŒ`Ž® var - threadItem : TThreadItem; + tmp : PChar; 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 ) ); + if Assigned( FGetDat ) then begin + tmp := FGetDat( threadItem, inNo ); + try + Result := string( tmp ); + finally + DisposeResultString(tmp); end; end; + end; // ************************************************************************* -// TThreadItem ƒNƒ‰ƒX‚̃vƒƒpƒeƒB‚ðÝ’è‚·‚é +// ƒXƒŒƒbƒh‚̃wƒbƒ_ html ‚ð—v‹ // ************************************************************************* -procedure ThreadItemSetLong( - instance : DWORD; - propertyID : TThreadItemProperty; - param : DWORD -); stdcall; +function TBoardPlugIn.GetHeader( + threadItem : DWORD; // ThreadItem ‚̃Cƒ“ƒXƒ^ƒ“ƒX + inOptionalHeader : string // ’ljÁ‚̃wƒbƒ_ +) : string; // ®Œ`‚³‚ꂽ HTML var - threadItem : TThreadItem; + tmp : PChar; 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ƒ‹–¼ - begin - threadItem.FileName := string( PChar( param ) ); - DisposeResultString( PChar( param ) ); - end; - tipTitle: // : string // ƒXƒŒƒbƒhƒ^ƒCƒgƒ‹ - begin - threadItem.Title := string( PChar( param ) ); - DisposeResultString( PChar( param ) ); - end; - 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 // „‰ñ–¼ - begin - threadItem.RoundName := string( PChar( param ) ); - DisposeResultString( PChar( param ) ); - end; - 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 - begin - threadItem.DownloadHost := string( PChar( param ) ); - DisposeResultString( PChar( param ) ); - end; - tipAgeSage: // : TThreadAgeSage // ƒAƒCƒeƒ€‚̏グ‰º‚° - threadItem.AgeSage := TGikoAgeSage( param ); - tipURL: // : string // ƒXƒŒƒbƒh‚ðƒuƒ‰ƒEƒU‚Å•\Ž¦‚·‚éÛ‚Ì URL - begin - threadItem.URL := string( PChar( param ) ); - DisposeResultString( PChar( param ) ); + if Assigned( FGetHeader ) then begin + tmp := FGetHeader( threadItem, PChar( inOptionalHeader ) ); + try + Result := string( tmp ); + finally + DisposeResultString( tmp ); end; end; end; // ************************************************************************* -// TThreadItem ƒNƒ‰ƒX‚̃vƒƒpƒeƒB‚ðŽæ“¾‚·‚é +// ƒXƒŒƒbƒh‚̃tƒbƒ^ html ‚ð—v‹ // ************************************************************************* -function ThreadItemGetDouble( - instance : DWORD; - propertyID : TThreadItemProperty -) : Double; stdcall; +function TBoardPlugIn.GetFooter( + threadItem : DWORD; // ThreadItem ‚̃Cƒ“ƒXƒ^ƒ“ƒX + inOptionalFooter : string // ’ljÁ‚̃tƒbƒ^ +) : string; // ®Œ`‚³‚ꂽ HTML var - threadItem : TThreadItem; + tmp : PChar; 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( FGetFooter ) then begin + tmp := FGetFooter( threadItem, PChar( inOptionalFooter ) ); + Result := string( tmp ); + DisposeResultString( tmp ); end; end; // ************************************************************************* -// TThreadItem ƒNƒ‰ƒX‚̃vƒƒpƒeƒB‚ðÝ’è‚·‚é +// ‚±‚Ì ThreadItem ‚ª‘®‚·‚é”Â‚Ì URL ‚ð—v‹ // ************************************************************************* -procedure ThreadItemSetDouble( - instance : DWORD; - propertyID : TThreadItemProperty; - param : Double -); stdcall; +function TBoardPlugIn.GetBoardURL( + threadItem : DWORD // ThreadItem ‚̃Cƒ“ƒXƒ^ƒ“ƒX +) : string; var - threadItem : TThreadItem; + tmp : PChar; 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; + if Assigned( FGetBoardURL ) then begin + tmp := FGetBoardURL( threadItem ); + Result := string( tmp ); + DisposeResultString( tmp ); end; end; -exports - CreateResultString, - DisposeResultString, - ApplicationFolder, - PreferencesFolder, - PreferencesFile, - LogFolder, - CSSFolder, - SkinFolder, - SkinFile, - InternalDownload, - InternalAbon, - InternalSkin, - ThreadItemGetLong, - ThreadItemSetLong, - ThreadItemGetDouble, - ThreadItemSetDouble; +// ************************************************************************* +// TBoardItem ‚ª¶¬‚³‚ꂽ +// ************************************************************************* +procedure TBoardPlugIn.CreateBoardItem( + boardItem : DWORD // BoardItem ‚̃Cƒ“ƒXƒ^ƒ“ƒX +); +begin + + if Assigned( FCreateBoardItem ) then + FCreateBoardItem( boardItem ); + +end; + +// ************************************************************************* +// TBoardItem ‚ª”jŠü‚³‚ꂽ +// ************************************************************************* +procedure TBoardPlugIn.DisposeBoardItem( + boardItem : DWORD // BoardItem ‚̃Cƒ“ƒXƒ^ƒ“ƒX +); +begin + + if Assigned( FDisposeBoardItem ) then + FDisposeBoardItem( boardItem ); + +end; + +// ************************************************************************* +// ƒ_ƒEƒ“ƒ[ƒh‚ðŽwŽ¦ +// ************************************************************************* +function TBoardPlugIn.DownloadBoard( + boardItem : DWORD // BoardItem ‚̃Cƒ“ƒXƒ^ƒ“ƒX +) : TDownloadState; +begin + + if Assigned( FDownloadBoard ) then + Result := FDownloadBoard( boardItem ) + else + Result := dsError; + +end; + +// ************************************************************************* +// ƒXƒŒ—§‚Ä‚ðŽwŽ¦ +// ************************************************************************* +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 + + if Assigned( FCreateThread ) then + Result := FCreateThread( boardItem, PChar( inSubject ), PChar( inName ), PChar( inMail ), PChar( inMessage ) ) + else + Result := dsError; + +end; + +// ************************************************************************* +// ‚±‚̔‚ɕۗL‚µ‚Ä‚¢‚éƒXƒŒ‚ð—ñ‹“ +// ************************************************************************* +procedure TBoardPlugIn.EnumThread( + boardItem : DWORD; // BoardItem ‚̃Cƒ“ƒXƒ^ƒ“ƒX + inCallBack : TBoardItemEnumThreadCallBack +); +begin + + if Assigned( FEnumThread ) then + FEnumThread( boardItem, inCallBack ); + +end; + +// ************************************************************************* +// ƒtƒ@ƒCƒ‹–¼‚©‚çƒXƒŒƒbƒh‚Ì URL ‚ð—v‹ +// ************************************************************************* +function TBoardPlugIn.FileName2ThreadURL( + boardItem : DWORD; // BoardItem ‚̃Cƒ“ƒXƒ^ƒ“ƒX + inFileName : string +) : string; +var + tmp : PChar; +begin + + if Assigned( FFileName2ThreadURL ) then begin + tmp := FFileName2ThreadURL( boardItem, PChar( inFileName ) ); + Result := string( tmp ); + DisposeResultString( tmp ); + end; + +end; + +// ************************************************************************* +// ƒvƒ‰ƒOƒCƒ“‚Ì API ‚ðŽæ“¾ +// ************************************************************************* +procedure TBoardPlugIn.LoadPlugInAPI; +begin + + try + 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' ); + + 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; + +end; end. +