OSDN Git Service

・スレタイにタブ文字があるスレッドをHTML化して保存できない問題を修正
[gikonavigoeson/gikonavi.git] / NewBoard.pas
index 8a5a8e4..1cf9497 100644 (file)
@@ -26,6 +26,7 @@ type
        Label13: TLabel;
        EditIgnoreListsButton: TButton;
        Label2: TLabel;
+    SakuCheckBox: TCheckBox;
                procedure UpdateButtonClick(Sender: TObject);
                procedure StopButtonClick(Sender: TObject);
                procedure CloseButtonClick(Sender: TObject);
@@ -42,8 +43,10 @@ type
                procedure SetIgnoreCategory(b: boolean);
                procedure EditIgnoreList(Sender: TObject);
                procedure UpdateIgnoreList(Sender: TObject);
+        function CheckDeleteItem(ini: TMemIniFile): Boolean;
        public
                { Public \90é\8c¾ }
+        class procedure InitHTTPClient(client : TIdHTTP);
        end;
 
 var
@@ -61,6 +64,7 @@ var
        Item: TNewBoardItem;
        URL : String;
        protocol, host, path, document, port, bookmark: String;
+    TabURLs: TStringList;
 begin
        try
                MessageMemo.Clear;
@@ -81,14 +85,16 @@ begin
                if FAbort then
                        Exit;
                if Item.FContent <> '' then begin
-                       GikoDM.TabsSaveAction.Tag := 1;
-                       GikoDM.TabsOpenAction.Tag := 1;
-                       GikoDM.TabsSaveAction.Execute;
-                       if (UpdateURL(Item.FContent)) then begin
-                               GikoForm.ReloadBBS;
-                       end;
-                       GikoDM.TabsSaveAction.Tag := 0;
-                       GikoDM.TabsOpenAction.Tag := 0;
+            TabURLs := TStringList.Create;
+            try
+                GikoDM.GetTabURLs(TabURLs);
+                       if (UpdateURL(Item.FContent)) then begin
+                               GikoForm.ReloadBBS;
+                           end;
+                GikoDM.OpenURLs(TabURLs);
+            finally
+                       TabURLs.Free;
+            end;
                end else
                        MessageMemo.Lines.Add('\83_\83E\83\93\83\8d\81[\83h\82ª\8e¸\94s\82µ\82Ü\82µ\82½[' + IntToStr(Item.FResponseCode) + ']');
        finally
@@ -116,32 +122,8 @@ var
        s: string;
        i: Integer;
 begin
-       Indy.Request.Clear;
-       Indy.RecvBufferSize := Gikosys.Setting.RecvBufferSize;
-       Indy.ProxyParams.BasicAuthentication := False;
-       if GikoSys.Setting.ReadProxy then begin
-               if GikoSys.Setting.ProxyProtocol then
-                       Indy.ProtocolVersion := pv1_1
-               else
-                       Indy.ProtocolVersion := pv1_0;
-               Indy.ProxyParams.ProxyServer := GikoSys.Setting.ReadProxyAddress;
-               Indy.ProxyParams.ProxyPort := GikoSys.Setting.ReadProxyPort;
-               Indy.ProxyParams.ProxyUsername := GikoSys.Setting.ReadProxyUserID;
-               Indy.ProxyParams.ProxyPassword := GikoSys.Setting.ReadProxyPassword;
-               if GikoSys.Setting.ReadProxyUserID <> '' then
-                       Indy.ProxyParams.BasicAuthentication := True;
-       end else begin
-               if GikoSys.Setting.Protocol then
-                       Indy.ProtocolVersion := pv1_1
-               else
-                       Indy.ProtocolVersion := pv1_0;
-               Indy.ProxyParams.ProxyServer := '';
-               Indy.ProxyParams.ProxyPort := 80;
-               Indy.ProxyParams.ProxyUsername := '';
-               Indy.ProxyParams.ProxyPassword := '';
-       end;
-       //URL := GikoSys.Setting.BoardURL2ch;
-       //URL := BoardURLComboBox.Text;
+    InitHTTPClient( Indy );
+
        Indy.Request.UserAgent := GikoSys.GetUserAgent;
        Indy.Request.Referer := '';
        Indy.Request.AcceptEncoding := 'gzip';
