OSDN Git Service

スレッド一覧の更新日の表示の修正。スレッド一覧でのマウスホイールでブラウザタブが
[gikonavigoeson/gikonavi.git] / Editor.pas
index 185f902..36a6824 100644 (file)
@@ -7,8 +7,10 @@ uses
        Dialogs, StdCtrls, ComCtrls, ExtCtrls, ToolWin, Menus, OleCtrls, Registry,
 {$IF Defined(DELPRO) }
        SHDocVw,
+       MSHTML,
 {$ELSE}
        SHDocVw_TLB,
+       MSHTML_TLB,
 {$IFEND}
        ActiveX, {HTTPApp,} YofUtils, Trip, IniFiles, StrUtils,
        GikoSystem, GikoUtil, ImgList, Clipbrd, BoardGroup,
@@ -97,16 +99,16 @@ type
        amp1: TMenuItem;
        BoardInformationTab: TTabSheet;
                                BoardtopTab: TTabSheet;
-    TitlePictureBrowser: TWebBrowser;
+       TitlePictureBrowser: TWebBrowser;
        BoardTop: TMenuItem;
        BoardInformationMemo: TMemo;
        GetSETTINGTXTAction: TAction;
-       GetheadtxtAction: TAction;
        N3: TMenuItem;
        SETTINGTXT2: TMenuItem;
-       headtxt2: TMenuItem;
-    GetTitlePictureAction: TAction;
-    OP1: TMenuItem;
+       GetTitlePictureAction: TAction;
+       OP1: TMenuItem;
+    GetHeadTXTAction: TAction;
+    HeadTXT1: TMenuItem;
 
                procedure EditorPageChange(Sender: TObject);
                procedure FormCreate(Sender: TObject);
@@ -149,9 +151,9 @@ type
        procedure AmpToCharRefActionExecute(Sender: TObject);
        procedure BoardTopClick(Sender: TObject);
        procedure GetSETTINGTXTActionExecute(Sender: TObject);
-       procedure GetheadtxtActionExecute(Sender: TObject);
-    procedure GetTitlePictureActionUpdate(Sender: TObject);
-    procedure GetTitlePictureActionExecute(Sender: TObject);
+       procedure GetTitlePictureActionUpdate(Sender: TObject);
+       procedure GetTitlePictureActionExecute(Sender: TObject);
+    procedure GetHeadTXTActionExecute(Sender: TObject);
        private
                FThreadItem: TThreadItem;
                FBoard: TBoard;
@@ -165,8 +167,6 @@ type
                FSambaTime: TDateTime;
                FHost: string;
                FNow: TDateTime;
-                               //Boolean
-                               SettingVisible, HeadVisible, BoardTopVisible: Boolean;
                procedure Preview;
                function RepHtml(s: string): string;
                function Check: Boolean;
@@ -179,7 +179,7 @@ type
 //             procedure GetSendData(Source: TStringStream);
                procedure GetSendData(Source: TStringStream);
                procedure SaveSendFile;
-               procedure SetContent(Content: string);
+               procedure SetContent(Content: string; ABrowser: TWebBrowser);
                function GetSPID(CookieLine: string): string;
                function GetPON(CookieLine: string): string;
                function GetResultType(ResponseText: string): TGikoResultType;
@@ -197,6 +197,7 @@ type
                procedure ShowBoardInformation(ABoard: TBoard; AMemo: TMemo);
                function GetTitlePictureURL(body: TStringList; ABoard: TBoard): string;
                procedure ShowTitlePicture();
+                               function GetFusianaName(body: TStringList; ABoard: TBoard): String;
        protected
                procedure CreateParams(var Params: TCreateParams); override;
        public
@@ -281,11 +282,10 @@ var
        wp: TWindowPlacement;
                hUser32 : HINST;
         ini: TIniFile;
