OSDN Git Service

・TBoardPlugIn に GetRes, GetHeader, GetFooter を追加。
authoryoffy <yoffy>
Wed, 5 Nov 2003 19:52:40 +0000 (19:52 +0000)
committeryoffy <yoffy>
Wed, 5 Nov 2003 19:52:40 +0000 (19:52 +0000)
ExternalBoardManager.pas

index a6bbcb7..c0067ea 100644 (file)
@@ -31,7 +31,7 @@ type
                tipDownloadHost,                                // : string                     // \8d¡\82Ì\83z\83X\83g\82Æ\88á\82¤\8fê\8d\87\82Ì\83z\83X\83g
                tipAgeSage,                                                     // : TThreadAgeSage     // \83A\83C\83e\83\80\82Ì\8fã\82°\89º\82°
                tipURL,                                                                 // : string                     // \83X\83\8c\83b\83h\82ð\83u\83\89\83E\83U\82Å\95\\8e¦\82·\82é\8dÛ\82Ì URL
-       tipFilePath                                                     // : string                     // \82±\82Ì\83X\83\8c\82ª\95Û\91\82³\82ê\82Ä\82¢\82é\83p\83X
+               tipFilePath                                                     // : string                     // \82±\82Ì\83X\83\8c\82ª\95Û\91\82³\82ê\82Ä\82¢\82é\83p\83X
        );
 
        // *************************************************************************
@@ -45,33 +45,57 @@ type
                var outRevision : DWORD         // \83\8a\83r\83W\83\87\83\93\83i\83\93\83o\81[
        ); stdcall;
 
-  // *************************************************************************
-  // \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©
-  // *************************************************************************
-  TOnAcceptURL = function(
-       inURL : PChar                                           // \94»\92f\82ð\8bÂ\82¢\82Å\82¢\82é URL
-  ): Boolean; stdcall;                 // \8eó\82¯\95t\82¯\82é\82È\82ç True
-
-  // *************************************************************************
-  // TThreadItem \82ª\90\90¬\82³\82ê\82½
-  // *************************************************************************
-  TThreadItemCreate = procedure(
-       inInstance : DWORD
-  ); stdcall;
-
-  // *************************************************************************
-  // TThreadItem \82ª\94j\8aü\82³\82ê\82½
-  // *************************************************************************
-  TThreadItemDispose = procedure(
-       inInstance : DWORD
-  ); stdcall;
+       // *************************************************************************
+       // \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©
+       // *************************************************************************
+       TOnAcceptURL = function(
+               inURL : PChar                                           // \94»\92f\82ð\8bÂ\82¢\82Å\82¢\82é URL
+       ): Boolean; stdcall;                    // \8eó\82¯\95t\82¯\82é\82È\82ç True
+
+       // *************************************************************************
+       // TThreadItem \82ª\90\90¬\82³\82ê\82½
+       // *************************************************************************
+       TThreadItemCreate = procedure(
+               inInstance : DWORD
+       ); stdcall;
+
+       // *************************************************************************
+       // TThreadItem \82ª\94j\8aü\82³\82ê\82½
+       // *************************************************************************
+       TThreadItemDispose = procedure(
+               inInstance : DWORD
+       ); stdcall;
 
        // *************************************************************************
        // \83_\83E\83\93\83\8d\81[\83h\82ð\8ew\8e¦\82³\82ê\82½
        // *************************************************************************
