Browse Source

* Onprogress added to .compress and .decompress

git-svn-id: trunk@14551 -
marco 15 years ago
parent
commit
d52071fc04
1 changed files with 42 additions and 1 deletions
  1. 42 1
      packages/paszlib/src/zipper.pp

+ 42 - 1
packages/paszlib/src/zipper.pp

@@ -664,13 +664,23 @@ Var
   Buf : PByte;
   I,Count,NewCount : Integer;
   C : TCompressionStream;
-
+  BytesNow : Integer;
+  NextMark : Integer;
+  OnBytes : Integer;
+  FSize    : Integer;
 begin
   CRC32Val:=$FFFFFFFF;
   Buf:=GetMem(FBufferSize);
+  if FOnPercent = 0 then 
+    FOnPercent := 1; 
+  OnBytes:=Round((FInFile.Size * FOnPercent) / 100);
+  BytesNow:=0; NextMark := OnBytes;
+  FSize:=FInfile.Size;
   Try
     C:=TCompressionStream.Create(FCompressionLevel,FOutFile,True);
     Try
+      if assigned(FOnProgress) then
+        fOnProgress(self,0);
       Repeat
         Count:=FInFile.Read(Buf^,FBufferSize);
         For I:=0 to Count-1 do
@@ -678,6 +688,13 @@ begin
         NewCount:=Count;
         While (NewCount>0) do
           NewCount:=NewCount-C.Write(Buf^,NewCount);
+        inc(BytesNow,Count);
+        if BytesNow>NextMark Then
+          begin
+            if (FSize>0) and assigned(FOnProgress) Then
+              FOnProgress(self,100 * ( BytesNow / FSize));
+            inc(NextMark,OnBytes);
+          end;   
       Until (Count=0);
     Finally
       C.Free;
@@ -685,6 +702,8 @@ begin
   Finally
     FreeMem(Buf);
   end;
+  if assigned(FOnProgress) then
+    fOnProgress(self,100.0);
   Crc32Val:=NOT Crc32Val;
 end;
 
@@ -709,9 +728,22 @@ Var
   Buf : PByte;
   I,Count : Integer;
   C : TDeCompressionStream;
+  BytesNow : Integer;
+  NextMark : Integer;
+  OnBytes  : Integer;
+  FSize    : Integer;
 
 begin
   CRC32Val:=$FFFFFFFF;
+  if FOnPercent = 0 then
+    FOnPercent := 1;
+  OnBytes:=Round((FInFile.Size * FOnPercent) / 100);
+  BytesNow:=0; NextMark := OnBytes;
+  FSize:=FInfile.Size;
+
+  If Assigned(FOnProgress) then
+    fOnProgress(self,0);
+
   Buf:=GetMem(FBufferSize);
   Try
     C:=TDeCompressionStream.Create(FInFile,True);
@@ -721,6 +753,13 @@ begin
         For I:=0 to Count-1 do
           UpdC32(Buf[i]);
         FOutFile.Write(Buf^,Count);
+        inc(BytesNow,Count);
+        if BytesNow>NextMark Then
+           begin
+             if (FSize>0) and assigned(FOnProgress) Then
+               FOnProgress(self,100 * ( BytesNow / FSize));
+             inc(NextMark,OnBytes);
+           end;
       Until (Count=0);
     Finally
       C.Free;
@@ -728,6 +767,8 @@ begin
   Finally
     FreeMem(Buf);
   end;
+ if assigned(FOnProgress) then
+   fOnProgress(self,100.0);
   Crc32Val:=NOT Crc32Val;
 end;