OSDN Git Service

まちBBSで削除レスがあるレス番号とスレの件数がずれる不具合を修正
[gikonavigoeson/gikonavi.git] / NewBoard.pas
index a242402..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,6 +43,7 @@ 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);
@@ -192,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·');
@@ -270,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);
@@ -296,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;
@@ -316,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);
@@ -328,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']}
@@ -391,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é
@@ -415,8 +492,12 @@ 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