OSDN Git Service

あぼーん検出時にココまで読んだと新着レスを調整するようになった。
authoryoffy <yoffy>
Mon, 2 Aug 2004 16:36:52 +0000 (16:36 +0000)
committeryoffy <yoffy>
Mon, 2 Aug 2004 16:36:52 +0000 (16:36 +0000)
ItemDownload.pas
readme/readme.txt

index 6b87f42..1017bd9 100644 (file)
@@ -59,7 +59,7 @@ type
                property Item: TDownloadItem read FItem write FItem;
                property Number: Integer read FNumber write FNumber;
                constructor Create(CreateSuspended: Boolean);
-        destructor Destroy; override;
+                               destructor Destroy; override;
                procedure Abort;
                property OnWork: TGikoWorkEvent read FOnWork write FOnWork;
                property OnWorkBegin: TGikoWorkBeginEvent read FOnWorkBegin write FOnWorkBegin;
@@ -81,6 +81,7 @@ type
                FState: TGikoDownloadState;
                FErrText: string;
                FForceDownload: Boolean;
+               FIsAbone : Boolean;
        public
                procedure SaveListFile;
                procedure SaveItemFile;
@@ -96,6 +97,7 @@ type
                property State: TGikoDownloadState read FState write FState;
                property ErrText: string read FErrText write FErrText;
                property ForceDownload: Boolean read FForceDownload write FForceDownload;
+               property IsAbone : Boolean read FIsAbone write FIsAbone;
        end;
 
 implementation
@@ -153,7 +155,6 @@ var
        Idx: Integer;
        ATitle: string;
        DownloadResult: Boolean;
-       Abone: Boolean;
        foundPos: Integer;
        boardPlugIn     : TBoardPlugIn;
        listContent     : string;
@@ -338,18 +339,18 @@ begin
                                                end;
                                        end;
                                end;
-                               Abone := False;
+                               Item.IsAbone := False;
                                DownloadResult := DatDownload(Item.DownType, URL, Modified, RangeStart, AdjustLen);
                                {$IFDEF DEBUG}
                                Writeln('ResponseCode: ' + IntToStr(FIndy.ResponseCode));
                                {$ENDIF}
                                if Item.DownType = gdtThread then begin
                                        if Item.ResponseCode = 416 then begin
-                                               Abone := True;
+                                               Item.IsAbone := True;
                                                DownloadResult := True;
                                        end else if DownloadResult and (AdjustLen < 0) then begin
                                                if Copy( Item.Content, 1, adjustMargin ) <> lastContent then
-                                                       Abone := True;
+                                                       Item.IsAbone := True;
                                        end;
                                end;
 
@@ -364,7 +365,7 @@ begin
                                        {$IFDEF DEBUG}
                                        Writeln('Date:' + FIndy.Response.RawHeaders.Values['Date']);
                                        {$ENDIF}
-                                       if Abone then begin
+                                       if Item.IsAbone then begin
                                                {$IFDEF DEBUG}
                                                Writeln('\82 \82Ú\81[\82ñ\8c\9f\8fo');
                                                {$ENDIF}
@@ -1172,47 +1173,105 @@ var
        ini: TMemIniFile;
        Res: TResRec;
        NewRes: Integer;
-    finish : Boolean;
-    loopCnt : Integer;
+       finish : Boolean;
+       loopCnt : Integer;
+       KokoTxt : string;
+       KokoIdx : Integer;
+       NewTxt  : string;
+       NewIdx  : Integer;
+       LastTxt : string;
+       LastIdx : Integer;
 begin
        FileName := ThreadItem.GetThreadFileName;
 
        if not ThreadItem.IsBoardPlugInAvailable then begin
                if Trim(Content) = '' then
                        Exit;
+
                GikoSys.ForceDirectoriesEx(ExtractFilePath(FileName));
 
-       //      Cnt := 0;
+               //      Cnt := 0;
                Body := TStringList.Create;
-        NewRes := 0;
-        OldCnt := 0;
+               NewRes := 0;
+               OldCnt := 0;
                try
-       //              if FileExists(FileName) and (ResponseCode = 206) then begin
+               //              if FileExists(FileName) and (ResponseCode = 206) then begin
                        if FileExists(FileName) and (State = gdsDiffComplete) then begin
-       //                      Body.Text := Content;
-       //                      if Body.Count > 0 then
-       //                              Body.Delete(0);
-       //                      Content := Body.Text;
-                loopCnt := 10;
+               //                      Body.Text := Content;
+               //                      if Body.Count > 0 then
+               //                              Body.Delete(0);
+               //                      Content := Body.Text;
+                               loopCnt := 10;
                                repeat
-                    finish := true;
-                       try
+                                       finish := true;
+                                       try
                                                Body.LoadFromFile(FileName);
                                                OldCnt := Body.Count;
                                                Body.Text := Body.Text + Content;
                                                Body.SaveToFile(FileName);
                                                NewRes := Body.Count - OldCnt;
-                       except
-                               on E:EFOpenError do begin
-                            sleep(10);
-                               finish := false;
-                            Dec(loopCnt);
-                        end;
-                       end;
-                until finish and ( loopCnt > 0 );
+                                       except
+                                               on E:EFOpenError do begin
+                                                       sleep(10);
+                                                       finish := false;
+                                                       Dec(loopCnt);
+                                               end;
+                                       end;
+                               until finish and ( loopCnt > 0 );
                                //Cnt := Body.Count;
                        end else begin
