4.54 beta

This commit is contained in:
Igor Pavlov
2007-09-04 00:00:00 +00:00
committed by Kornel Lesiński
parent 051769bbc5
commit b82f80647d
56 changed files with 558 additions and 202 deletions

View File

@@ -262,13 +262,11 @@ static bool AddNameToCensor(NWildcard::CCensor &wildcardCensor,
return true;
}
static inline UINT GetCurrentCodePage() { return AreFileApisANSI() ? CP_ACP : CP_OEMCP; }
static void AddToCensorFromListFile(NWildcard::CCensor &wildcardCensor,
LPCWSTR fileName, bool include, NRecursedType::EEnum type, UINT codePage)
{
UStringVector names;
if (!ReadNamesFromListFile(GetSystemString(fileName, GetCurrentCodePage()), names, codePage))
if (!ReadNamesFromListFile(fileName, names, codePage))
throw kIncorrectListFile;
for (int i = 0; i < names.Size(); i++)
if (!AddNameToCensor(wildcardCensor, names[i], include, type))

View File

@@ -48,11 +48,7 @@ void CArchiveExtractCallback::Init(
_extractCallback2 = extractCallback2;
_compressProgress.Release();
_extractCallback2.QueryInterface(IID_ICompressProgressInfo, &_compressProgress);
if (!_localProgress)
{
LocalProgressSpec = new CLocalProgress();
_localProgress = LocalProgressSpec;
}
LocalProgressSpec->Init(extractCallback2, true);
_itemDefaultName = itemDefaultName;

View File

@@ -98,7 +98,11 @@ public:
WriteCreated(false),
WriteAccessed(false),
_multiArchives(false)
{}
{
LocalProgressSpec = new CLocalProgress();
_localProgress = LocalProgressSpec;
}
CLocalProgress *LocalProgressSpec;
CMyComPtr<ICompressProgressInfo> _localProgress;
bool _ratioMode;

View File

@@ -119,6 +119,7 @@ STDMETHODIMP COpenCallbackImp::GetStream(const wchar_t *name, IInStream **inStre
inFile->OpenCallbackImp = this;
inFile->OpenCallbackRef = this;
FileNames.Add(name);
TotalSize += _fileInfo.Size;
return S_OK;
COM_TRY_END
}

View File

@@ -75,6 +75,7 @@ private:
public:
UStringVector FileNames;
IOpenCallbackUI *Callback;
UInt64 TotalSize;
COpenCallbackImp(): Callback(NULL) {}
void Init(const UString &folderPrefix, const UString &fileName)
@@ -84,6 +85,7 @@ public:
throw 1;
FileNames.Clear();
_subArchiveMode = false;
TotalSize = 0;
}
int FindName(const UString &name);
};

View File

@@ -163,7 +163,8 @@ HRESULT DecompressArchives(
archiveFileInfo.Size,
archiveLink.GetDefaultItemName(),
wildcardCensor, options, extractCallback, extractCallbackSpec, errorMessage));
extractCallbackSpec->LocalProgressSpec->InSize += archiveFileInfo.Size;
extractCallbackSpec->LocalProgressSpec->InSize += archiveFileInfo.Size +
archiveLink.VolumesSize;
extractCallbackSpec->LocalProgressSpec->OutSize = extractCallbackSpec->UnpackSize;
if (!errorMessage.IsEmpty())
return E_FAIL;

View File

@@ -366,8 +366,10 @@ HRESULT MyOpenArchive(
UString &defaultItemName0,
UString &defaultItemName1,
UStringVector &volumePaths,
UInt64 &volumesSize,
IOpenCallbackUI *openCallbackUI)
{
volumesSize = 0;
COpenCallbackImp *openCallbackSpec = new COpenCallbackImp;
CMyComPtr<IArchiveOpenCallback> openCallback = openCallbackSpec;
openCallbackSpec->Callback = openCallbackUI;
@@ -391,6 +393,7 @@ HRESULT MyOpenArchive(
volumePaths.Add(prefix + name);
for (int i = 0; i < openCallbackSpec->FileNames.Size(); i++)
volumePaths.Add(prefix + openCallbackSpec->FileNames[i]);
volumesSize = openCallbackSpec->TotalSize;
return S_OK;
}
@@ -435,6 +438,7 @@ HRESULT MyOpenArchive(CCodecs *codecs,
&archiveLink.Archive0, &archiveLink.Archive1,
archiveLink.DefaultItemName0, archiveLink.DefaultItemName1,
archiveLink.VolumePaths,
archiveLink.VolumesSize,
openCallbackUI);
archiveLink.IsOpen = (res == S_OK);
return res;

View File

@@ -69,6 +69,7 @@ HRESULT MyOpenArchive(
UString &defaultItemName0,
UString &defaultItemName1,
UStringVector &volumePaths,
UInt64 &volumesSize,
IOpenCallbackUI *openCallbackUI);
struct CArchiveLink
@@ -83,6 +84,8 @@ struct CArchiveLink
UStringVector VolumePaths;
UInt64 VolumesSize;
int GetNumLevels() const
{
int result = 0;
@@ -97,7 +100,7 @@ struct CArchiveLink
bool IsOpen;
CArchiveLink(): IsOpen(false) {};
CArchiveLink(): IsOpen(false), VolumesSize(0) {};
IInArchive *GetArchive() { return Archive1 != 0 ? Archive1: Archive0; }
UString GetDefaultItemName() { return Archive1 != 0 ? DefaultItemName1: DefaultItemName0; }