OSDN Git Service

・差分のみ取得するときに、開始位置の計算が間違っていたのを修正。
authoryoffy <yoffy>
Thu, 20 Nov 2003 15:47:42 +0000 (15:47 +0000)
committeryoffy <yoffy>
Thu, 20 Nov 2003 15:47:42 +0000 (15:47 +0000)
 具体的には、ログファイルの byte 数が基準になっていたが、実際はログと鯖の改行コードが違うため、毎回何 byte 取得したか覚えておく必要がある。

res/ExternalBoardPlugIn/ExternalBoardPlugIn.dpr

index d41e19b..aa8247d 100644 (file)
@@ -78,8 +78,8 @@ const
        PLUGIN_NAME                             = '2chPlugIn';
        MAJOR_VERSION                   = 1;
        MINOR_VERSION                   = 0;
-       RELEASE_VERSION         = 'alpha';
-       REVISION_VERSION        = 2;
+       RELEASE_VERSION         = 'beta';
+       REVISION_VERSION        = 1;
 
 // =========================================================================
 // \8eG\97p\8aÖ\90\94
@@ -377,7 +377,9 @@ begin
                        datURL          :=
                                uri.Protocol + '://' + uri.Host + '/' +
                                uriList[ 3 ] + '/dat/' + uriList[ 4 ] + '.dat';
-                       responseCode := InternalDownload( PChar( datURL ), modified, tmp, logStream.Size );
+                       // \82 \82Ú\81[\82ñ\83`\83F\83b\83N\82Ì\82½\82ß 1 \83o\83C\83g\91O\82©\82ç\8eæ\93¾\82·\82é
+                       // \81¦\83\8d\83O\82Æ\8eI\82Ì dat \82Í\89ü\8ds\83R\81[\83h\82ª\88á\82¤\82½\82ß\83t\83@\83C\83\8b\83T\83C\83Y\82ª\95Ï\82í\82Á\82Ä\82¢\82é\82±\82Æ\82É\92\8d\88Ó
+                       responseCode := InternalDownload( PChar( datURL ), modified, tmp, Max( 0, Size - 1 ) );
 
                        try
                                if (responseCode = 200) or (responseCode = 206) then begin
@@ -385,14 +387,19 @@ begin
                                        try
                                                tmpLen                                  := StrLen( tmp );
 
-                                               IsLogFile                               := True;
+                                               if Count = 0 then begin
+                                                       Result := dsComplete;
+                                                       downResult.Text                 := string( tmp ); // \83J\83E\83\93\83g\82Ì\82½\82ß\82¾\82¯
+                                                       logStream.Position      := logStream.Size;
+                                                       logStream.Write( (tmp)^, tmpLen );
 
-                                               if Count = 0 then
-                                                       Result := dsComplete
-                                               else
-                                                       Result := dsDiffComplete;
-                                               if (Count = 0) or (LF = tmp^) then begin
+                                                       NewReceive              := Count + 1;
+                                                       Count                                   := Count + downResult.Count;
+                                                       NewResCount             := downResult.Count;
+                                                       Size                                    := tmpLen;
+                                               end else if LF = tmp^ then begin
                                                        // \90V\8bK\81A\82Ü\82½\82Í\92Ç\8bL
+                                                       Result := dsDiffComplete;
                                                        downResult.Text                 := string( tmp + 1 ); // \83J\83E\83\93\83g\82Ì\82½\82ß\82¾\82¯
                                                        logStream.Position      := logStream.Size;
                                                        logStream.Write( (tmp + 1)^, tmpLen - 1 );
@@ -400,12 +407,14 @@ begin
                                                        NewReceive              := Count + 1;
                                                        Count                                   := Count + downResult.Count;
                                                        NewResCount             := downResult.Count;
+                                                       Size                                    := Size + tmpLen - 1;
                                                end else begin
                                                        // \82 \82Ú\81[\82ñ
-                                                       modified                        := LastModified;
+                                                       Result := dsDiffComplete;
                                                        // \8dÄ\8eæ\93¾
+                                                       modified                        := LastModified;
                                                        responseCode    := InternalDownload(
-                                                               PChar( datURL ), modified, tmp2, 0, logStream.Size - 1 );
+                                                               PChar( datURL ), modified, tmp2, 0, Size );
                                                        logStream.Position := 0;
                                                        logStream.Write( tmp2, StrLen( tmp2 ) );
                                                        logStream.Write( tmp, tmpLen );
@@ -419,10 +428,12 @@ begin
                                                                NewReceive := 1;
                                                        Count                                   := downResult.Count;
                                                        NewResCount             := Count - NewReceive + 1;
+                                                       Size                                    := StrLen( tmp2 ) + tmpLen;
                                                end;
 
                                                LastModified    := modified;
                                                RoundDate                       := Now;
+                                               IsLogFile                       := True;
                                        finally
                                                downResult.Free;
                                        end;