FFilePath : string; // \83v\83\89\83O\83C\83\93\82ð\8e¦\82·\83p\83X
FModule : HMODULE; // \83v\83\89\83O\83C\83\93\82Ì\83\82\83W\83\85\81[\83\8b\83n\83\93\83h\83\8b
+ 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;
constructor CreateFromName( inName : string );
// \83\82\83W\83\85\81[\83\8b\83n\83\93\83h\83\8b\82ð\8ew\92è\82µ\82Ä\8dì\90¬
constructor CreateFromModule( inModule : HMODULE );
+ // \83f\83X\83g\83\89\83N\83^
+ destructor Destroy; override;
// \83v\83\89\83O\83C\83\93\82Ì\83p\83X\82ð\8ew\92è\82µ\82Ä\83\8d\81[\83h
procedure LoadFromPath( inPath : string );
procedure LoadFromModule( inModule : HMODULE );
//===== PlugInMain \8aÖ\98A
+ // \83v\83\89\83O\83C\83\93\82ª(\90³\82µ\82)\83\8d\81[\83h\82³\82ê\82½
+ procedure Loaded;
// \83o\81[\83W\83\87\83\93\8fî\95ñ
procedure VersionInfo( var outAgent : string;
var outMajor : DWORD; var outMinor : DWORD;
var outRelease : string; var outRevision : DWORD );
// \8ew\92è\82µ\82½ URL \82ð\82±\82Ì\83v\83\89\83O\83C\83\93\82Å\8eó\82¯\95t\82¯\82é\82©\82Ç\82¤\82©
- function AcceptURL( inURL : string ) : Boolean;
+ function AcceptURL( inURL : string ) : TAcceptType;
+ // URL\82©\82ç\8eg\82¦\82éBoard\82ÌURL\82ð\93±\82«\8fo\82·
+ function ExtractBoardURL( inURL : string ): string;
+ // \83\81\83j\83\85\81[\83n\83\93\83h\83\89
+ procedure PlugInMenu( inHandle : HMENU );
//===== TThreadItem \8aÖ\98A
// TThreadItem \82ª\90¶\90¬\82³\82ê\82½
procedure DisposeThreadItem( threadItem : DWORD );
// \83_\83E\83\93\83\8d\81[\83h\82ð\8ew\8e¦
function DownloadThread( threadItem : DWORD ) : TDownloadState;
+ // \8f\91\82«\8d\9e\82Ý\82ð\8ew\8e¦
+ function WriteThread( threadItem : DWORD; inName : string; inMail : string; inMessage : string ) : TDownloadState;
// \83\8c\83X\94Ô\8d\86 n \82É\91Î\82·\82é html \82ð\97v\8b\81
function GetRes( threadItem : DWORD; inNo : DWORD ) : string;
+ // \83\8c\83X\94Ô\8d\86 n \82É\91Î\82·\82é Dat \82ð\97v\8b\81
+ function GetDat( threadItem : DWORD; inNo : DWORD ) : string;
// \83X\83\8c\83b\83h\82Ì\83w\83b\83_ html \82ð\97v\8b\81
function GetHeader( threadItem : DWORD; inOptionalHeader : string ) : string;
// \83X\83\8c\83b\83h\82Ì\83t\83b\83^ html \82ð\97v\8b\81
procedure DisposeBoardItem( boardItem : DWORD );
// \83_\83E\83\93\83\8d\81[\83h\82ð\8ew\8e¦
function DownloadBoard( boardItem : DWORD ) : TDownloadState;
+ // \83X\83\8c\97§\82Ä\82ð\8ew\8e¦
+ function CreateThread( boardItem : DWORD; inSubject : string; inName : string; inMail : string; inMessage : string ) : TDownloadState;
// \82±\82Ì\94Â\82É\95Û\97L\82µ\82Ä\82¢\82é\83X\83\8c\82ð\97ñ\8b\93
procedure EnumThread( boardItem : DWORD; inCallBack : TBoardItemEnumThreadCallBack );
// \83t\83@\83C\83\8b\96¼\82©\82ç\83X\83\8c\83b\83h\82Ì URL \82ð\97v\8b\81
implementation
-uses GikoSystem;
+uses GikoSystem, BoardGroup;
// *************************************************************************
// BoardPlugin \83t\83H\83\8b\83_\82É\82 \82é\83v\83\89\83O\83C\83\93\82ð\91S\82Ä\83\8d\81[\83h
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;
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;
// *************************************************************************
+// \83f\83X\83g\83\89\83N\83^
+// *************************************************************************
+destructor TBoardPlugIn.Destroy;
+begin
+
+ FreeLibrary( FModule );
+
+ inherited;
+
+end;
+
+// *************************************************************************
// \83v\83\89\83O\83C\83\93\82Ì\83p\83X\82ð\8ew\92è\82µ\82Ä\83\8d\81[\83h
// *************************************************************************
procedure TBoardPlugIn.LoadFromPath(
end;
// *************************************************************************
+// \83v\83\89\83O\83C\83\93\82ª(\90³\82µ\82)\83\8d\81[\83h\82³\82ê\82½
+// *************************************************************************
+procedure TBoardPlugIn.Loaded;
+begin
+
+ if Assigned( FLoad ) then
+ FLoad( DWORD( Self ) );
+
+end;
+
+// *************************************************************************
// \83o\81[\83W\83\87\83\93\8fî\95ñ
// *************************************************************************
procedure TBoardPlugIn.VersionInfo(
// *************************************************************************
function TBoardPlugIn.AcceptURL(
inURL : string
-) : Boolean;
+) : TAcceptType;
begin
if Assigned( FAcceptURL ) then
Result := FAcceptURL( PChar( inURL ) )
else
- Result := False;
+ Result := atNoAccept;
+
+end;
+// *************************************************************************
+// \8ew\92è\82µ\82½ URL \82©\82ç\8eg\82¦\82éBoard\82ÌURL\82ð\93±\82«\8fo\82·
+// *************************************************************************
+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;
+// *************************************************************************
+// \83\81\83j\83\85\81[\83n\83\93\83h\83\89
+// *************************************************************************
+procedure TBoardPlugIn.PlugInMenu(
+ inHandle : HMENU // \83\81\83j\83\85\81[\83n\83\93\83h\83\8b
+);
+begin
+
+ if Assigned( FPlugInMenu ) then
+ FPlugInMenu( inHandle );
end;
end;
// *************************************************************************
+// \8f\91\82«\8d\9e\82Ý\82ð\8ew\8e¦
+// *************************************************************************
+function TBoardPlugIn.WriteThread(
+ threadItem : DWORD; // ThreadItem \82Ì\83C\83\93\83X\83^\83\93\83X
+ inName : string; // \96¼\91O(\83n\83\93\83h\83\8b)
+ inMail : string; // \83\81\81[\83\8b\83A\83h\83\8c\83X
+ inMessage : string // \96{\95¶
+) : TDownloadState; // \8f\91\82«\8d\9e\82Ý\82ª\90¬\8c÷\82µ\82½\82©\82Ç\82¤\82©
+begin
+
+ if Assigned( FWriteThread ) then
+ Result := FWriteThread( threadItem, PChar( inName ), PChar( inMail ), PChar( inMessage ) )
+ else
+ Result := dsError;
+
+end;
+
+// *************************************************************************
// \83\8c\83X\94Ô\8d\86 n \82É\91Î\82·\82é html \82ð\97v\8b\81
// *************************************************************************
function TBoardPlugIn.GetRes(
if Assigned( FGetRes ) then begin
tmp := FGetRes( threadItem, inNo );
- Result := string( tmp );
- DisposeResultString( tmp );
+ try
+ Result := string( tmp );
+ finally
+ DisposeResultString( tmp );
+ end;
+ end;
+
+end;
+
+// *************************************************************************
+// \83\8c\83X\94Ô\8d\86 n \82É\91Î\82·\82é Dat \82ð\97v\8b\81
+// *************************************************************************
+function TBoardPlugIn.GetDat(
+ threadItem : DWORD; // ThreadItem \82Ì\83C\83\93\83X\83^\83\93\83X
+ inNo : DWORD // \95\\8e¦\82·\82é\83\8c\83X\94Ô\8d\86
+) : string; // \82Q\82¿\82á\82ñ\82Ë\82é\82Ìdat\8c`\8e®
+var
+ tmp : PChar;
+begin
+
+ if Assigned( FGetDat ) then begin
+ tmp := FGetDat( threadItem, inNo );
+ try
+ Result := string( tmp );
+ finally
+ DisposeResultString(tmp); end;
end;
end;
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;
end;
// *************************************************************************
+// \83X\83\8c\97§\82Ä\82ð\8ew\8e¦
+// *************************************************************************
+function TBoardPlugIn.CreateThread(
+ boardItem : DWORD; // BoardItem \82Ì\83C\83\93\83X\83^\83\93\83X
+ inSubject : string; // \83X\83\8c\83^\83C
+ inName : string; // \96¼\91O(\83n\83\93\83h\83\8b)
+ inMail : string; // \83\81\81[\83\8b\83A\83h\83\8c\83X
+ inMessage : string // \96{\95¶
+) : TDownloadState; // \8f\91\82«\8d\9e\82Ý\82ª\90¬\8c÷\82µ\82½\82©\82Ç\82¤\82©
+begin
+
+ if Assigned( FCreateThread ) then
+ Result := FCreateThread( boardItem, PChar( inSubject ), PChar( inName ), PChar( inMail ), PChar( inMessage ) )
+ else
+ Result := dsError;
+
+end;
+
+// *************************************************************************
// \82±\82Ì\94Â\82É\95Û\97L\82µ\82Ä\82¢\82é\83X\83\8c\82ð\97ñ\8b\93
// *************************************************************************
procedure TBoardPlugIn.EnumThread(
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;