@@ -212,6 +194,7 @@ var
        ini: TMemIniFile;
        oldURLs : TStringList;
        newURLs : TStringList;
+    SakuIdx: Integer;
 begin
        Change := False;
        MessageMemo.Lines.Add('\90V\94Â\81A\94ÂURL\95Ï\8dX\83`\83F\83b\83N\82ð\8aJ\8en\82µ\82Ü\82·');
@@ -290,9 +273,19 @@ begin
                         tmp := CustomStringReplace(tmp, 'TARGET=_blank', '');
                                                i := AnsiPos('>', tmp);
                                                if i <> 0 then begin
-                                                       URL := Copy(tmp, 1, i - 1);
+                                                       URL := Trim(Copy(tmp, 1, i - 1));
                                                        Title := Copy(tmp, i + 1, Length(tmp));
-                            Board := BBSs[ 0 ].FindBoardFromTitle(Title);
+                            if (SakuCheckBox.Checked = True) and (Title = '\8dí\8f\9c\97v\90¿') then begin
+                                SakuIdx := Pos('.2ch.net/saku/', URL);
+                                if (SakuIdx > 0) then
+                                    URL := Copy(URL, 1, SakuIdx - 1) + '.2ch.net/saku2ch/';
+                            end;
+                            // BBSs\82ª\8bó\91Î\8dô
+                            if Length(BBSs) = 0 then begin
+                                Board := nil;
+                            end else begin
+                                Board := BBSs[ 0 ].FindBoardFromTitleAndCategory(cate, Title);
+                            end;
                             if Board = nil then begin
                                MessageMemo.Lines.Add('\90V\94Â\92Ç\89Á\81u' + Title + '(' + URL + ')\81v');
                                 ini.WriteString(cate, Title, URL);
@@ -316,6 +309,10 @@ begin
                                        end;
                                end;
                        end;
+            // \83J\83e\83S\83\8a/\94Â\82ª\8c¸\82Á\82½\82¾\82¯\82¾\82ÆChange\83t\83\89\83O\82ª\82½\82½\82È\82¢\82Æ\82«\82Ì\91Î\8dô
+            if not Change then begin
+                Change := CheckDeleteItem(ini);
+            end;
                finally
                        if Change then
                                ini.UpdateFile;
@@ -336,9 +333,66 @@ begin
        end;
        Result := Change;
 end;
-
+//! \8dí\8f\9c\83J\83e\83S\83\8a/\94Â\83`\83F\83b\83N
+function TNewBoardDialog.CheckDeleteItem(ini: TMemIniFile): Boolean;
+var
+       URL: string;
+       Title: string;
+       orgini: TMemIniFile;
+    orgStrings, newStrings: TStringList;
+    i: Integer;
+begin
+    orgini := TMemIniFile.Create(GikoSys.GetBoardFileName);
+    orgStrings := TStringList.Create;
+    newStrings := TStringList.Create;
+    try
+        ini.ReadSections(newStrings);
+        orgini.ReadSections(orgStrings);
+        if (newStrings.Count <> orgStrings.Count) then begin
+            //\83J\83e\83S\83\8a\92Ç\89Á\82Í\81A\94Â\82ª\92Ç\89Á\82É\82È\82é\82Ì\82Å\83`\83F\83b\83N\82µ\82È\82­\82Ä\82à\82¢\82¢
+            //\83J\83e\83S\83\8a\82Ì\8dí\8f\9c\83`\83F\83b\83N
+            for i := 0 to orgStrings.Count - 1 do begin
+                if (newStrings.IndexOf(orgStrings[i]) = -1) then begin
+                    MessageMemo.Lines.Add('\83J\83e\83S\83\8a\8dí\8f\9c\81u' + orgStrings[i] + '\81v');
+                end;
+            end;
+            Result := True;
+        end else begin
+            // \94Â\82Ì\90\94\83`\83F\83b\83N
+            ini.GetStrings(newStrings);
+            orgini.GetStrings(orgStrings);
+            if (newStrings.Count <> orgStrings.Count) then begin
+                // \94Â\82Ì\8dí\8f\9c\83`\83F\83b\83N
+                for i := 0 to orgStrings.Count - 1 do begin
+                    if (newStrings.IndexOf(orgStrings[i]) = -1) then begin
+                        Title := Copy(orgStrings[i], 1 , AnsiPos('=',orgStrings[i]) - 1);
+                        URL := Copy(orgStrings[i],
+                            AnsiPos('=',orgStrings[i]) + 1, Length(orgStrings[i]));
+                        MessageMemo.Lines.Add('\94Â\8dí\8f\9c\81u' + Title + '(' + URL +')\81v');
+                    end;
+                end;
+                Result := True;
+            end;
+        end;
+    finally
+        orgStrings.Free;
+        newStrings.Free;
+        orgini.Free;
+    end;
+end;
 procedure TNewBoardDialog.FormCreate(Sender: TObject);