-                               Body.Text := Content;
+                               if IsAbone then begin
+                                       // \82 \82Ú\81[\82ñ\82ð\8c\9f\8fo\82µ\82½\82Ì\82Å\82±\82±\82Ü\82Å\93Ç\82ñ\82¾\82Æ\90V\92\85\83\8c\83X\94Ô\82Ì\82Â\82¯\82È\82¨\82µ
+                                       loopCnt := 10;
+                                       repeat
+                                               finish := true;
+                                               try
+                                                       Body.LoadFromFile(FileName);
+                                               except
+                                                       on E:EFOpenError do begin
+                                                               sleep(10);
+                                                               finish := false;
+                                                               Dec(loopCnt);
+                                                       end;
+                                               end;
+                                       until finish and ( loopCnt > 0 );
+                                       LastTxt := Body.Strings[ ThreadItem.Count - 1 ];
+                                       if ThreadItem.Kokomade > 0 then begin
+                                               KokoTxt := Body.Strings[ ThreadItem.Kokomade - 1 ];
+                                       end;
+                                       if ThreadItem.NewReceive > 0 then begin
+                                               NewTxt := Body.Strings[ ThreadItem.NewReceive - 1 ];
+                                       end;
+
+                                       Body.Text := Content;
+                                       ThreadItem.AllResCount := 0;
+                                       ThreadItem.NewResCount := 0;
+                                       NewRes := Body.Count;
+
+                                       Body.Find( LastTxt, LastIdx );
+                                       OldCnt := LastIdx + 1;
+                                       if ThreadItem.Kokomade > 0 then begin
+                                               Body.Find( KokoTxt, KokoIdx );
+                                               ThreadItem.Kokomade := KokoIdx + 1;
+                                       end;
+                                       if ThreadItem.NewReceive > 0 then begin
+                                               Body.Find( NewTxt, NewIdx );
+                                               Inc( NewIdx );
+                                               ThreadItem.AllResCount := NewIdx;
+                                               if OldCnt >= NewIdx then
+                                                       NewRes := Body.Count - OldCnt
+                                               else
+                                                       NewRes := Body.Count - NewIdx;
+                                       end;
+                               end else begin
+                                       Body.Text := Content;
+                                       //ThreadItem.Count := 0;
+                                       ThreadItem.AllResCount := 0;
+                                       ThreadItem.NewResCount := 0;
+                                       OldCnt := 0;
+                                       NewRes := Body.Count;
+                                       //Cnt := Body.Count;
+                               end;
        //                      if Body.Count > 0 then
        //                              Body.Delete(0);
                                Body.SaveToFile(FileName);
@@ -1222,18 +1281,12 @@ begin
                                        ThreadItem.Title := Res.FTitle;
                                end;
                                ThreadItem.Size := 0;
-                               //ThreadItem.Count := 0;
-                               ThreadItem.AllResCount := 0;
-                               ThreadItem.NewResCount := 0;
-                               OldCnt := 0;
-                               NewRes := Body.Count;
-                               //Cnt := Body.Count;
                        end;
                        Cnt := Body.Count;
                finally
                        Body.Free;
                end;
-        
+
                ThreadItem.Size := ThreadItem.Size + ContentLength;
                ThreadItem.LastModified := LastModified;
                ThreadItem.Count := Cnt;
@@ -1241,7 +1294,7 @@ begin
                ThreadItem.NewResCount := NewRes;
                ThreadItem.NewReceive := OldCnt + 1;
        end;
-    ThreadItem.AllResCount := ThreadItem.Count;
+       ThreadItem.AllResCount := ThreadItem.Count;
        ThreadItem.IsLogFile := True;
        ThreadItem.RoundDate := Now;
        ThreadItem.UnRead := True;
@@ -1264,7 +1317,7 @@ begin
 //             ini.WriteInteger('Setting', 'RoundNo', ThreadItem.RoundNo);
                ini.WriteBool('Setting', 'Round', ThreadItem.Round);
                ini.WriteBool('Setting', 'UnRead', ThreadItem.UnRead);
-        ini.UpdateFile;
+               ini.UpdateFile;
        finally
                ini.Free;
        end;
index 5366816..dc3a594 100644 (file)
@@ -105,6 +105,8 @@ Windows Server 2003 Enterprise Edition IE6
   \83\8c\83X\91\97\90M\8e\9e\82Ì\96¼\91O\97\93\82ª\81hfusianasan\81h\82©\81h\8eR\8dè\8fÂ\81h\82¾\82Æ\8cx\8d\90\83\81\83b\83Z\81[\83W\82ª\82Å\82é\82æ\82¤\82É\82È\82Á\82½\81B
   \83X\83\8c\88ê\97\97\82Å\8eæ\93¾\90\94\82Ì\82©\82í\82è\82É\96¢\8eæ\93¾\90\94\82ð\95\\8e¦\82Å\82«\82é\82æ\82¤\82É\82µ\82½
   \83X\83\8c\88ê\97\97\82Ì\83\\81[\83g\8f\87\82ð\95Û\91\82·\82é\82æ\82¤\82É\82µ\82½
+\81@\83\8c\83X\82Ì\8dÅ\90V100\83\8c\83X\82Ì\82Ý\95\\8e¦\82É\89Á\82¦\82Ä\96¢\93Ç\82Ì\82Ý\95\\8e¦\81A\90V\92\85\82Ì\82Ý\95\\8e¦\82ð\92Ç\89Á\81B
+\81@\82 \82Ú\81[\82ñ\8e\9e\82É\83R\83R\82Ü\82Å\93Ç\82ñ\82¾\82Æ\90V\92\85\83\8c\83X\82ð\92²\90®\82·\82é\82æ\82¤\82É\82È\82Á\82½\81B
 
 2004/04/19
   Version ÊÞÀ47