diff options
Diffstat (limited to 'CPP/7zip/UI/Common/Extract.cpp')
-rwxr-xr-x | CPP/7zip/UI/Common/Extract.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/CPP/7zip/UI/Common/Extract.cpp b/CPP/7zip/UI/Common/Extract.cpp index faf0f727..0e56a08a 100755 --- a/CPP/7zip/UI/Common/Extract.cpp +++ b/CPP/7zip/UI/Common/Extract.cpp @@ -91,6 +91,7 @@ HRESULT DecompressArchives( CExtractOptions options = optionsSpec; int i; UInt64 totalPackSize = 0; + CRecordVector<UInt64> archiveSizes; for (i = 0; i < archivePaths.Size(); i++) { const UString &archivePath = archivePaths[i]; @@ -99,6 +100,7 @@ HRESULT DecompressArchives( throw "there is no such archive"; if (archiveFileInfo.IsDirectory()) throw "can't decompress folder"; + archiveSizes.Add(archiveFileInfo.Size); totalPackSize += archiveFileInfo.Size; } CArchiveExtractCallback *extractCallbackSpec = new CArchiveExtractCallback; @@ -145,8 +147,15 @@ HRESULT DecompressArchives( { archivePaths.Delete(index); archivePathsFull.Delete(index); + totalPackSize -= archiveSizes[index]; + archiveSizes.Delete(index); } } + if (archiveLink.VolumePaths.Size() != 0) + { + totalPackSize += archiveLink.VolumesSize; + RINOK(extractCallback->SetTotal(totalPackSize)); + } #ifndef _NO_CRYPTO UString password; @@ -160,7 +169,7 @@ HRESULT DecompressArchives( options.DefaultItemName = archiveLink.GetDefaultItemName(); RINOK(DecompressArchive( archiveLink.GetArchive(), - archiveFileInfo.Size, + archiveFileInfo.Size + archiveLink.VolumesSize, archiveLink.GetDefaultItemName(), wildcardCensor, options, extractCallback, extractCallbackSpec, errorMessage)); extractCallbackSpec->LocalProgressSpec->InSize += archiveFileInfo.Size + |