-        BSettingTab, BHeadTab, BBoardTopTab: Boolean;
 begin
        FWork := False;
        Browser.Navigate('about:blank');
-
+       TitlePictureBrowser.Navigate('about:blank');
        FBoard := nil;
        FThreadItem := nil;
 
@@ -390,7 +390,7 @@ begin
        MailComboBox.Text := FBoard.KotehanMail;
        SageCheckBox.Checked := AnsiPos('sage', MailComboBox.Text) <> 0;
        TitlePanel.Visible := True;
-       SetSamba24('');
+       SetSamba24(FBoard.URL);
        ShowBoardInformation(FBoard, BoardInformationMemo);
        ShowTitlePicture();
 end;
@@ -465,7 +465,6 @@ begin
        end;
 
        body := GetBody;
-
        Namae := RepHtml(NameComboBox.Text);
        Mail := RepHtml(MailComboBox.Text);
        Body := RepHtml(body);
@@ -496,7 +495,7 @@ begin
        else
                s := s + '<DT>' + No + ' \81F <A href="mailto:' + Mail + '"><B>' + Namae + '</B></A> [' + Mail + ']\81F ' + DateTime+ '<BR><DD>' + Body + '<BR><BR><BR>' + #13#10;
        s := s + '</BODY></HTML>';
-       SetContent(s);
+       SetContent(s, Browser);
 end;
 
 function TEditorForm.RepHtml(s: string): string;
@@ -510,49 +509,12 @@ begin
 end;
 
 procedure TEditorForm.EditorPageChange(Sender: TObject);
-var
-        URL, RefURL, RefeURL, HeadURL: String;
 begin
        if EditorPage.ActivePage = PreviewTab then begin
                Preview;
        end else begin
                Browser.Navigate('about:blank');
        end;
