OSDN Git Service

1.52.1.658
[gikonavigoeson/gikonavi.git] / ExternalBoardManager.pas
index 56f6432..cbd4429 100644 (file)
@@ -16,14 +16,18 @@ type
                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;
@@ -55,12 +59,18 @@ type
                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 ) : 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½
@@ -73,6 +83,8 @@ type
                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
@@ -113,7 +125,7 @@ procedure InitializeBoardPlugIns;
 
 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
@@ -126,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, '*', 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;
@@ -152,14 +179,18 @@ 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;
 
@@ -275,6 +306,17 @@ begin
 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(
@@ -313,6 +355,35 @@ begin
                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;
 
 // *************************************************************************
 // TThreadItem \82ª\90\90¬\82³\82ê\82½
@@ -396,6 +467,27 @@ begin
 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;
+
+// *************************************************************************
 // \83X\83\8c\83b\83h\82Ì\83w\83b\83_ html \82ð\97v\8b\81
 // *************************************************************************
 function TBoardPlugIn.GetHeader(
@@ -555,14 +647,18 @@ 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' );