From d52071fc0405e7945d804ecb4ed51c9bc491eb7c Mon Sep 17 00:00:00 2001 From: marco Date: Tue, 5 Jan 2010 23:02:40 +0000 Subject: [PATCH] * Onprogress added to .compress and .decompress git-svn-id: trunk@14551 - --- packages/paszlib/src/zipper.pp | 43 +++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/packages/paszlib/src/zipper.pp b/packages/paszlib/src/zipper.pp index dd047b71f9..1e2f5195d7 100644 --- a/packages/paszlib/src/zipper.pp +++ b/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;