+var
+    CenterForm: TCustomForm;
 begin
+    CenterForm := TCustomForm(Owner);
+    if Assigned(CenterForm) then begin
+        Left := ((CenterForm.Width - Width) div 2) + CenterForm.Left;
+        Top := ((CenterForm.Height - Height) div 2) + CenterForm.Top;
+    end else begin
+        Left := (Screen.Width - Width) div 2;
+        Top := (Screen.Height - Height) div 2;
+    end;
+
        StopButton.Enabled := False;
        BoardURLComboBox.Clear;
        BoardURLComboBox.Items.AddStrings(GikoSys.Setting.BoardURLs);
@@ -348,6 +402,8 @@ begin
                BoardURLComboBox.ItemIndex := 0;
        end;
        SetIgnoreCategory(false);
+
+    SakuCheckBox.Checked := GikoSys.Setting.SakuBoard;
 end;
 //\94Â\8dX\90V\82Ì\8f\9c\8aO\83J\83e\83S\83\8a\83\8a\83X\83g\82Ì\93o\98^
 {['\82¨\82·\82·\82ß', '\93Á\95Ê\8aé\89æ', '\82Ü\82¿\82a\82a\82r', '\83`\83\83\83b\83g', '\82¨\8aG\82©\82«', '\89^\89c\88Ä\93à', '\83c\81[\83\8b\97Þ', '\91¼\82Ì\83T\83C\83g']}
@@ -411,6 +467,7 @@ end;
 procedure TNewBoardDialog.FormClose(Sender: TObject;
   var Action: TCloseAction);
 begin
+    GikoSys.Setting.SakuBoard := SakuCheckBox.Checked;
        IgnoreLists.Free;
 end;
 //! \83\8d\81[\83J\83\8b\83t\83@\83C\83\8b\82ð\83\8d\81[\83h\82·\82é
@@ -430,4 +487,37 @@ begin
                end;
        end;
 end;
+
+class procedure TNewBoardDialog.InitHTTPClient(client : TIdHTTP);
+begin
+       client.Request.Clear;
+    client.Request.CustomHeaders.Clear;
+       client.Request.UserAgent := GikoSys.GetUserAgent;
+       client.RecvBufferSize := Gikosys.Setting.RecvBufferSize;
+       client.ProxyParams.BasicAuthentication := False;
+       client.ReadTimeout := GikoSys.Setting.ReadTimeOut;
+    client.ConnectTimeout := GikoSys.Setting.ReadTimeOut;
+
+       if GikoSys.Setting.ReadProxy then begin
+               if GikoSys.Setting.ProxyProtocol then
+                       client.ProtocolVersion := pv1_1
+               else
+                       client.ProtocolVersion := pv1_0;
+               client.ProxyParams.ProxyServer := GikoSys.Setting.ReadProxyAddress;
+               client.ProxyParams.ProxyPort := GikoSys.Setting.ReadProxyPort;
+               client.ProxyParams.ProxyUsername := GikoSys.Setting.ReadProxyUserID;
+               client.ProxyParams.ProxyPassword := GikoSys.Setting.ReadProxyPassword;
+               if GikoSys.Setting.ReadProxyUserID <> '' then
+                       client.ProxyParams.BasicAuthentication := True;
+       end else begin
+               if GikoSys.Setting.Protocol then
+                       client.ProtocolVersion := pv1_1
+               else
+                       client.ProtocolVersion := pv1_0;
+               client.ProxyParams.ProxyServer := '';
+               client.ProxyParams.ProxyPort := 80;
+               client.ProxyParams.ProxyUsername := '';
+               client.ProxyParams.ProxyPassword := '';
+       end;
+end;
 end.