-{
-               if FThreadItem = nil then begin
-                               URL := FBoard.GetSendURL;
-                               RefURL := GikoSys.UrlToServer(FBoard.URL)
-                                               + GikoSys.UrlToID(FBoard.URL)
-                                               + '/';
-                               RefeURL := RefURL + 'SETTING.TXT';
-                               HeadURL := RefURL + 'head.txt';
-               end else begin
-                               URL := FThreadItem.GetSendURL;
-                               RefURL := GikoSys.UrlToServer(FThreadItem.ParentBoard.URL)
-                                               + FThreadItem.ParentBoard.BBSID
-                                               + '/';
-                               RefeURL := RefURL + 'SETTING.TXT';
-                               HeadURL := RefURL + 'head.txt';
-               end;
-}
-{        if EditorPage.ActivePage = SETTINGTab then begin
-                               Browser1.Navigate(RefeURL);
-               end else begin
-                               Browser1.Navigate('about:blank');
-               end;
-}
-{        if EditorPage.ActivePage = BoardtopTab then begin
-                               TitlePictureBrowser.Navigate(RefURL);
-               end else begin
-                               TitlePictureBrowser.Navigate('about:blank');
-               end;
-}
-{        if EditorPage.ActivePage = HEADTab then begin
-                               Browser3.Navigate(HeadURL);
-        end else begin
-                Browser3.Navigate('about:blank');
-        end;
-}
 end;
 
 procedure TEditorForm.BrowserStatusTextChange(Sender: TObject;
@@ -650,16 +612,21 @@ begin
                        Result := TitleEdit.Handle
                else
                        Result := 0;
+       end else if Editorpage.ActivePage = BoardInformationTab then begin
+               if ActiveControl = BoardInformationMemo then
+                       Result := BoardInformationMemo.Handle
+               else
+                       Result := 0;
        end else
                Result := 0;
 end;
 
-procedure TEditorForm.SetContent(Content: string);
+procedure TEditorForm.SetContent(Content: string; ABrowser: TWebBrowser);
 var
-       doc : Variant;
+       doc: Variant;
 begin
-       if Browser.Document <> nil then begin
-               doc := Browser.Document;
+       if ABrowser.Document <> nil then begin
+               doc := Idispatch( olevariant(ABrowser.ControlInterface).Document) as IHTMLDocument2;
                doc.Clear;
                doc.open;
                doc.charset := 'Shift_JIS';
@@ -707,6 +674,9 @@ var
 //        RefeURL: string;
 //        RuleURL: String;
 //        RuleTxt: String;
+//        Name: String;
+//        SettingBody: TStringList;
+//        tmpBoard: TBoard;
 begin
        FAbort := False;
        State := gdsError;
@@ -716,22 +686,7 @@ begin
        else
                Board := FThreadItem.ParentBoard;
 
-{      Indy.Request.Clear;
-       Indy.ProxyParams.BasicAuthentication := False;
-       if GikoSys.Setting.WriteProxy then begin
-               Indy.ProxyParams.ProxyServer := GikoSys.Setting.WriteProxyAddress;
-               Indy.ProxyParams.ProxyPort := GikoSys.Setting.WriteProxyPort;
-               Indy.ProxyParams.ProxyUsername := GikoSys.Setting.WriteProxyUserID;
-               Indy.ProxyParams.ProxyPassword := GikoSys.Setting.WriteProxyPassword;
-               if GikoSys.Setting.ReadProxyUserID <> '' then
-                       Indy.ProxyParams.BasicAuthentication := True;
-       end else begin
-               Indy.ProxyParams.ProxyServer := '';
-               Indy.ProxyParams.ProxyPort := 80;
-               Indy.ProxyParams.ProxyUsername := '';
-               Indy.ProxyParams.ProxyPassword := '';
-       end;
-}
+
        InitIdHTTP(Indy);
        if FThreadItem = nil then begin
                URL := FBoard.GetSendURL;
@@ -796,6 +751,7 @@ begin
                                        Exit;
                                end;
                        end;
+
                        if ResultType = grtOK then begin
                                WriteSambaTime(FHost, Now());
                                State := gdsComplete;
@@ -930,7 +886,7 @@ begin
                else
                        GikoForm.AddMessageList(FThreadItem.Title + ' [\83\8c\83X\91\97\90M\8e¸\94s]', nil, gmiNG);
                EditorPage.ActivePage := PreviewTab;
-               SetContent(ResponseText);
+               SetContent(ResponseText, Browser);
        end else if State = gdsAbort then begin
                GikoForm.AddMessageList(FThreadItem.Title + ' [\92\86\92f]', nil, gmiSAD);
        end;
@@ -1571,57 +1527,25 @@ begin
        settingBody := TStringList.Create;
        try
                StatusBar.Panels[0].Text := 'SETTING.TXT\83_\83E\83\93\83\8d\81[\83h\92\86';
-               settingBody.Text := Indy.Get(URL);
-               if( Indy.ResponseCode = 200 ) then begin
-                       settingBody.SaveToFile(tmpBoard.GetSETTINGTXTFileName);
-                       tmpBoard.SETTINGTXTTime := Indy.Response.LastModified;
-                       tmpBoard.IsSETTINGTXT := true;
-                       tmpBoard.TitlePictureURL := GetTitlePictureURL(settingBody, tmpBoard);
-            tmpBoard.Modified := true;
-               end;
-       finally
-               StatusBar.Panels[0].Text := 'SETTING.TXT (' + IntToStr(Indy.ResponseCode) + ')';
-               settingBody.Free;
-               Screen.Cursor := crDefault;
-       end;
-       ShowBoardInformation(tmpBoard, BoardInformationMemo);
-end;
-
-procedure TEditorForm.GetheadtxtActionExecute(Sender: TObject);
-var
-       URL, RefURL: string;
-       settingBody: TStringList;
-       tmpBoard: TBoard;
-begin
-       InitIdHTTP(Indy);
-       if FThreadItem = nil then
-               tmpBoard := FBoard
-       else
-               tmpBoard := FThreadItem.ParentBoard;
-
-       if tmpBoard = nil then Exit;
-
-       RefURL  := tmpBoard.URL;
-       if RefURL[Length(RefURL)] <> '/' then
-               URL     := RefURL + '/' + 'head.txt'
-       else
-               URL     := RefURL + 'head.txt';
-
-       Indy.Request.LastModified := tmpBoard.HEADTXTTime;
-       Indy.Request.Referer := RefURL;
-       Screen.Cursor := crHourGlass;
-       settingBody := TStringList.Create;
-       try
-               StatusBar.Panels[0].Text := 'head.txt\83_\83E\83\93\83\8d\81[\83h\92\86';
-               settingBody.Text := Indy.Get(URL);
-               if( Indy.ResponseCode = 200 ) then begin
-                       settingBody.SaveToFile(tmpBoard.GETHEADTXTFileName);
-                       tmpBoard.HEADTXTTime := Indy.Response.LastModified;
-                       tmpBoard.IsHEADTXT := true;
-                       tmpBoard.Modified := true;
+               try
+                       settingBody.Text := Indy.Get(URL);
+                       if( Indy.ResponseCode = 200 ) then begin
+                               settingBody.SaveToFile(tmpBoard.GetSETTINGTXTFileName);
+                               tmpBoard.SETTINGTXTTime := Indy.Response.LastModified;
+                               tmpBoard.IsSETTINGTXT := true;
+                               tmpBoard.TitlePictureURL := GetTitlePictureURL(settingBody, tmpBoard);
+                               tmpBoard.Modified := true;
+                               StatusBar.Panels[0].Text := 'SETTING.TXT\8eæ\93¾\8a®\97¹(' + IntToStr(Indy.ResponseCode) + ')';
+                       end;
+               except
+                       on E: EIdException do begin
+                               if( AnsiPos('304', E.Message) > 0 ) then
+                                       StatusBar.Panels[0].Text := 'SETTING.TXT\8dX\90V\96³\82µ(' + IntToStr(Indy.ResponseCode) + ')'
+                               else
+                                       StatusBar.Panels[0].Text := 'SETTING.TXT\8eæ\93¾\83G\83\89\81[(' + IntToStr(Indy.ResponseCode) + ')';
+                       end;
                end;
        finally
-               StatusBar.Panels[0].Text := 'head.txt (' + IntToStr(Indy.ResponseCode) + ')';
                settingBody.Free;
                Screen.Cursor := crDefault;
        end;
@@ -1632,31 +1556,8 @@ procedure TEditorForm.ShowBoardInformation(ABoard: TBoard; AMemo: TMemo);
 var
        body: TStringList;
 begin
-        AMemo.Clear;
-       AMemo.Lines.Add('[head.txt]');
-       if ABoard.IsHEADTXT then begin
-               if FileExists(ABoard.GETHEADTXTFileName)  then begin
-                       AMemo.Lines.Add(DateTimeToStr(ABoard.HEADTXTTime) + ' \8dX\90V');
-                       body := TStringList.Create;
-                       try
-                               body.LoadFromFile(ABoard.GETHEADTXTFileName);
-                               CustomStringReplace(body, '<br>', '', true);
-                               AMemo.Lines.AddStrings(body);
-                       finally
-                               body.Free;
-                       end;
-               end else begin
-                       ABoard.IsHEADTXT := false;
-                       ABoard.HEADTXTTime := ZERO_DATE;
-                       AMemo.Lines.Add('Local\82É\95Û\91\82³\82ê\82½head.txt\82ª\8c©\82Â\82©\82è\82Ü\82¹\82ñ');
-                       AMemo.Lines.Add('\83\81\83j\83\85\81[\82æ\82è\8dÄ\8eæ\93¾\82µ\82Ä\82­\82¾\82³\82¢\81B');
-               end;
-       end else begin
-               AMemo.Lines.Add('head.txt\82ð\8eæ\93¾\82µ\82Ä\82¢\82Ü\82¹\82ñ\81B');
-               AMemo.Lines.Add('\83\81\83j\83\85\81[\82æ\82è\8eæ\93¾\82µ\82Ä\82­\82¾\82³\82¢\81B');
-       end;
-
-       AMemo.Lines.Add(#13#10 + '[SETTING.TXT]');
+       AMemo.Clear;
+       AMemo.Lines.Add('[SETTING.TXT]');
        if ABoard.IsSETTINGTXT then begin
                if FileExists(ABoard.GetSETTINGTXTFileName)  then begin
                        AMemo.Lines.Add(DateTimeToStr(ABoard.SETTINGTXTTime) + ' \8dX\90V');
@@ -1692,7 +1593,7 @@ begin
                        tmp := body[i];
                        Delete(tmp, 1, AnsiPos('=', tmp));
                        if AnsiPos('../', tmp) > 0 then begin
-                               CustomStringReplace(tmp, '../', GikoSys.UrlToServer(ABoard.URL));
+                               tmp := CustomStringReplace(tmp, '../', GikoSys.UrlToServer(ABoard.URL));
                        end;
                        Result := tmp;
                        Exit;
@@ -1713,6 +1614,7 @@ procedure TEditorForm.GetTitlePictureActionExecute(Sender: TObject);
 var
        memStream: TMemoryStream;
        tmpBoard: TBoard;
+       tmp : string;
 begin
        InitIdHTTP(Indy);
        memStream := TMemoryStream.Create;
@@ -1724,18 +1626,21 @@ begin
 
                Indy.Request.Referer := tmpBoard.URL;
                if      tmpBoard.TitlePictureURL <> '' then begin
-                       StatusBar.Panels[0].Text := '\94ÂTOP\89æ\91\9c\83_\83E\83\93\83\8d\81[\83h\92\86';
+                       StatusBar.Panels[0].Text := '\94Â\83g\83b\83v\89æ\91\9c\83_\83E\83\93\83\8d\81[\83h\92\86';
                        Screen.Cursor := crHourGlass;
-                       Indy.Get(tmpBoard.TitlePictureURL, memStream);
-                       if Indy.ResponseCode = 200 then begin
-                               memStream.SaveToFile(tmpBoard.GetTitlePictureFileName);
-                               ShowTitlePicture();
-                               tmpBoard.Modified := true;
-                  end;
+                       try
+                               Indy.Get(tmpBoard.TitlePictureURL, memStream);
+                               if Indy.ResponseCode = 200 then begin
+                                       memStream.SaveToFile(tmpBoard.GetTitlePictureFileName);
+                                       ShowTitlePicture();
+                                       tmpBoard.Modified := true;
+                               end;
+                       except
+                       end;
                end;
        finally
-        Screen.Cursor := crDefault;
-               StatusBar.Panels[0].Text := '\94ÂTOP\89æ\91\9c (' + IntToStr(Indy.ResponseCode) + ')';
+               Screen.Cursor := crDefault;
+               StatusBar.Panels[0].Text := '\94Â\83g\83b\83v\89æ\91\9c (' + IntToStr(Indy.ResponseCode) + ')';
                memStream.Free;
        end;
 
@@ -1743,6 +1648,7 @@ end;
 procedure TEditorForm.ShowTitlePicture();
 var
        tmpBoard: TBoard;
+       s: String;
 begin
        if FThreadItem = nil then
                tmpBoard := FBoard
@@ -1750,9 +1656,87 @@ begin
                tmpBoard := FThreadItem.ParentBoard;
 
        if FileExists(tmpBoard.GetTitlePictureFileName) then begin
-       TitlePictureBrowser.Navigate(tmpBoard.GetTitlePictureFileName);
+               TitlePictureBrowser.Navigate(tmpBoard.GetTitlePictureFileName);
        end else begin
-        TitlePictureBrowser.Navigate('about:blank');
+               s := '\94Â\83g\83b\83v\89æ\91\9c\96¢\8eæ\93¾\82Å\82·\81B<br>\83\81\83j\83\85\81[\82æ\82è\8eæ\93¾\82µ\82Ä\82­\82¾\82³\82¢\81B';
+               SetContent(s, TitlePictureBrowser);
+       end;
+end;
+
+function TEditorForm.GetFusianaName(body: TStringList; ABoard: TBoard): String;
+var
+       i: Integer;
+       tmp: string;
+begin
+       for i := 0 to body.Count - 1 do begin
+               if (AnsiPos('BBS_NONAME_NAME=', body[i]) > 0) then begin
+                       tmp := body[i];
+                       Delete(tmp, 1, AnsiPos('=', tmp));
+                       Result := tmp;
+                       Exit;
+               end;
+       end;
+end;
+
+procedure TEditorForm.GetHeadTXTActionExecute(Sender: TObject);
+var
+       URL, RefURL: string;
+       settingBody: TStringList;
+       tmpBoard: TBoard;
+
+begin
+       InitIdHTTP(Indy);
+       if FThreadItem = nil then
+               tmpBoard := FBoard
+       else
+               tmpBoard := FThreadItem.ParentBoard;
+
+       if tmpBoard = nil then Exit;
+
+       RefURL  := tmpBoard.URL;
+       if RefURL[Length(RefURL)] <> '/' then
+               URL     := RefURL + '/' + 'head.txt'
+       else
+               URL     := RefURL + 'head.txt';
+
+       if FileExists(tmpBoard.GETHEADTXTFileName) then
+               Indy.Request.LastModified := tmpBoard.HEADTXTTime
+       else
+               Indy.Request.LastModified := ZERO_DATE;
+
+       Indy.Request.Referer := RefURL;
+       Screen.Cursor := crHourGlass;
+       settingBody := TStringList.Create;
+       try
+               StatusBar.Panels[0].Text := 'head.txt\83_\83E\83\93\83\8d\81[\83h\92\86';
+               try
+                       settingBody.Text := Indy.Get(URL);
+                       if( Indy.ResponseCode = 200 ) then begin
+                               settingBody.Insert(0, '<HTML lang="ja"><HEAD>');
+                               settingBody.Insert(1, '<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">');
+                               settingBody.Insert(2, '<TITLE>' + tmpBoard.Title + '</TITLE>');
+                               settingBody.Insert(3, '<base href="' + RefURL + '"></HEAD><BODY>');
+                               settingBody.Add('</BODY></HTML>');
+                               settingBody.SaveToFile(tmpBoard.GETHEADTXTFileName);
+                               tmpBoard.HEADTXTTime := Indy.Response.LastModified;
+                               tmpBoard.IsHEADTXT := true;
+                               tmpBoard.Modified := true;
+                               StatusBar.Panels[0].Text := 'head.txt\8eæ\93¾\8a®\97¹(' + IntToStr(Indy.ResponseCode) + ')';
+                       end;
+               except
+                       on E: EIdException do begin
+                               if( AnsiPos('304', E.Message) > 0 ) then
+                                       StatusBar.Panels[0].Text := 'head.txt\8dX\90V\96³\82µ(' + IntToStr(Indy.ResponseCode) + ')'
+                               else
+                                       StatusBar.Panels[0].Text := 'head.txt\8eæ\93¾\83G\83\89\81[(' + IntToStr(Indy.ResponseCode) + ')';
+                       end;
+               end;
+       finally
+               settingBody.Free;
+               Screen.Cursor := crDefault;
        end;
+       if tmpBoard.IsHEADTXT then
+               GikoSys.OpenBrowser(tmpBoard.GETHEADTXTFileName, gbtUserApp);
 end;
+
 end.