-  TThreadItemOnDownload = procedure(
-       inInstance      : DWORD                 // \83C\83\93\83X\83^\83\93\83X
-  ); stdcall;                                                          // \83_\83E\83\93\83\8d\81[\83h\82³\82ê\82½\83X\83\8c\83b\83h
+       TThreadItemOnDownload = procedure(
+               inInstance      : DWORD                 // \83C\83\93\83X\83^\83\93\83X
+       ); stdcall;                                                             // \83_\83E\83\93\83\8d\81[\83h\82³\82ê\82½\83X\83\8c\83b\83h
+
+       // *************************************************************************
+       // \83\8c\83X\94Ô\8d\86 n \82É\91Î\82·\82é html \82ð\97v\8b\81\82³\82ê\82½
+       // *************************************************************************
+       TThreadItemOnGetRes = function(
+               inInstance      : DWORD;                // \83C\83\93\83X\83^\83\93\83X
+               inNo                            : DWORD                 // \95\\8e¦\82·\82é\83\8c\83X\94Ô\8d\86
+       ) : PChar; stdcall;                             // \95\\8e¦\82·\82é HTML
+
+       // *************************************************************************
+       // \83X\83\8c\83b\83h\82Ì\83w\83b\83_ html \82ð\97v\8b\81\82³\82ê\82½
+       // *************************************************************************
+       TThreadItemOnGetHeader = function(
+               inInstance                              : DWORD;        // \83N\83\89\83X\82Ì\83C\83\93\83X\83^\83\93\83X
+               inOptionalHeader        : PChar         // \92Ç\89Á\82Ì\83w\83b\83_
+       ) : PChar; stdcall;                                             // \90®\8c`\82³\82ê\82½ HTML
+
+       // *************************************************************************
+       // \83X\83\8c\83b\83h\82Ì\83t\83b\83^ html \82ð\97v\8b\81\82³\82ê\82½
+       // *************************************************************************
+       TThreadItemOnGetFooter = function(
+               inInstance                              : DWORD;        // \83N\83\89\83X\82Ì\83C\83\93\83X\83^\83\93\83X
+               inOptionalFooter        : PChar         // \92Ç\89Á\82Ì\83t\83b\83^
+       ) : PChar; stdcall;                                             // \90®\8c`\82³\82ê\82½ HTML
 
 
 
@@ -84,10 +108,13 @@ type
                FModule                                                 : HMODULE;      // \83v\83\89\83O\83C\83\93\82Ì\83\82\83W\83\85\81[\83\8b\83n\83\93\83h\83\8b
 
                FVersionInfo                            : TOnVersionInfo;
-       FAcceptURL                                      : TOnAcceptURL;
-       FCreateThreadItem               : TThreadItemCreate;
-       FDisposeThreadItem      : TThreadItemDispose;
-       FDownload                                               : TThreadItemOnDownload;
+               FAcceptURL                                      : TOnAcceptURL;
+               FCreateThreadItem               : TThreadItemCreate;
+               FDisposeThreadItem      : TThreadItemDispose;
+               FDownload                                               : TThreadItemOnDownload;
+               FGetRes                                                 : TThreadItemOnGetRes;
+               FGetHeader                                      : TThreadItemOnGetHeader;
+               FGetFooter                                      : TThreadItemOnGetFooter;
 
        public
                // \83v\83\89\83O\83C\83\93\82Ì\83p\83X\82ð\8ew\92è\82µ\82Ä\8dì\90¬
@@ -108,13 +135,19 @@ type
                        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;
-       // TThreadItem \82ª\90\90¬\82³\82ê\82½
-       procedure       CreateThreadItem( threadItem : DWORD );
-       // TThreadItem \82ª\94j\8aü\82³\82ê\82½
-       procedure       DisposeThreadItem( threadItem : DWORD );
-       // \83_\83E\83\93\83\8d\81[\83h\82ð\8ew\8e¦
-       procedure       Download( threadItem: DWORD );
+               function        AcceptURL( inURL : string ) : Boolean;
+               // TThreadItem \82ª\90\90¬\82³\82ê\82½
+               procedure       CreateThreadItem( threadItem : DWORD );
+               // TThreadItem \82ª\94j\8aü\82³\82ê\82½
+               procedure       DisposeThreadItem( threadItem : DWORD );
+               // \83_\83E\83\93\83\8d\81[\83h\82ð\8ew\8e¦
+               procedure       Download( threadItem: DWORD );
+               // \83\8c\83X\94Ô\8d\86 n \82É\91Î\82·\82é html \82ð\97v\8b\81\82³\82ê\82½
+               function        GetRes( threadItem : DWORD; inNo : DWORD ) : string;
+               // \83X\83\8c\83b\83h\82Ì\83w\83b\83_ html \82ð\97v\8b\81\82³\82ê\82½
+               function        GetHeader( threadItem : DWORD; inOptionalHeader : string ) : string;
+               // \83X\83\8c\83b\83h\82Ì\83t\83b\83^ html \82ð\97v\8b\81\82³\82ê\82½
+               function        GetFooter( threadItem : DWORD; inOptionalFooter : string ) : string;
 
        private
                procedure       LoadPlugInAPI;
