mirror of
https://github.com/Xevion/easy7zip.git
synced 2025-12-07 01:15:00 -06:00
4.54 beta
This commit is contained in:
committed by
Kornel Lesiński
parent
051769bbc5
commit
b82f80647d
@@ -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))
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -98,7 +98,11 @@ public:
|
||||
WriteCreated(false),
|
||||
WriteAccessed(false),
|
||||
_multiArchives(false)
|
||||
{}
|
||||
{
|
||||
LocalProgressSpec = new CLocalProgress();
|
||||
_localProgress = LocalProgressSpec;
|
||||
}
|
||||
|
||||
CLocalProgress *LocalProgressSpec;
|
||||
CMyComPtr<ICompressProgressInfo> _localProgress;
|
||||
bool _ratioMode;
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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; }
|
||||
|
||||
Reference in New Issue
Block a user