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 ÌvpeBÝè^æ¾ ID - TThreadItemProperty = ( - tipContext, // : DWORD // ©RÉÝèµÄ¢¢l - tipNo, // : Integer // Ô - tipFileName, // : string // Xbht@C¼ - tipTitle, // : string // Xbh^Cg - tipRoundDate, // : TDateTime // Xbhðæ¾µ½úiñúj - tipLastModified, // : TDateTime // XbhªXV³êÄ¢éúiT[o¤új - tipCount, // : Integer // XbhJEgi[Jj - tipAllResCount, // : Integer // XbhJEgiT[oj - tipNewResCount, // : Integer // XbhV - tipSize, // : Integer // XbhTCY - tipRound, // : Boolean // ñtO - tipRoundName, // : string // ñ¼ - tipIsLogFile, // : Boolean // O¶ÝtO - tipKokomade, // : Integer // RRÜÅÇñ¾Ô - tipNewReceive, // : Integer // RR©çVKóM - tipNewArrival, // : Boolean // V - tipUnRead, // : Boolean // ¢ÇtO - tipScrollTop, // : Integer // XN[Êu - tipDownloadHost, // : string // ¡ÌzXgÆá¤êÌzXg - tipAgeSage, // : TThreadAgeSage // ACeÌã°º° - tipURL, // : string // XbhðuEUÅ\¦·éÛÌ URL - tipFilePath // : string // ±ÌXªÛ¶³êÄ¢épX - ); - - // ************************************************************************* - // vOCÌo[W - // ************************************************************************* - TOnVersionInfo = procedure( - var outAgent : PChar; // o[WðêØÜÜÈ¢È¼Ì - var outMajor : DWORD; // W[o[W - var outMinor : DWORD; // }Ci[o[W - var outRelease : PChar; // [XiK¼ - var outRevision : DWORD // rWio[ - ); stdcall; - - // ************************************************************************* - // wèµ½ URL ð±ÌvOCÅó¯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 // CX^X - ); stdcall; // _E[h³ê½Xbh - - // ************************************************************************* - // XÔ n Éηé html ðv³ê½ - // ************************************************************************* - TThreadItemOnGetRes = function( - inInstance : DWORD; // CX^X - inNo : DWORD // \¦·éXÔ - ) : PChar; stdcall; // \¦·é HTML - - // ************************************************************************* - // XbhÌwb_ html ðv³ê½ - // ************************************************************************* - TThreadItemOnGetHeader = function( - inInstance : DWORD; // NXÌCX^X - inOptionalHeader : PChar // ÇÁÌwb_ - ) : PChar; stdcall; // ®`³ê½ HTML - - // ************************************************************************* - // XbhÌtb^ html ðv³ê½ - // ************************************************************************* - TThreadItemOnGetFooter = function( - inInstance : DWORD; // NXÌCX^X - inOptionalFooter : PChar // ÇÁÌtb^ - ) : PChar; stdcall; // ®`³ê½ HTML - - - // ========================================================================= // vOCðÇ·é TBoardPlugin NX // ========================================================================= @@ -107,22 +16,40 @@ type FFilePath : string; // vOCð¦·pX FModule : HMODULE; // vOCÌW [nh + 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 + // RXgN^ + constructor Create; // vOCÌpXðwèµÄì¬ constructor CreateFromPath( inPath : string ); // vOC¼ðwèµÄì¬ constructor CreateFromName( inName : string ); // W [nhðwèµÄì¬ constructor CreateFromModule( inModule : HMODULE ); + // fXgN^ + destructor Destroy; override; // vOCÌpXðwèµÄ[h procedure LoadFromPath( inPath : string ); @@ -130,24 +57,54 @@ type procedure LoadFromName( inName : string ); // W [nhðwèµÄ[h procedure LoadFromModule( inModule : HMODULE ); + + //===== PlugInMain ÖA + // vOCª(³µ)[h³ê½ + procedure Loaded; // o[Wîñ procedure VersionInfo( var outAgent : string; var outMajor : DWORD; var outMinor : DWORD; var outRelease : string; var outRevision : DWORD ); // wèµ½ URL ð±ÌvOCÅó¯t¯é©Ç¤© - function AcceptURL( inURL : string ) : Boolean; + function AcceptURL( inURL : string ) : TAcceptType; + // URL©çg¦éBoardÌURLð±«o· + function ExtractBoardURL( inURL : string ): string; + // j [nh + 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; // XbhÌwb_ html ðv function GetHeader( threadItem : DWORD; inOptionalHeader : string ) : string; // XbhÌtb^ 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¼©çXbhÌ 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; // NXÌCX^X - inDatRes : PChar; // ¼O<>[<>útID<>{¶<> Å\¬³ê½eLXg - inResNo : DWORD; // XÔ - inIsNew : Boolean // V XÈç True -) : PChar; stdcall; // ®`³ê½ HTML - -procedure DisposeResultString( - resultStr : PChar -); stdcall; - implementation uses GikoSystem, BoardGroup; -// ========================================================================= -// vOCðÇ·é TBoardPlugin NX -// ========================================================================= - // ************************************************************************* // BoardPlugin tH_É évOCð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; // ========================================================================= // ************************************************************************* +// RXgN^ +// ************************************************************************* +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; + +// ************************************************************************* // vOCÌpXð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; // ************************************************************************* +// fXgN^ +// ************************************************************************* +destructor TBoardPlugIn.Destroy; +begin + + FreeLibrary( FModule ); + + inherited; + +end; + +// ************************************************************************* // vOCÌpXðwèµÄ[h // ************************************************************************* procedure TBoardPlugIn.LoadFromPath( @@ -309,6 +306,17 @@ begin end; // ************************************************************************* +// vOCª(³µ)[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 [nh +// ************************************************************************* +procedure TBoardPlugIn.PlugInMenu( + inHandle : HMENU // j [nh +); +begin + + if Assigned( FPlugInMenu ) then + FPlugInMenu( inHandle ); end; @@ -352,7 +389,7 @@ end; // TThreadItem ª¶¬³ê½ // ************************************************************************* procedure TBoardPlugIn.CreateThreadItem( - threadItem : DWORD + threadItem : DWORD // ThreadItem ÌCX^X ); begin @@ -365,7 +402,7 @@ end; // TThreadItem ªjü³ê½ // ************************************************************************* procedure TBoardPlugIn.DisposeThreadItem( - threadItem : DWORD + threadItem : DWORD // ThreadItem ÌCX^X ); begin @@ -377,11 +414,33 @@ end; // ************************************************************************* // _E[hðw¦ // ************************************************************************* -procedure TBoardPlugIn.Download( threadItem: DWORD ); +function TBoardPlugIn.DownloadThread( + threadItem : DWORD // ThreadItem ÌCX^X +) : TDownloadState; +begin + + if Assigned( FDownloadThread ) then + Result := FDownloadThread( threadItem ) + else + Result := dsError; + +end; + +// ************************************************************************* +// «Ýðw¦ +// ************************************************************************* +function TBoardPlugIn.WriteThread( + threadItem : DWORD; // ThreadItem ÌCX^X + inName : string; // ¼O(nh) + inMail : string; // [AhX + 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; // CX^X + threadItem : DWORD; // ThreadItem ÌCX^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 ÌCX^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; // XbhÌwb_ html ðv // ************************************************************************* function TBoardPlugIn.GetHeader( - threadItem : DWORD; // NXÌCX^X + threadItem : DWORD; // ThreadItem ÌCX^X inOptionalHeader : string // ÇÁÌwb_ ) : 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; // XbhÌtb^ html ðv // ************************************************************************* function TBoardPlugIn.GetFooter( - threadItem : DWORD; // NXÌCX^X + threadItem : DWORD; // ThreadItem ÌCX^X inOptionalFooter : string // ÇÁÌtb^ ) : string; // ®`³ê½ HTML var @@ -443,747 +529,151 @@ begin end; // ************************************************************************* -// vOCÌ 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; - -// ************************************************************************* -// vO{ÌÌo[Wðæ¾·é -// ************************************************************************* -procedure VersionInfo( - var outAgent : PChar; // o[WðêØÜÜÈ¢È¼Ì - var outMajor : DWORD; // W[o[W - var outMinor : DWORD; // }Ci[o[W - var outRelease : PChar; // [XiK¼ - var outRevision : DWORD // rWio[ -); 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; // JnÊu - inRangeEnd : DWORD // I¹Êu -) : Longint; stdcall; // X|XR[h -var - httpSocket : TIdHTTP; - resStream : TMemoryStream; - content : string; -begin - - Result := -1; - - httpSocket := TIdHTTP.Create( nil ); - try - // CxgÌÝè - 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('vLVÝè è'); - Writeln('zXg: ' + 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('vLVÝèȵ'); - {$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] Å\¬³ê½eLXg -) : PChar; stdcall; // Ú`ñÏÝÌ dat `®eLXg +function TBoardPlugIn.GetBoardURL( + threadItem : DWORD // ThreadItem ÌCX^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<>{¶<> Å\¬³ê½eLXg - inResNo : DWORD; // XÔ - inIsNew : Boolean // V XÈç True -) : PChar; stdcall; // ®`³ê½ HTML -var - board : TBoard; - threadItem : TThreadItem; + tmp : PChar; begin - // _~[ÌNX - 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 -// ========================================================================= - -// ************************************************************************* -// uEU{̪u¢Ä étH_ -// ************************************************************************* -function ApplicationFolder : PChar; stdcall; -begin - - Result := CreateResultString( GikoSys.GetAppDir ); - -end; - -// ************************************************************************* -// úÝètH_ -// ************************************************************************* -function PreferencesFolder : PChar; stdcall; -begin - - Result := CreateResultString( GikoSys.GetConfigDir ); - -end; - -// ************************************************************************* -// úÝèt@C -// ************************************************************************* -function PreferencesFile : PChar; stdcall; -begin - - Result := CreateResultString( GikoSys.GetAppDir + 'gikoNavi.ini' ); - -end; - -// ************************************************************************* -// OtH_ -// ************************************************************************* -function LogFolder : PChar; stdcall; -begin - - Result := CreateResultString( GikoSys.GetAppDir + 'Log\' ); - -end; - -// ************************************************************************* -// CSS tH_ -// ************************************************************************* -function CSSFolder : PChar; stdcall; -begin - - Result := CreateResultString( GikoSys.GetStyleSheetDir ); - -end; - -// ************************************************************************* -// XLðüêĨtH_ -// ************************************************************************* -function SkinFolder : PChar; stdcall; -begin - - Result := CreateResultString( GikoSys.GetSkinDir ); - -end; - // ************************************************************************* -// gpµÄ¢é CSS / XL +// TBoardItem ª¶¬³ê½ // ************************************************************************* -function SkinFile : PChar; stdcall; -begin - - Result := CreateResultString( GikoSys.Setting.CSSFileName ); - -end; - -// ************************************************************************* -// Ú[ñK¥ªu¢Ä éfBNg -// ************************************************************************* -function AbonFolder : PChar; stdcall; +procedure TBoardPlugIn.CreateBoardItem( + boardItem : DWORD // BoardItem ÌCX^X +); begin - Result := CreateResultString( GikoSys.Setting.GetNGWordsDir ); + if Assigned( FCreateBoardItem ) then + FCreateBoardItem( boardItem ); end; // ************************************************************************* -// gpµÄ¢é Ú[ñK¥ +// TBoardItem ªjü³ê½ // ************************************************************************* -function AbonFile : PChar; stdcall; +procedure TBoardPlugIn.DisposeBoardItem( + boardItem : DWORD // BoardItem ÌCX^X +); begin - Result := CreateResultString( GikoSys.FAbon.GetNGwordpath ); + if Assigned( FDisposeBoardItem ) then + FDisposeBoardItem( boardItem ); end; - - -// ========================================================================= -// ThreadItem -// ========================================================================= - // ************************************************************************* -// TThreadItem NXÌvpeBðæ¾·é +// _E[hðw¦ // ************************************************************************* -function ThreadItemGetLong( - instance : DWORD; - propertyID : TThreadItemProperty -) : DWORD; stdcall; -var - threadItem : TThreadItem; +function TBoardPlugIn.DownloadBoard( + boardItem : DWORD // BoardItem ÌCX^X +) : TDownloadState; begin - threadItem := TThreadItem( instance ); - case propertyID of - tipContext: // : DWORD // ©RÉÝèµÄ¢¢l - Result := threadItem.Context; - tipNo: // : Integer // Ô - Result := threadItem.No; - tipFileName: // : string // Xbht@C¼ - Result := DWORD( CreateResultString( threadItem.FileName ) ); - tipTitle: // : string // Xbh^Cg - Result := DWORD( CreateResultString( threadItem.Title ) ); - tipCount: // : Integer // XbhJEgi[Jj - Result := threadItem.Count; - tipAllResCount: // : Integer // XbhJEgiT[oj - Result := threadItem.AllResCount; - tipNewResCount: // : Integer // XbhV - Result := threadItem.NewResCount; - tipSize: // : Integer // XbhTCY - Result := threadItem.Size; - tipRound: // : Boolean // ñtO - Result := DWORD( threadItem.Round ); - tipRoundName: // : string // ñ¼ - Result := DWORD( CreateResultString( threadItem.RoundName ) ); - tipIsLogFile: // : Boolean // O¶ÝtO - Result := DWORD( threadItem.IsLogFile ); - tipKokomade: // : Integer // RRÜÅÇñ¾Ô - Result := threadItem.Kokomade; - tipNewReceive: // : Integer // RR©çVKóM - Result := threadItem.NewReceive; - tipNewArrival: // : Boolean // V - Result := DWORD( threadItem.NewArrival ); - tipUnRead: // : Boolean // ¢ÇtO - Result := DWORD( threadItem.UnRead ); - tipScrollTop: // : Integer // XN[Êu - Result := threadItem.ScrollTop; - tipDownloadHost: // : string // ¡ÌzXgÆá¤êÌzXg - Result := DWORD( CreateResultString( threadItem.DownloadHost ) ); - tipAgeSage: // : TThreadAgeSage // ACeÌã°º° - Result := DWORD( threadItem.AgeSage ); - tipURL: // : string // XbhðuEUÅ\¦·éÛÌ URL - Result := DWORD( CreateResultString( threadItem.URL ) ); - tipFilePath: // ±ÌXªÛ¶³êÄ¢épX - Result := DWORD( CreateResultString( threadItem.FilePath ) ); + if Assigned( FDownloadBoard ) then + Result := FDownloadBoard( boardItem ) else - Result := 0; - end; -end; - -// ************************************************************************* -// TThreadItem NXÌvpeBðÝè·é -// ************************************************************************* -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 // Xbht@C¼ - threadItem.FileName := string( PChar( param ) ); - tipTitle: // : string // Xbh^Cg - threadItem.Title := string( PChar( param ) ); - tipCount: // : Integer // XbhJEgi[Jj - threadItem.Count := param; - tipAllResCount: // : Integer // XbhJEgiT[oj - threadItem.AllResCount := param; - tipNewResCount: // : Integer // XbhV - threadItem.NewResCount := param; - tipSize: // : Integer // XbhTCY - threadItem.Size := param; - tipRound: // : Boolean // ñtO - threadItem.Round := Boolean( param ); - tipRoundName: // : string // ñ¼ - threadItem.RoundName := string( PChar( param ) ); - tipIsLogFile: // : Boolean // O¶ÝtO - threadItem.IsLogFile := Boolean( param ); - tipKokomade: // : Integer // RRÜÅÇñ¾Ô - threadItem.Kokomade := param; - tipNewReceive: // : Integer // RR©çVKóM - threadItem.NewReceive := param; - tipNewArrival: // : Boolean // V - threadItem.NewArrival := Boolean( param ); - tipUnRead: // : Boolean // ¢ÇtO - threadItem.UnRead := Boolean( param ); - tipScrollTop: // : Integer // XN[Êu - threadItem.ScrollTop := param; - tipDownloadHost: // : string // ¡ÌzXgÆá¤êÌzXg - threadItem.DownloadHost := string( PChar( param ) ); - tipAgeSage: // : TThreadAgeSage // ACeÌã°º° - threadItem.AgeSage := TGikoAgeSage( param ); - tipURL: // : string // XbhðuEUÅ\¦·éÛÌ URL - threadItem.URL := string( PChar( param ) ); - tipFilePath: // : string // ±ÌXªÛ¶³êÄ¢épX - threadItem.FilePath := string( PChar( param ) ); - end; + Result := dsError; end; // ************************************************************************* -// TThreadItem NXÌvpeBðæ¾·é +// X§Äðw¦ // ************************************************************************* -function ThreadItemGetDouble( - instance : DWORD; - propertyID : TThreadItemProperty -) : Double; stdcall; -var - threadItem : TThreadItem; +function TBoardPlugIn.CreateThread( + boardItem : DWORD; // BoardItem ÌCX^X + inSubject : string; // X^C + inName : string; // ¼O(nh) + inMail : string; // [AhX + inMessage : string // {¶ +) : TDownloadState; // «Ýª¬÷µ½©Ç¤© begin - threadItem := TThreadItem( instance ); - case propertyID of - tipRoundDate: // : TDateTime // Xbhðæ¾µ½úiñúj - Result := threadItem.RoundDate; - tipLastModified: // : TDateTime // XbhªXV³êÄ¢éúiT[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 NXÌvpeBðÝè·é +// ±ÌÂÉÛLµÄ¢éXðñ // ************************************************************************* -procedure ThreadItemSetDouble( - instance : DWORD; - propertyID : TThreadItemProperty; - param : Double -); stdcall; -var - threadItem : TThreadItem; +procedure TBoardPlugIn.EnumThread( + boardItem : DWORD; // BoardItem ÌCX^X + inCallBack : TBoardItemEnumThreadCallBack +); begin - threadItem := TThreadItem( instance ); - case propertyID of - tipRoundDate: // : TDateTime // Xbhðæ¾µ½úiñúj - threadItem.RoundDate := param; - tipLastModified: // : TDateTime // XbhªXV³êÄ¢éúiT[o¤új - threadItem.LastModified := param; - end; + if Assigned( FEnumThread ) then + FEnumThread( boardItem, inCallBack ); end; // ************************************************************************* -// TThreadItem NXð³ÉQ¿áñËéÌ dat `® 1 sð HTML ÉÏ··é +// t@C¼©çXbhÌ URL ðv // ************************************************************************* -function ThreadItemDat2HTML( - inInstance : DWORD; // NXÌCX^X - inDatRes : PChar; // ¼O<>[<>útID<>{¶<> Å\¬³ê½eLXg - inResNo : DWORD; // XÔ - inIsNew : Boolean // V XÈç True -) : PChar; stdcall; // ®`³ê½ HTML +function TBoardPlugIn.FileName2ThreadURL( + boardItem : DWORD; // BoardItem ÌCX^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 - // XL - 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 ftHg - if res.FName = '' then - res.FName := ' '; - if res.FMailTo = '' then - Result := CreateResultString( '' - + '
' - + '