@@ -162,20 +195,20 @@ uses GikoSystem, BoardGroup;
 procedure InitializeBoardPlugIns;
 var
        i, bound                : Integer;
-  pluginNames  : TStringList;
+       pluginNames     : TStringList;
 begin
 
        pluginNames := TStringList.Create;
-  try
-       GikoSys.GetFileList( GikoSys.Setting.GetBoardPlugInDir, '*', pluginNames, False, False );
-       SetLength( BoardPlugIns, pluginNames.Count );
-
-       bound := pluginNames.Count - 1;
-       for i := 0 to bound do
-               BoardPlugIns[ i ] := TBoardPlugIn.CreateFromName( pluginNames.Strings[ i ] );
-  finally
-       pluginNames.Free;
-  end;
+       try
+               GikoSys.GetFileList( GikoSys.Setting.GetBoardPlugInDir, '*', pluginNames, False, False );
+               SetLength( BoardPlugIns, pluginNames.Count );
+
+               bound := pluginNames.Count - 1;
+               for i := 0 to bound do
+                       BoardPlugIns[ i ] := TBoardPlugIn.CreateFromName( pluginNames.Strings[ i ] );
+       finally
+               pluginNames.Free;
+       end;
 
 end;
 
@@ -236,9 +269,9 @@ procedure TBoardPlugIn.LoadFromPath(
 begin
 
        FFilePath := inPath;
-  if FileExists( inPath ) then
+       if FileExists( inPath ) then
                FModule := LoadLibrary( PChar( inPath ) )
-  else if FileExists( inPath + '.dll' ) then
+       else if FileExists( inPath + '.dll' ) then
                FModule := LoadLibrary( PChar( inPath + '.dll' ) );
 
        LoadPlugInAPI;
@@ -309,9 +342,9 @@ function    TBoardPlugIn.AcceptURL(
 begin
 
        if Assigned( FAcceptURL ) then
-       Result := FAcceptURL( PChar( inURL ) )
-  else
-       Result := False;
+               Result := FAcceptURL( PChar( inURL ) )
+       else
+               Result := False;
 
 end;
 
@@ -324,7 +357,7 @@ procedure   TBoardPlugIn.CreateThreadItem(
 begin
 
        if Assigned( FCreateThreadItem ) then
-       FCreateThreadItem( threadItem );
+               FCreateThreadItem( threadItem );
 
 end;
 
@@ -337,7 +370,7 @@ procedure   TBoardPlugIn.DisposeThreadItem(
 begin
 
        if Assigned( FDisposeThreadItem ) then
-       FDisposeThreadItem( threadItem );
+               FDisposeThreadItem( threadItem );
 
 end;
 
@@ -346,8 +379,67 @@ end;
 // *************************************************************************
 procedure      TBoardPlugIn.Download( threadItem: DWORD );
 begin
+
        if Assigned( FDownload ) then
-       FDownload( threadItem );
+               FDownload( threadItem );
+
+end;
+
+// *************************************************************************
+// \83\8c\83X\94Ô\8d\86 n \82É\91Î\82·\82é html \82ð\97v\8b\81\82³\82ê\82½
+// *************************************************************************
+function TBoardPlugIn.GetRes(
+       threadItem      : DWORD;                // \83C\83\93\83X\83^\83\93\83X
+       inNo                            : DWORD                 // \95\\8e¦\82·\82é\83\8c\83X\94Ô\8d\86
+) : string;                                                    // \95\\8e¦\82·\82é HTML
+var
+       tmp                                     : PChar;
+begin
+
+       if Assigned( FGetRes ) then begin
+               tmp                     := FGetRes( threadItem, inNo );
+               Result  := string( tmp );
+               DisposeResultString( tmp );
+       end;
+
+end;
+
+// *************************************************************************
+// \83X\83\8c\83b\83h\82Ì\83w\83b\83_ html \82ð\97v\8b\81\82³\82ê\82½
+// *************************************************************************
+function TBoardPlugIn.GetHeader(
+       threadItem                              : DWORD;        // \83N\83\89\83X\82Ì\83C\83\93\83X\83^\83\93\83X
+       inOptionalHeader        : string        // \92Ç\89Á\82Ì\83w\83b\83_
+) : string;                                                                            // \90®\8c`\82³\82ê\82½ HTML
+var
+       tmp                                                             : PChar;
+begin
+
+       if Assigned( FGetHeader ) then begin
+               tmp                     := FGetHeader( threadItem, PChar( inOptionalHeader ) );
+               Result  := string( tmp );
+               DisposeResultString( tmp );
+       end;
+
+end;
+
+// *************************************************************************
+// \83X\83\8c\83b\83h\82Ì\83t\83b\83^ html \82ð\97v\8b\81\82³\82ê\82½
+// *************************************************************************
+function TBoardPlugIn.GetFooter(
+       threadItem                              : DWORD;        // \83N\83\89\83X\82Ì\83C\83\93\83X\83^\83\93\83X
+       inOptionalFooter        : string        // \92Ç\89Á\82Ì\83t\83b\83^
+) : string;                                                                            // \90®\8c`\82³\82ê\82½ HTML
+var
+       tmp                                                             : PChar;
+begin
+
+       if Assigned( FGetFooter ) then begin
+               tmp                     := FGetFooter( threadItem, PChar( inOptionalFooter ) );
+               Result  := string( tmp );
+               DisposeResultString( tmp );
+       end;
+
 end;
 
 // *************************************************************************
@@ -363,6 +455,9 @@ begin
                        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;
@@ -451,7 +546,7 @@ begin
                if Assigned( OnWorkEnd ) then
                        httpSocket.OnWorkEnd            := OnWorkEnd;
 
-       // \92Ê\90M\82É\8aÖ\82·\82é\90Ý\92è
+               // \92Ê\90M\82É\8aÖ\82·\82é\90Ý\92è
                httpSocket.Request.CustomHeaders.Clear;
                httpSocket.Response.Clear;
                httpSocket.Request.Clear;
@@ -755,8 +850,8 @@ begin
                        Result := DWORD( threadItem.AgeSage );
                tipURL:                                                                 // : string                     // \83X\83\8c\83b\83h\82ð\83u\83\89\83E\83U\82Å\95\\8e¦\82·\82é\8dÛ\82Ì URL
                        Result := DWORD( CreateResultString( threadItem.URL ) );
-       tipFilePath:                                                                                                            // \82±\82Ì\83X\83\8c\82ª\95Û\91\82³\82ê\82Ä\82¢\82é\83p\83X
-               Result := DWORD( CreateResultString( threadItem.FilePath ) );
+               tipFilePath:                                                                                                            // \82±\82Ì\83X\83\8c\82ª\95Û\91\82³\82ê\82Ä\82¢\82é\83p\83X
+                       Result := DWORD( CreateResultString( threadItem.FilePath ) );
        else
                Result := 0;
        end;
@@ -814,8 +909,8 @@ begin
                        threadItem.AgeSage                      := TGikoAgeSage( param );
                tipURL:                                                                 // : string                     // \83X\83\8c\83b\83h\82ð\83u\83\89\83E\83U\82Å\95\\8e¦\82·\82é\8dÛ\82Ì URL
                        threadItem.URL                                  := string( PChar( param ) );
-       tipFilePath:                                            // : string                     // \82±\82Ì\83X\83\8c\82ª\95Û\91\82³\82ê\82Ä\82¢\82é\83p\83X
-               threadItem.FilePath                     := string( PChar( param ) );
+               tipFilePath:                                            // : string                     // \82±\82Ì\83X\83\8c\82ª\95Û\91\82³\82ê\82Ä\82¢\82é\83p\83X
+                       threadItem.FilePath                     := string( PChar( param ) );
        end;
 
 end;
@@ -891,13 +986,13 @@ begin
                        if inIsNew then
                                Result := CreateResultString( GikoSys.SkinedRes(
                                        GikoSys.LoadFromSkin(
-                                               GikoSys.Setting.GetSkinNewResFileName, threadItem, 0
+                                               GikoSys.Setting.GetSkinNewResFileName, threadItem, threadItem.SizeByte
                                        ), res, no
                                ) )
                        else
                                Result := CreateResultString( GikoSys.SkinedRes(
                                        GikoSys.LoadFromSkin(
-                                               GikoSys.Setting.GetSkinResFileName, threadItem, 0
+                                               GikoSys.Setting.GetSkinResFileName, threadItem, threadItem.SizeByte
                                        ), res, no
                                ) );
                end else begin
@@ -952,10 +1047,26 @@ begin
 
        threadItem                      := TThreadItem( inInstance );
        optionalHeader  := string( inOptionalHeader );
-       skinHeader                      := GikoSys.LoadFromSkin( GikoSys.Setting.GetSkinHeaderFileName, threadItem, 0 );
-       if Length( optionalHeader ) > 0 then
-               skinHeader := StringReplace( skinHeader, '</head>',
-                       string( optionalHeader ) + '</head>', [rfReplaceAll] );
+
+       try
+               if GikoSys.Setting.UseSkin then begin
+      skinHeader := GikoSys.LoadFromSkin( GikoSys.Setting.GetSkinHeaderFileName, threadItem, threadItem.SizeByte );
+      if Length( optionalHeader ) > 0 then
+        skinHeader := StringReplace( skinHeader, '</head>',
+          string( optionalHeader ) + '</head>', [rfReplaceAll] );
+    end else begin
+       skinHeader :=
+                               '<html><head>' +
+                               //'<meta http-equiv="Content-type" content="text/html; charset=Shift_JIS">' +
+                               '<title>' + threadItem.Title + '</title>' +
+                               '<link rel="stylesheet" href="'+ GikoSys.Setting.CSSFileName +'" type="text/css">' +
+                               optionalHeader +
+                               '</head>' +
+                               '<body>' +
+                               '<div class="title">' + threadItem.Title + '</div>';
+    end;
+  except
+  end;
 
        Result := CreateResultString( skinHeader );
 
@@ -976,10 +1087,21 @@ begin
 
        threadItem                      := TThreadItem( inInstance );
        optionalFooter  := string( inOptionalFooter );
-       skinFooter                      := GikoSys.LoadFromSkin( GikoSys.Setting.GetSkinFooterFileName, threadItem, 0 );
-       if Length( optionalFooter ) > 0 then
-               skinFooter := StringReplace( skinFooter, '</body>',
-                       string( optionalFooter ) + '</body>', [rfReplaceAll] );
+
+       try
+               if GikoSys.Setting.UseSkin then begin
+      skinFooter := GikoSys.LoadFromSkin( GikoSys.Setting.GetSkinFooterFileName, threadItem, threadItem.SizeByte );
+      if Length( optionalFooter ) > 0 then
+        skinFooter := StringReplace( skinFooter, '</body>',
+          string( optionalFooter ) + '</body>', [rfReplaceAll] );
+    end else begin
+                               skinFooter := '<a name="bottom"></a>' +
+          '</body></html>' +
+          '<a name="last"></a>' +
+          '</body></html>';
+    end;
+  except
+  end;
 
        Result := CreateResultString( skinFooter );