mirror of
https://github.com/Xevion/easy7zip.git
synced 2025-12-06 17:15:00 -06:00
4.59 beta
This commit is contained in:
committed by
Kornel Lesiński
parent
3901bf0ab8
commit
173c07e166
@@ -22,9 +22,9 @@ extern "C"
|
||||
using namespace NWindows;
|
||||
|
||||
STDMETHODIMP CAgentFolder::GetAgentFolder(CAgentFolder **agentFolder)
|
||||
{
|
||||
*agentFolder = this;
|
||||
return S_OK;
|
||||
{
|
||||
*agentFolder = this;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
void CAgentFolder::LoadFolder(CProxyFolder *folder)
|
||||
@@ -137,13 +137,13 @@ STDMETHODIMP CAgentFolder::GetProperty(UInt32 itemIndex, PROPID propID, PROPVARI
|
||||
const CProxyFolder &item = folder->Folders[realIndex];
|
||||
if (!_flatMode && propID == kpidSize)
|
||||
prop = item.Size;
|
||||
else if (!_flatMode && propID == kpidPackedSize)
|
||||
else if (!_flatMode && propID == kpidPackSize)
|
||||
prop = item.PackSize;
|
||||
else
|
||||
switch(propID)
|
||||
{
|
||||
case kpidIsFolder: prop = true; break;
|
||||
case kpidNumSubFolders: prop = item.NumSubFolders; break;
|
||||
case kpidIsDir: prop = true; break;
|
||||
case kpidNumSubDirs: prop = item.NumSubFolders; break;
|
||||
case kpidNumSubFiles: prop = item.NumSubFiles; break;
|
||||
case kpidName: prop = item.Name; break;
|
||||
case kpidCRC:
|
||||
@@ -153,7 +153,7 @@ STDMETHODIMP CAgentFolder::GetProperty(UInt32 itemIndex, PROPID propID, PROPVARI
|
||||
RINOK(_agentSpec->GetArchive()->GetProperty(item.Index, propID, value));
|
||||
}
|
||||
if (item.CrcIsDefined && value->vt == VT_EMPTY)
|
||||
prop = item.Crc;
|
||||
prop = item.Crc;
|
||||
break;
|
||||
}
|
||||
case kpidPrefix: GetPrefixIfAny(itemIndex, prop); break;
|
||||
@@ -169,10 +169,10 @@ STDMETHODIMP CAgentFolder::GetProperty(UInt32 itemIndex, PROPID propID, PROPVARI
|
||||
const CProxyFile &item = folder->Files[realIndex];
|
||||
switch(propID)
|
||||
{
|
||||
case kpidIsFolder: prop = false; break;
|
||||
case kpidIsDir: prop = false; break;
|
||||
case kpidName: prop = item.Name; break;
|
||||
case kpidPrefix: GetPrefixIfAny(itemIndex, prop); break;
|
||||
default:
|
||||
default:
|
||||
return _agentSpec->GetArchive()->GetProperty(item.Index, propID, value);
|
||||
}
|
||||
}
|
||||
@@ -238,9 +238,9 @@ STDMETHODIMP CAgentFolder::BindToParentFolder(IFolderFolder **resultFolder)
|
||||
COM_TRY_END
|
||||
}
|
||||
|
||||
STATPROPSTG kProperties[] =
|
||||
STATPROPSTG kProperties[] =
|
||||
{
|
||||
{ NULL, kpidNumSubFolders, VT_UI4},
|
||||
{ NULL, kpidNumSubDirs, VT_UI4},
|
||||
{ NULL, kpidNumSubFiles, VT_UI4},
|
||||
{ NULL, kpidPrefix, VT_BSTR}
|
||||
};
|
||||
@@ -287,11 +287,11 @@ STDMETHODIMP CAgentFolder::GetPropertyInfo(UInt32 index, BSTR *name, PROPID *pro
|
||||
COM_TRY_END
|
||||
}
|
||||
|
||||
STATPROPSTG kFolderProps[] =
|
||||
STATPROPSTG kFolderProps[] =
|
||||
{
|
||||
{ NULL, kpidSize, VT_UI8},
|
||||
{ NULL, kpidPackedSize, VT_UI8},
|
||||
{ NULL, kpidNumSubFolders, VT_UI4},
|
||||
{ NULL, kpidPackSize, VT_UI8},
|
||||
{ NULL, kpidNumSubDirs, VT_UI4},
|
||||
{ NULL, kpidNumSubFiles, VT_UI4},
|
||||
{ NULL, kpidCRC, VT_UI4}
|
||||
};
|
||||
@@ -304,12 +304,12 @@ STDMETHODIMP CAgentFolder::GetFolderProperty(PROPID propID, PROPVARIANT *value)
|
||||
NWindows::NCOM::CPropVariant prop;
|
||||
switch(propID)
|
||||
{
|
||||
case kpidSize: prop = _proxyFolderItem->Size; break;
|
||||
case kpidPackedSize: prop = _proxyFolderItem->PackSize; break;
|
||||
case kpidNumSubFolders: prop = _proxyFolderItem->NumSubFolders; break;
|
||||
case kpidNumSubFiles: prop = _proxyFolderItem->NumSubFiles; break;
|
||||
case kpidName: prop = _proxyFolderItem->Name; break;
|
||||
case kpidPath: prop = _proxyFolderItem->GetFullPathPrefix(); break;
|
||||
case kpidSize: prop = _proxyFolderItem->Size; break;
|
||||
case kpidPackSize: prop = _proxyFolderItem->PackSize; break;
|
||||
case kpidNumSubDirs: prop = _proxyFolderItem->NumSubFolders; break;
|
||||
case kpidNumSubFiles: prop = _proxyFolderItem->NumSubFiles; break;
|
||||
case kpidName: prop = _proxyFolderItem->Name; break;
|
||||
case kpidPath: prop = _proxyFolderItem->GetFullPathPrefix(); break;
|
||||
case kpidType: prop = UString(L"7-Zip.") + _agentSpec->ArchiveType; break;
|
||||
case kpidCRC: if (_proxyFolderItem->CrcIsDefined) prop = _proxyFolderItem->Crc; break;
|
||||
}
|
||||
@@ -373,10 +373,10 @@ void CAgentFolder::GetRealIndices(const UInt32 *indices, UInt32 numItems, CUIntV
|
||||
HeapSort(&realIndices.Front(), realIndices.Size());
|
||||
}
|
||||
|
||||
STDMETHODIMP CAgentFolder::Extract(const UInt32 *indices,
|
||||
UInt32 numItems,
|
||||
NExtract::NPathMode::EEnum pathMode,
|
||||
NExtract::NOverwriteMode::EEnum overwriteMode,
|
||||
STDMETHODIMP CAgentFolder::Extract(const UInt32 *indices,
|
||||
UInt32 numItems,
|
||||
NExtract::NPathMode::EEnum pathMode,
|
||||
NExtract::NOverwriteMode::EEnum overwriteMode,
|
||||
const wchar_t *path,
|
||||
INT32 testMode,
|
||||
IFolderArchiveExtractCallback *extractCallback2)
|
||||
@@ -399,20 +399,20 @@ STDMETHODIMP CAgentFolder::Extract(const UInt32 *indices,
|
||||
|
||||
extractCallbackSpec->InitForMulti(false, pathMode, overwriteMode);
|
||||
|
||||
extractCallbackSpec->Init(_agentSpec->GetArchive(),
|
||||
extractCallback2,
|
||||
extractCallbackSpec->Init(_agentSpec->GetArchive(),
|
||||
extractCallback2,
|
||||
false,
|
||||
(path ? path : L""),
|
||||
pathParts,
|
||||
pathParts,
|
||||
_agentSpec->DefaultName,
|
||||
_agentSpec->DefaultTime,
|
||||
_agentSpec->DefaultAttributes,
|
||||
_agentSpec->DefaultTime,
|
||||
_agentSpec->DefaultAttrib,
|
||||
(UInt64)(Int64)-1
|
||||
// ,_agentSpec->_srcDirectoryPrefix
|
||||
);
|
||||
CUIntVector realIndices;
|
||||
GetRealIndices(indices, numItems, realIndices);
|
||||
return _agentSpec->GetArchive()->Extract(&realIndices.Front(),
|
||||
return _agentSpec->GetArchive()->Extract(&realIndices.Front(),
|
||||
realIndices.Size(), testMode, extractCallback);
|
||||
COM_TRY_END
|
||||
}
|
||||
@@ -433,7 +433,7 @@ CAgent::~CAgent()
|
||||
}
|
||||
|
||||
STDMETHODIMP CAgent::Open(
|
||||
const wchar_t *filePath,
|
||||
const wchar_t *filePath,
|
||||
BSTR *archiveType,
|
||||
// CLSID *clsIDResult,
|
||||
IArchiveOpenCallback *openArchiveCallback)
|
||||
@@ -443,7 +443,7 @@ STDMETHODIMP CAgent::Open(
|
||||
NFile::NFind::CFileInfoW fileInfo;
|
||||
if (!NFile::NFind::FindFile(_archiveFilePath, fileInfo))
|
||||
return ::GetLastError();
|
||||
if (fileInfo.IsDirectory())
|
||||
if (fileInfo.IsDir())
|
||||
return E_FAIL;
|
||||
CArcInfoEx archiverInfo0, archiverInfo1;
|
||||
|
||||
@@ -452,14 +452,13 @@ STDMETHODIMP CAgent::Open(
|
||||
_compressCodecsInfo = _codecs;
|
||||
RINOK(_codecs->Load());
|
||||
|
||||
HRESULT res = OpenArchive(_codecs, _archiveFilePath, _archiveLink, openArchiveCallback);
|
||||
RINOK(OpenArchive(_codecs, CIntVector(), _archiveFilePath, _archiveLink, openArchiveCallback));
|
||||
// _archive = _archiveLink.GetArchive();
|
||||
DefaultName = _archiveLink.GetDefaultItemName();
|
||||
const CArcInfoEx &ai = _codecs->Formats[_archiveLink.GetArchiverIndex()];
|
||||
|
||||
RINOK(res);
|
||||
DefaultTime = fileInfo.LastWriteTime;
|
||||
DefaultAttributes = fileInfo.Attributes;
|
||||
DefaultTime = fileInfo.MTime;
|
||||
DefaultAttrib = fileInfo.Attrib;
|
||||
ArchiveType = ai.Name;
|
||||
if (archiveType != 0)
|
||||
{
|
||||
@@ -470,7 +469,7 @@ STDMETHODIMP CAgent::Open(
|
||||
COM_TRY_END
|
||||
}
|
||||
|
||||
STDMETHODIMP CAgent::ReOpen(IArchiveOpenCallback * /* openArchiveCallback */)
|
||||
STDMETHODIMP CAgent::ReOpen(IArchiveOpenCallback *openArchiveCallback)
|
||||
{
|
||||
COM_TRY_BEGIN
|
||||
if (_proxyArchive != NULL)
|
||||
@@ -478,7 +477,7 @@ STDMETHODIMP CAgent::ReOpen(IArchiveOpenCallback * /* openArchiveCallback */)
|
||||
delete _proxyArchive;
|
||||
_proxyArchive = NULL;
|
||||
}
|
||||
RINOK(ReOpenArchive(_codecs, _archiveLink, _archiveFilePath));
|
||||
RINOK(ReOpenArchive(_codecs, _archiveLink, _archiveFilePath, openArchiveCallback));
|
||||
return ReadItems();
|
||||
COM_TRY_END
|
||||
}
|
||||
@@ -508,10 +507,10 @@ HRESULT CAgent::ReadItems()
|
||||
if (_proxyArchive != NULL)
|
||||
return S_OK;
|
||||
_proxyArchive = new CProxyArchive();
|
||||
return _proxyArchive->Load(GetArchive(),
|
||||
DefaultName,
|
||||
// _defaultTime,
|
||||
// _defaultAttributes,
|
||||
return _proxyArchive->Load(GetArchive(),
|
||||
DefaultName,
|
||||
// _defaultTime,
|
||||
// _defaultAttrib,
|
||||
NULL);
|
||||
}
|
||||
|
||||
@@ -529,8 +528,8 @@ STDMETHODIMP CAgent::BindToRootFolder(IFolderFolder **resultFolder)
|
||||
|
||||
|
||||
STDMETHODIMP CAgent::Extract(
|
||||
NExtract::NPathMode::EEnum pathMode,
|
||||
NExtract::NOverwriteMode::EEnum overwriteMode,
|
||||
NExtract::NPathMode::EEnum pathMode,
|
||||
NExtract::NOverwriteMode::EEnum overwriteMode,
|
||||
const wchar_t *path,
|
||||
INT32 testMode,
|
||||
IFolderArchiveExtractCallback *extractCallback2)
|
||||
@@ -539,14 +538,14 @@ STDMETHODIMP CAgent::Extract(
|
||||
CArchiveExtractCallback *extractCallbackSpec = new CArchiveExtractCallback;
|
||||
CMyComPtr<IArchiveExtractCallback> extractCallback = extractCallbackSpec;
|
||||
extractCallbackSpec->InitForMulti(false, pathMode, overwriteMode);
|
||||
extractCallbackSpec->Init(GetArchive(),
|
||||
extractCallback2,
|
||||
extractCallbackSpec->Init(GetArchive(),
|
||||
extractCallback2,
|
||||
false,
|
||||
path,
|
||||
UStringVector(),
|
||||
UStringVector(),
|
||||
DefaultName,
|
||||
DefaultTime,
|
||||
DefaultAttributes,
|
||||
DefaultTime,
|
||||
DefaultAttrib,
|
||||
(UInt64)(Int64)-1
|
||||
// ,_srcDirectoryPrefix
|
||||
);
|
||||
@@ -561,7 +560,7 @@ STDMETHODIMP CAgent::GetNumberOfProperties(UInt32 *numProperties)
|
||||
COM_TRY_END
|
||||
}
|
||||
|
||||
STDMETHODIMP CAgent::GetPropertyInfo(UInt32 index,
|
||||
STDMETHODIMP CAgent::GetPropertyInfo(UInt32 index,
|
||||
BSTR *name, PROPID *propID, VARTYPE *varType)
|
||||
{
|
||||
COM_TRY_BEGIN
|
||||
@@ -586,11 +585,11 @@ STDMETHODIMP CAgent::GetNumberOfArchiveProperties(UInt32 *numProperties)
|
||||
COM_TRY_END
|
||||
}
|
||||
|
||||
STDMETHODIMP CAgent::GetArchivePropertyInfo(UInt32 index,
|
||||
STDMETHODIMP CAgent::GetArchivePropertyInfo(UInt32 index,
|
||||
BSTR *name, PROPID *propID, VARTYPE *varType)
|
||||
{
|
||||
COM_TRY_BEGIN
|
||||
return GetArchive()->GetArchivePropertyInfo(index,
|
||||
return GetArchive()->GetArchivePropertyInfo(index,
|
||||
name, propID, varType);
|
||||
COM_TRY_END
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ class CAgentFolder;
|
||||
|
||||
DECL_INTERFACE(IArchiveFolderInternal, 0x01, 0xC)
|
||||
{
|
||||
STDMETHOD(GetAgentFolder)(CAgentFolder **agentFolder) PURE;
|
||||
STDMETHOD(GetAgentFolder)(CAgentFolder **agentFolder) PURE;
|
||||
};
|
||||
|
||||
struct CProxyItem
|
||||
@@ -32,7 +32,7 @@ struct CProxyItem
|
||||
|
||||
class CAgent;
|
||||
|
||||
class CAgentFolder:
|
||||
class CAgentFolder:
|
||||
public IFolderFolder,
|
||||
public IFolderProperties,
|
||||
public IGetFolderArchiveProperties,
|
||||
@@ -46,7 +46,7 @@ class CAgentFolder:
|
||||
{
|
||||
public:
|
||||
|
||||
MY_QUERYINTERFACE_BEGIN
|
||||
MY_QUERYINTERFACE_BEGIN
|
||||
MY_QUERYINTERFACE_ENTRY(IFolderFolder)
|
||||
MY_QUERYINTERFACE_ENTRY(IFolderProperties)
|
||||
MY_QUERYINTERFACE_ENTRY(IGetFolderArchiveProperties)
|
||||
@@ -69,9 +69,9 @@ public:
|
||||
STDMETHOD(GetFolderArchiveProperties)(IFolderArchiveProperties **object);
|
||||
|
||||
// IArchiveFolder
|
||||
STDMETHOD(Extract)(const UINT32 *indices, UINT32 numItems,
|
||||
NExtract::NPathMode::EEnum pathMode,
|
||||
NExtract::NOverwriteMode::EEnum overwriteMode,
|
||||
STDMETHOD(Extract)(const UINT32 *indices, UINT32 numItems,
|
||||
NExtract::NPathMode::EEnum pathMode,
|
||||
NExtract::NOverwriteMode::EEnum overwriteMode,
|
||||
const wchar_t *path,
|
||||
INT32 testMode,
|
||||
IFolderArchiveExtractCallback *extractCallback);
|
||||
@@ -103,7 +103,7 @@ public:
|
||||
bool deleteOperation,
|
||||
bool createFolderOperation,
|
||||
bool renameOperation,
|
||||
const wchar_t *newItemName,
|
||||
const wchar_t *newItemName,
|
||||
const NUpdateArchive::CActionSet *actionSet,
|
||||
const UINT32 *indices, UINT32 numItems,
|
||||
IFolderArchiveUpdateCallback *updateCallback100);
|
||||
@@ -126,7 +126,7 @@ public:
|
||||
private:
|
||||
};
|
||||
|
||||
class CAgent:
|
||||
class CAgent:
|
||||
public IInFolderArchive,
|
||||
public IFolderArchiveProperties,
|
||||
#ifndef EXTRACT_ONLY
|
||||
@@ -137,7 +137,7 @@ class CAgent:
|
||||
{
|
||||
public:
|
||||
|
||||
MY_QUERYINTERFACE_BEGIN
|
||||
MY_QUERYINTERFACE_BEGIN
|
||||
MY_QUERYINTERFACE_ENTRY(IInFolderArchive)
|
||||
MY_QUERYINTERFACE_ENTRY(IFolderArchiveProperties)
|
||||
#ifndef EXTRACT_ONLY
|
||||
@@ -154,19 +154,19 @@ public:
|
||||
INTERFACE_IOutFolderArchive(;)
|
||||
|
||||
HRESULT CommonUpdate(
|
||||
const wchar_t *newArchiveName,
|
||||
const wchar_t *newArchiveName,
|
||||
int numUpdateItems,
|
||||
IArchiveUpdateCallback *updateCallback);
|
||||
|
||||
HRESULT CreateFolder(
|
||||
const wchar_t *newArchiveName,
|
||||
const wchar_t *folderName,
|
||||
const wchar_t *newArchiveName,
|
||||
const wchar_t *folderName,
|
||||
IFolderArchiveUpdateCallback *updateCallback100);
|
||||
|
||||
HRESULT RenameItem(
|
||||
const wchar_t *newArchiveName,
|
||||
const UINT32 *indices, UINT32 numItems,
|
||||
const wchar_t *newItemName,
|
||||
const wchar_t *newArchiveName,
|
||||
const UINT32 *indices, UINT32 numItems,
|
||||
const wchar_t *newItemName,
|
||||
IFolderArchiveUpdateCallback *updateCallback100);
|
||||
|
||||
// ISetProperties
|
||||
@@ -189,7 +189,7 @@ public:
|
||||
UString DefaultName;
|
||||
|
||||
FILETIME DefaultTime;
|
||||
UINT32 DefaultAttributes;
|
||||
DWORD DefaultAttrib;
|
||||
|
||||
UString ArchiveType;
|
||||
|
||||
@@ -211,7 +211,7 @@ public:
|
||||
};
|
||||
|
||||
#ifdef NEW_FOLDER_INTERFACE
|
||||
class CArchiveFolderManager:
|
||||
class CArchiveFolderManager:
|
||||
public IFolderManager,
|
||||
public CMyUnknownImp
|
||||
{
|
||||
@@ -223,7 +223,7 @@ public:
|
||||
CArchiveFolderManager(): _codecs(0) {}
|
||||
private:
|
||||
void LoadFormats();
|
||||
int FindFormat(const UString &type);
|
||||
int FindFormat(const UString &type);
|
||||
CCodecs *_codecs;
|
||||
CMyComPtr<ICompressCodecsInfo> _compressCodecsInfo;
|
||||
};
|
||||
|
||||
@@ -2,13 +2,14 @@
|
||||
|
||||
#include "StdAfx.h"
|
||||
|
||||
#include "Common/StringConvert.h"
|
||||
#include "Common/IntToString.h"
|
||||
#include "Common/StringConvert.h"
|
||||
|
||||
#include "Windows/Defs.h"
|
||||
#include "Windows/FileDir.h"
|
||||
#include "Windows/PropVariant.h"
|
||||
#include "Windows/PropVariantConversions.h"
|
||||
#include "Windows/FileDir.h"
|
||||
#include "Windows/Time.h"
|
||||
|
||||
#include "../../Compress/Copy/CopyCoder.h"
|
||||
#include "../../Common/FileStreams.h"
|
||||
@@ -54,7 +55,7 @@ STDMETHODIMP CAgent::SetFolder(IFolderFolder *folder)
|
||||
for (;;)
|
||||
{
|
||||
CMyComPtr<IFolderFolder> newFolder;
|
||||
folderItem->BindToParentFolder(&newFolder);
|
||||
folderItem->BindToParentFolder(&newFolder);
|
||||
if (newFolder == NULL)
|
||||
break;
|
||||
|
||||
@@ -73,22 +74,22 @@ STDMETHODIMP CAgent::SetFolder(IFolderFolder *folder)
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
STDMETHODIMP CAgent::SetFiles(const wchar_t *folderPrefix,
|
||||
const wchar_t **names, UINT32 numNames)
|
||||
STDMETHODIMP CAgent::SetFiles(const wchar_t *folderPrefix,
|
||||
const wchar_t **names, UInt32 numNames)
|
||||
{
|
||||
_folderPrefix = folderPrefix;
|
||||
_names.Clear();
|
||||
_names.Reserve(numNames);
|
||||
for (UINT32 i = 0; i < numNames; i++)
|
||||
for (UInt32 i = 0; i < numNames; i++)
|
||||
_names.Add(names[i]);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
static HRESULT GetFileTime(CAgent *agent, UINT32 itemIndex, FILETIME &fileTime)
|
||||
static HRESULT GetFileTime(CAgent *agent, UInt32 itemIndex, FILETIME &fileTime)
|
||||
{
|
||||
CPropVariant property;
|
||||
RINOK(agent->GetArchive()->GetProperty(itemIndex, kpidLastWriteTime, &property));
|
||||
RINOK(agent->GetArchive()->GetProperty(itemIndex, kpidMTime, &property));
|
||||
if (property.vt == VT_FILETIME)
|
||||
fileTime = property.filetime;
|
||||
else if (property.vt == VT_EMPTY)
|
||||
@@ -99,54 +100,54 @@ static HRESULT GetFileTime(CAgent *agent, UINT32 itemIndex, FILETIME &fileTime)
|
||||
}
|
||||
|
||||
static HRESULT EnumerateArchiveItems(CAgent *agent,
|
||||
const CProxyFolder &item,
|
||||
const CProxyFolder &item,
|
||||
const UString &prefix,
|
||||
CObjectVector<CArchiveItem> &archiveItems)
|
||||
CObjectVector<CArcItem> &arcItems)
|
||||
{
|
||||
int i;
|
||||
for(i = 0; i < item.Files.Size(); i++)
|
||||
for (i = 0; i < item.Files.Size(); i++)
|
||||
{
|
||||
const CProxyFile &fileItem = item.Files[i];
|
||||
CArchiveItem archiveItem;
|
||||
CArcItem ai;
|
||||
|
||||
RINOK(::GetFileTime(agent, fileItem.Index, archiveItem.LastWriteTime));
|
||||
RINOK(::GetFileTime(agent, fileItem.Index, ai.MTime));
|
||||
|
||||
CPropVariant property;
|
||||
agent->GetArchive()->GetProperty(fileItem.Index, kpidSize, &property);
|
||||
archiveItem.SizeIsDefined = (property.vt != VT_EMPTY);
|
||||
if (archiveItem.SizeIsDefined)
|
||||
archiveItem.Size = ConvertPropVariantToUInt64(property);
|
||||
archiveItem.IsDirectory = false;
|
||||
archiveItem.Name = prefix + fileItem.Name;
|
||||
archiveItem.Censored = true; // test it
|
||||
archiveItem.IndexInServer = fileItem.Index;
|
||||
archiveItems.Add(archiveItem);
|
||||
ai.SizeDefined = (property.vt != VT_EMPTY);
|
||||
if (ai.SizeDefined)
|
||||
ai.Size = ConvertPropVariantToUInt64(property);
|
||||
ai.IsDir = false;
|
||||
ai.Name = prefix + fileItem.Name;
|
||||
ai.Censored = true; // test it
|
||||
ai.IndexInServer = fileItem.Index;
|
||||
arcItems.Add(ai);
|
||||
}
|
||||
for(i = 0; i < item.Folders.Size(); i++)
|
||||
for (i = 0; i < item.Folders.Size(); i++)
|
||||
{
|
||||
const CProxyFolder &dirItem = item.Folders[i];
|
||||
UString fullName = prefix + dirItem.Name;
|
||||
if(dirItem.IsLeaf)
|
||||
{
|
||||
CArchiveItem archiveItem;
|
||||
RINOK(::GetFileTime(agent, dirItem.Index, archiveItem.LastWriteTime));
|
||||
archiveItem.IsDirectory = true;
|
||||
archiveItem.SizeIsDefined = false;
|
||||
archiveItem.Name = fullName;
|
||||
archiveItem.Censored = true; // test it
|
||||
archiveItem.IndexInServer = dirItem.Index;
|
||||
archiveItems.Add(archiveItem);
|
||||
CArcItem ai;
|
||||
RINOK(::GetFileTime(agent, dirItem.Index, ai.MTime));
|
||||
ai.IsDir = true;
|
||||
ai.SizeDefined = false;
|
||||
ai.Name = fullName;
|
||||
ai.Censored = true; // test it
|
||||
ai.IndexInServer = dirItem.Index;
|
||||
arcItems.Add(ai);
|
||||
}
|
||||
RINOK(EnumerateArchiveItems(agent, dirItem, fullName + UString(L'\\'), archiveItems));
|
||||
RINOK(EnumerateArchiveItems(agent, dirItem, fullName + UString(L'\\'), arcItems));
|
||||
}
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
STDMETHODIMP CAgent::DoOperation(
|
||||
CCodecs *codecs,
|
||||
CCodecs *codecs,
|
||||
int formatIndex,
|
||||
const wchar_t *newArchiveName,
|
||||
const Byte *stateActions,
|
||||
const wchar_t *newArchiveName,
|
||||
const Byte *stateActions,
|
||||
const wchar_t *sfxModule,
|
||||
IFolderArchiveUpdateCallback *updateCallback100)
|
||||
{
|
||||
@@ -157,16 +158,16 @@ STDMETHODIMP CAgent::DoOperation(
|
||||
for (i = 0; i < NUpdateArchive::NPairState::kNumValues; i++)
|
||||
actionSet.StateActions[i] = (NUpdateArchive::NPairAction::EEnum)stateActions[i];
|
||||
|
||||
CObjectVector<CDirItem> dirItems;
|
||||
CDirItems dirItems;
|
||||
|
||||
UString folderPrefix = _folderPrefix;
|
||||
NFile::NName::NormalizeDirPathPrefix(folderPrefix);
|
||||
UStringVector errorPaths;
|
||||
CRecordVector<DWORD> errorCodes;
|
||||
::EnumerateDirItems(folderPrefix, _names, _archiveNamePrefix, dirItems, errorPaths, errorCodes);
|
||||
if (errorCodes.Size() > 0)
|
||||
{
|
||||
return errorCodes.Front();
|
||||
UString folderPrefix = _folderPrefix;
|
||||
NFile::NName::NormalizeDirPathPrefix(folderPrefix);
|
||||
UStringVector errorPaths;
|
||||
CRecordVector<DWORD> errorCodes;
|
||||
dirItems.EnumerateDirItems2(folderPrefix, _archiveNamePrefix, _names, errorPaths, errorCodes);
|
||||
if (errorCodes.Size() > 0)
|
||||
return errorCodes.Front();
|
||||
}
|
||||
|
||||
CMyComPtr<IOutArchive> outArchive;
|
||||
@@ -193,7 +194,7 @@ STDMETHODIMP CAgent::DoOperation(
|
||||
}
|
||||
|
||||
NFileTimeType::EEnum fileTimeType;
|
||||
UINT32 value;
|
||||
UInt32 value;
|
||||
RINOK(outArchive->GetFileTimeType(&value));
|
||||
|
||||
switch(value)
|
||||
@@ -207,19 +208,21 @@ STDMETHODIMP CAgent::DoOperation(
|
||||
return E_FAIL;
|
||||
}
|
||||
|
||||
CObjectVector<CUpdatePair> updatePairs;
|
||||
|
||||
CObjectVector<CArchiveItem> archiveItems;
|
||||
CObjectVector<CArcItem> arcItems;
|
||||
if (GetArchive())
|
||||
{
|
||||
RINOK(ReadItems());
|
||||
EnumerateArchiveItems(this, _proxyArchive->RootFolder, L"", archiveItems);
|
||||
EnumerateArchiveItems(this, _proxyArchive->RootFolder, L"", arcItems);
|
||||
}
|
||||
|
||||
GetUpdatePairInfoList(dirItems, archiveItems, fileTimeType, updatePairs);
|
||||
|
||||
CObjectVector<CUpdatePair2> updatePairs2;
|
||||
UpdateProduce(updatePairs, actionSet, updatePairs2);
|
||||
CRecordVector<CUpdatePair2> updatePairs2;
|
||||
|
||||
{
|
||||
CRecordVector<CUpdatePair> updatePairs;
|
||||
GetUpdatePairInfoList(dirItems, arcItems, fileTimeType, updatePairs);
|
||||
UpdateProduce(updatePairs, actionSet, updatePairs2);
|
||||
}
|
||||
|
||||
UInt32 numFiles = 0;
|
||||
for (i = 0; i < updatePairs2.Size(); i++)
|
||||
@@ -236,9 +239,8 @@ STDMETHODIMP CAgent::DoOperation(
|
||||
CArchiveUpdateCallback *updateCallbackSpec = new CArchiveUpdateCallback;
|
||||
CMyComPtr<IArchiveUpdateCallback> updateCallback(updateCallbackSpec );
|
||||
|
||||
updateCallbackSpec->DirPrefix = folderPrefix;
|
||||
updateCallbackSpec->DirItems = &dirItems;
|
||||
updateCallbackSpec->ArchiveItems = &archiveItems;
|
||||
updateCallbackSpec->ArcItems = &arcItems;
|
||||
updateCallbackSpec->UpdatePairs = &updatePairs2;
|
||||
updateCallbackSpec->Archive = GetArchive();
|
||||
updateCallbackSpec->Callback = &updateCallbackAgent;
|
||||
@@ -305,12 +307,12 @@ STDMETHODIMP CAgent::DoOperation(
|
||||
}
|
||||
|
||||
STDMETHODIMP CAgent::DoOperation2(
|
||||
const wchar_t *newArchiveName,
|
||||
const Byte *stateActions,
|
||||
const wchar_t *newArchiveName,
|
||||
const Byte *stateActions,
|
||||
const wchar_t *sfxModule,
|
||||
IFolderArchiveUpdateCallback *updateCallback100)
|
||||
{
|
||||
return DoOperation(_codecs, -1, newArchiveName,
|
||||
return DoOperation(_codecs, -1, newArchiveName,
|
||||
stateActions, sfxModule, updateCallback100);
|
||||
}
|
||||
|
||||
@@ -370,8 +372,8 @@ HRESULT CAgent::CommonUpdate(
|
||||
|
||||
|
||||
STDMETHODIMP CAgent::DeleteItems(
|
||||
const wchar_t *newArchiveName,
|
||||
const UINT32 *indices, UINT32 numItems,
|
||||
const wchar_t *newArchiveName,
|
||||
const UInt32 *indices, UInt32 numItems,
|
||||
IFolderArchiveUpdateCallback *updateCallback100)
|
||||
{
|
||||
if (!CanUpdate())
|
||||
@@ -383,7 +385,7 @@ STDMETHODIMP CAgent::DeleteItems(
|
||||
|
||||
CUIntVector realIndices;
|
||||
_agentFolder->GetRealIndices(indices, numItems, realIndices);
|
||||
CObjectVector<CUpdatePair2> updatePairs;
|
||||
CRecordVector<CUpdatePair2> updatePairs;
|
||||
int curIndex = 0;
|
||||
UInt32 numItemsInArchive;
|
||||
RINOK(GetArchive()->GetNumberOfItems(&numItemsInArchive));
|
||||
@@ -395,13 +397,11 @@ STDMETHODIMP CAgent::DeleteItems(
|
||||
curIndex++;
|
||||
continue;
|
||||
}
|
||||
CUpdatePair2 updatePair;
|
||||
updatePair.NewData = updatePair.NewProperties = false;
|
||||
updatePair.ExistInArchive = true;
|
||||
updatePair.ExistOnDisk = false;
|
||||
updatePair.IsAnti = false; // check it. Maybe it can be undefined
|
||||
updatePair.ArchiveItemIndex = i;
|
||||
updatePairs.Add(updatePair);
|
||||
CUpdatePair2 up2;
|
||||
up2.NewData = up2.NewProps = false;
|
||||
up2.IsAnti = false; // check it. Maybe it can be undefined
|
||||
up2.ArcIndex = i;
|
||||
updatePairs.Add(up2);
|
||||
}
|
||||
updateCallbackSpec->UpdatePairs = &updatePairs;
|
||||
updateCallbackSpec->Archive = GetArchive();
|
||||
@@ -410,8 +410,8 @@ STDMETHODIMP CAgent::DeleteItems(
|
||||
}
|
||||
|
||||
HRESULT CAgent::CreateFolder(
|
||||
const wchar_t *newArchiveName,
|
||||
const wchar_t *folderName,
|
||||
const wchar_t *newArchiveName,
|
||||
const wchar_t *folderName,
|
||||
IFolderArchiveUpdateCallback *updateCallback100)
|
||||
{
|
||||
if (!CanUpdate())
|
||||
@@ -421,44 +421,38 @@ HRESULT CAgent::CreateFolder(
|
||||
CArchiveUpdateCallback *updateCallbackSpec = new CArchiveUpdateCallback;
|
||||
CMyComPtr<IArchiveUpdateCallback> updateCallback(updateCallbackSpec);
|
||||
|
||||
CObjectVector<CUpdatePair2> updatePairs;
|
||||
UINT32 numItemsInArchive;
|
||||
CRecordVector<CUpdatePair2> updatePairs;
|
||||
UInt32 numItemsInArchive;
|
||||
RINOK(GetArchive()->GetNumberOfItems(&numItemsInArchive));
|
||||
for (UInt32 i = 0; i < numItemsInArchive; i++)
|
||||
{
|
||||
CUpdatePair2 updatePair;
|
||||
updatePair.NewData = updatePair.NewProperties = false;
|
||||
updatePair.ExistInArchive = true;
|
||||
updatePair.ExistOnDisk = false;
|
||||
updatePair.IsAnti = false; // check it.
|
||||
updatePair.ArchiveItemIndex = i;
|
||||
updatePairs.Add(updatePair);
|
||||
CUpdatePair2 up2;
|
||||
up2.NewData = up2.NewProps = false;
|
||||
up2.IsAnti = false; // check it.
|
||||
up2.ArcIndex = i;
|
||||
updatePairs.Add(up2);
|
||||
}
|
||||
CUpdatePair2 updatePair;
|
||||
updatePair.NewData = updatePair.NewProperties = true;
|
||||
updatePair.ExistInArchive = false;
|
||||
updatePair.ExistOnDisk = true;
|
||||
updatePair.IsAnti = false;
|
||||
updatePair.ArchiveItemIndex = -1;
|
||||
updatePair.DirItemIndex = 0;
|
||||
CUpdatePair2 up2;
|
||||
up2.NewData = up2.NewProps = true;
|
||||
up2.IsAnti = false;
|
||||
up2.DirIndex = 0;
|
||||
|
||||
updatePairs.Add(updatePair);
|
||||
updatePairs.Add(up2);
|
||||
|
||||
CObjectVector<CDirItem> dirItems;
|
||||
CDirItem dirItem;
|
||||
updatePairs.ReserveDown();
|
||||
|
||||
dirItem.Attributes = FILE_ATTRIBUTE_DIRECTORY;
|
||||
dirItem.Size = 0;
|
||||
dirItem.Name = _agentFolder->_proxyFolderItem->GetFullPathPrefix() + folderName;
|
||||
CDirItems dirItems;
|
||||
CDirItem di;
|
||||
|
||||
SYSTEMTIME systemTime;
|
||||
FILETIME fileTime;
|
||||
::GetSystemTime(&systemTime);
|
||||
::SystemTimeToFileTime(&systemTime, &fileTime);
|
||||
dirItem.LastAccessTime = dirItem.LastWriteTime =
|
||||
dirItem.CreationTime = fileTime;
|
||||
di.Attrib = FILE_ATTRIBUTE_DIRECTORY;
|
||||
di.Size = 0;
|
||||
di.Name = _agentFolder->_proxyFolderItem->GetFullPathPrefix() + folderName;
|
||||
|
||||
dirItems.Add(dirItem);
|
||||
FILETIME ft;
|
||||
NTime::GetCurUtcFileTime(ft);
|
||||
di.CTime = di.ATime = di.MTime = ft;
|
||||
|
||||
dirItems.Items.Add(di);
|
||||
|
||||
updateCallbackSpec->Callback = &updateCallbackAgent;
|
||||
updateCallbackSpec->DirItems = &dirItems;
|
||||
@@ -469,9 +463,9 @@ HRESULT CAgent::CreateFolder(
|
||||
|
||||
|
||||
HRESULT CAgent::RenameItem(
|
||||
const wchar_t *newArchiveName,
|
||||
const UINT32 *indices, UINT32 numItems,
|
||||
const wchar_t *newItemName,
|
||||
const wchar_t *newArchiveName,
|
||||
const UInt32 *indices, UInt32 numItems,
|
||||
const wchar_t *newItemName,
|
||||
IFolderArchiveUpdateCallback *updateCallback100)
|
||||
{
|
||||
if (!CanUpdate())
|
||||
@@ -490,25 +484,22 @@ HRESULT CAgent::RenameItem(
|
||||
UString oldItemPath = fullPrefix + _agentFolder->GetName(indices[0]);
|
||||
UString newItemPath = fullPrefix + newItemName;
|
||||
|
||||
CObjectVector<CUpdatePair2> updatePairs;
|
||||
CRecordVector<CUpdatePair2> updatePairs;
|
||||
UStringVector newNames;
|
||||
|
||||
int curIndex = 0;
|
||||
UINT32 numItemsInArchive;
|
||||
UInt32 numItemsInArchive;
|
||||
RINOK(GetArchive()->GetNumberOfItems(&numItemsInArchive));
|
||||
for (UInt32 i = 0; i < numItemsInArchive; i++)
|
||||
{
|
||||
if (curIndex < realIndices.Size())
|
||||
if (realIndices[curIndex] == i)
|
||||
{
|
||||
CUpdatePair2 updatePair;
|
||||
updatePair.NewData = false;
|
||||
updatePair.NewProperties = true;
|
||||
updatePair.ExistInArchive = true;
|
||||
updatePair.ExistOnDisk = false;
|
||||
RINOK(IsArchiveItemAnti(GetArchive(), i, updatePair.IsAnti));
|
||||
updatePair.ArchiveItemIndex = i;
|
||||
updatePair.NewNameIsDefined = true;
|
||||
|
||||
updatePair.NewName = newItemName;
|
||||
CUpdatePair2 up2;
|
||||
up2.NewData = false;
|
||||
up2.NewProps = true;
|
||||
RINOK(IsArchiveItemAnti(GetArchive(), i, up2.IsAnti));
|
||||
up2.ArcIndex = i;
|
||||
|
||||
UString oldFullPath;
|
||||
RINOK(GetArchiveItemPath(GetArchive(), i, DefaultName, oldFullPath));
|
||||
@@ -516,26 +507,25 @@ HRESULT CAgent::RenameItem(
|
||||
if (oldItemPath.CompareNoCase(oldFullPath.Left(oldItemPath.Length())) != 0)
|
||||
return E_INVALIDARG;
|
||||
|
||||
updatePair.NewName = newItemPath + oldFullPath.Mid(oldItemPath.Length());
|
||||
updatePairs.Add(updatePair);
|
||||
up2.NewNameIndex = newNames.Add(newItemPath + oldFullPath.Mid(oldItemPath.Length()));
|
||||
updatePairs.Add(up2);
|
||||
curIndex++;
|
||||
continue;
|
||||
}
|
||||
CUpdatePair2 updatePair;
|
||||
updatePair.NewData = updatePair.NewProperties = false;
|
||||
updatePair.ExistInArchive = true;
|
||||
updatePair.ExistOnDisk = false;
|
||||
updatePair.IsAnti = false;
|
||||
updatePair.ArchiveItemIndex = i;
|
||||
updatePairs.Add(updatePair);
|
||||
CUpdatePair2 up2;
|
||||
up2.NewData = up2.NewProps = false;
|
||||
up2.IsAnti = false;
|
||||
up2.ArcIndex = i;
|
||||
updatePairs.Add(up2);
|
||||
}
|
||||
updateCallbackSpec->Callback = &updateCallbackAgent;
|
||||
updateCallbackSpec->UpdatePairs = &updatePairs;
|
||||
updateCallbackSpec->NewNames = &newNames;
|
||||
updateCallbackSpec->Archive = GetArchive();
|
||||
return CommonUpdate(newArchiveName, updatePairs.Size(), updateCallback);
|
||||
}
|
||||
|
||||
STDMETHODIMP CAgent::SetProperties(const wchar_t **names,
|
||||
STDMETHODIMP CAgent::SetProperties(const wchar_t **names,
|
||||
const PROPVARIANT *values, INT32 numProperties)
|
||||
{
|
||||
m_PropNames.Clear();
|
||||
|
||||
@@ -80,7 +80,7 @@ void CProxyFolder::Clear()
|
||||
Files.Clear();
|
||||
}
|
||||
|
||||
void CProxyFolder::GetPathParts(UStringVector &pathParts) const
|
||||
void CProxyFolder::GetPathParts(UStringVector &pathParts) const
|
||||
{
|
||||
pathParts.Clear();
|
||||
UString result;
|
||||
@@ -92,7 +92,7 @@ void CProxyFolder::GetPathParts(UStringVector &pathParts) const
|
||||
}
|
||||
}
|
||||
|
||||
UString CProxyFolder::GetFullPathPrefix() const
|
||||
UString CProxyFolder::GetFullPathPrefix() const
|
||||
{
|
||||
UString result;
|
||||
const CProxyFolder *current = this;
|
||||
@@ -104,7 +104,7 @@ UString CProxyFolder::GetFullPathPrefix() const
|
||||
return result;
|
||||
}
|
||||
|
||||
UString CProxyFolder::GetItemName(UInt32 index) const
|
||||
UString CProxyFolder::GetItemName(UInt32 index) const
|
||||
{
|
||||
if (index < (UInt32)Folders.Size())
|
||||
return Folders[index].Name;
|
||||
@@ -146,8 +146,8 @@ HRESULT CProxyArchive::Reload(IInArchive *archive, IProgress *progress)
|
||||
return ReadObjects(archive, progress);
|
||||
}
|
||||
|
||||
HRESULT CProxyArchive::Load(IInArchive *archive,
|
||||
const UString &defaultName,
|
||||
HRESULT CProxyArchive::Load(IInArchive *archive,
|
||||
const UString &defaultName,
|
||||
// const FILETIME &defaultTime,
|
||||
// UInt32 defaultAttributes,
|
||||
IProgress *progress)
|
||||
@@ -179,7 +179,7 @@ void CProxyFolder::CalculateSizes(IInArchive *archive)
|
||||
{
|
||||
UInt32 index = Files[i].Index;
|
||||
Size += GetSize(archive, index, kpidSize);
|
||||
PackSize += GetSize(archive, index, kpidPackedSize);
|
||||
PackSize += GetSize(archive, index, kpidPackSize);
|
||||
{
|
||||
NCOM::CPropVariant prop;
|
||||
if (archive->GetProperty(index, kpidCRC, &prop) == S_OK)
|
||||
@@ -213,14 +213,14 @@ HRESULT CProxyArchive::ReadObjects(IInArchive *archive, IProgress *progress)
|
||||
RINOK(archive->GetNumberOfItems(&numItems));
|
||||
if (progress != NULL)
|
||||
{
|
||||
UINT64 totalItems = numItems;
|
||||
UINT64 totalItems = numItems;
|
||||
RINOK(progress->SetTotal(totalItems));
|
||||
}
|
||||
for(UInt32 i = 0; i < numItems; i++)
|
||||
{
|
||||
if (progress != NULL)
|
||||
{
|
||||
UINT64 currentItemIndex = i;
|
||||
UINT64 currentItemIndex = i;
|
||||
RINOK(progress->SetCompleted(¤tItemIndex));
|
||||
}
|
||||
NCOM::CPropVariant propVariantPath;
|
||||
|
||||
@@ -53,7 +53,7 @@ public:
|
||||
// UInt32 DefaultAttributes;
|
||||
CProxyFolder RootFolder;
|
||||
HRESULT Reload(IInArchive *archive, IProgress *progress);
|
||||
HRESULT Load(IInArchive *archive,
|
||||
HRESULT Load(IInArchive *archive,
|
||||
const UString &defaultName,
|
||||
// const FILETIME &defaultTime,
|
||||
// UInt32 defaultAttributes,
|
||||
|
||||
@@ -19,11 +19,11 @@
|
||||
using namespace NWindows;
|
||||
using namespace NCOM;
|
||||
|
||||
STDMETHODIMP CAgentFolder::CopyTo(const UINT32 *indices, UINT32 numItems,
|
||||
STDMETHODIMP CAgentFolder::CopyTo(const UINT32 *indices, UINT32 numItems,
|
||||
const wchar_t *path, IFolderOperationsExtractCallback *callback)
|
||||
{
|
||||
COM_TRY_BEGIN
|
||||
CArchiveExtractCallback *extractCallbackSpec = new
|
||||
CArchiveExtractCallback *extractCallbackSpec = new
|
||||
CArchiveExtractCallback;
|
||||
CMyComPtr<IArchiveExtractCallback> extractCallback = extractCallbackSpec;
|
||||
UStringVector pathParts;
|
||||
@@ -41,31 +41,31 @@ STDMETHODIMP CAgentFolder::CopyTo(const UINT32 *indices, UINT32 numItems,
|
||||
IID_IFolderArchiveExtractCallback, &extractCallback2));
|
||||
}
|
||||
|
||||
NExtract::NPathMode::EEnum pathMode = _flatMode ?
|
||||
NExtract::NPathMode::EEnum pathMode = _flatMode ?
|
||||
NExtract::NPathMode::kNoPathnames :
|
||||
NExtract::NPathMode::kCurrentPathnames;
|
||||
|
||||
extractCallbackSpec->InitForMulti(false, pathMode, NExtract::NOverwriteMode::kAskBefore);
|
||||
extractCallbackSpec->Init(_agentSpec->GetArchive(),
|
||||
extractCallback2,
|
||||
extractCallbackSpec->Init(_agentSpec->GetArchive(),
|
||||
extractCallback2,
|
||||
false,
|
||||
path,
|
||||
pathParts,
|
||||
pathParts,
|
||||
_agentSpec->DefaultName,
|
||||
_agentSpec->DefaultTime,
|
||||
_agentSpec->DefaultAttributes,
|
||||
_agentSpec->DefaultTime,
|
||||
_agentSpec->DefaultAttrib,
|
||||
(UInt64)(Int64)-1
|
||||
|
||||
// ,_agentSpec->_srcDirectoryPrefix
|
||||
);
|
||||
CUIntVector realIndices;
|
||||
GetRealIndices(indices, numItems, realIndices);
|
||||
return _agentSpec->GetArchive()->Extract(&realIndices.Front(),
|
||||
return _agentSpec->GetArchive()->Extract(&realIndices.Front(),
|
||||
realIndices.Size(), BoolToInt(false), extractCallback);
|
||||
COM_TRY_END
|
||||
}
|
||||
|
||||
STDMETHODIMP CAgentFolder::MoveTo(const UINT32 * /* indices */, UINT32 /* numItems */,
|
||||
STDMETHODIMP CAgentFolder::MoveTo(const UINT32 * /* indices */, UINT32 /* numItems */,
|
||||
const wchar_t * /* path */, IFolderOperationsExtractCallback * /* callback */)
|
||||
{
|
||||
return E_NOTIMPL;
|
||||
|
||||
@@ -28,7 +28,7 @@ int CArchiveFolderManager::FindFormat(const UString &type)
|
||||
return -1;
|
||||
}
|
||||
|
||||
STDMETHODIMP CArchiveFolderManager::OpenFolderFile(const wchar_t *filePath,
|
||||
STDMETHODIMP CArchiveFolderManager::OpenFolderFile(const wchar_t *filePath,
|
||||
IFolderFolder **resultFolder, IProgress *progress)
|
||||
{
|
||||
CMyComPtr<IArchiveOpenCallback> openArchiveCallback;
|
||||
@@ -122,7 +122,7 @@ STDMETHODIMP CArchiveFolderManager::GetTypes(BSTR *types)
|
||||
*types = valueTemp.Detach();
|
||||
return S_OK;
|
||||
}
|
||||
STDMETHODIMP CArchiveFolderManager::CreateFolderFile(const wchar_t * type,
|
||||
STDMETHODIMP CArchiveFolderManager::CreateFolderFile(const wchar_t * type,
|
||||
const wchar_t * filePath, IProgress progress)
|
||||
{
|
||||
return E_NOTIMPL;
|
||||
|
||||
@@ -27,7 +27,7 @@ HRESULT CAgentFolder::CommonUpdateOperation(
|
||||
bool deleteOperation,
|
||||
bool createFolderOperation,
|
||||
bool renameOperation,
|
||||
const wchar_t *newItemName,
|
||||
const wchar_t *newItemName,
|
||||
const NUpdateArchive::CActionSet *actionSet,
|
||||
const UINT32 *indices, UINT32 numItems,
|
||||
IFolderArchiveUpdateCallback *updateCallback100)
|
||||
@@ -67,8 +67,8 @@ HRESULT CAgentFolder::CommonUpdateOperation(
|
||||
{
|
||||
result = _agentSpec->RenameItem(
|
||||
tempFileName,
|
||||
indices, numItems,
|
||||
newItemName,
|
||||
indices, numItems,
|
||||
newItemName,
|
||||
updateCallback100);
|
||||
}
|
||||
else
|
||||
@@ -92,8 +92,15 @@ HRESULT CAgentFolder::CommonUpdateOperation(
|
||||
tempFile.DisableDeleting();
|
||||
if (!MyMoveFile(tempFileName, archiveFilePath ))
|
||||
return GetLastError();
|
||||
|
||||
RINOK(_agentSpec->ReOpen(NULL));
|
||||
|
||||
{
|
||||
CMyComPtr<IArchiveOpenCallback> openCallback;
|
||||
if (updateCallback100)
|
||||
{
|
||||
RINOK(updateCallback100->QueryInterface(IID_IArchiveOpenCallback, (void **)&openCallback));
|
||||
}
|
||||
RINOK(_agentSpec->ReOpen(openCallback));
|
||||
}
|
||||
|
||||
////////////////////////////
|
||||
// Restore FolderItem;
|
||||
@@ -136,7 +143,7 @@ STDMETHODIMP CAgentFolder::CopyFrom(
|
||||
RINOK(progressWrapper.QueryInterface(
|
||||
IID_IFolderArchiveUpdateCallback, &updateCallback100));
|
||||
}
|
||||
return CommonUpdateOperation(false, false, false, NULL,
|
||||
return CommonUpdateOperation(false, false, false, NULL,
|
||||
&NUpdateArchive::kAddActionSet, 0, 0, updateCallback100);
|
||||
COM_TRY_END
|
||||
}
|
||||
@@ -152,7 +159,7 @@ STDMETHODIMP CAgentFolder::Delete(const UINT32 *indices, UINT32 numItems, IProgr
|
||||
RINOK(progressWrapper.QueryInterface(
|
||||
IID_IFolderArchiveUpdateCallback, &updateCallback100));
|
||||
}
|
||||
return CommonUpdateOperation(true, false, false, NULL,
|
||||
return CommonUpdateOperation(true, false, false, NULL,
|
||||
&NUpdateArchive::kDeleteActionSet, indices, numItems, updateCallback100);
|
||||
COM_TRY_END
|
||||
}
|
||||
@@ -185,7 +192,7 @@ STDMETHODIMP CAgentFolder::Rename(UINT32 index, const wchar_t *newName, IProgres
|
||||
CMyComPtr<IProgress> progressWrapper = progress;
|
||||
RINOK(progressWrapper.QueryInterface(IID_IFolderArchiveUpdateCallback, &updateCallback100));
|
||||
}
|
||||
return CommonUpdateOperation(false, false, true, newName, NULL, &indices.Front(),
|
||||
return CommonUpdateOperation(false, false, true, newName, NULL, &indices.Front(),
|
||||
indices.Size(), updateCallback100);
|
||||
COM_TRY_END
|
||||
}
|
||||
@@ -195,7 +202,7 @@ STDMETHODIMP CAgentFolder::CreateFile(const wchar_t * /* name */, IProgress * /*
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
STDMETHODIMP CAgentFolder::SetProperty(UINT32 /* index */, PROPID /* propID */,
|
||||
STDMETHODIMP CAgentFolder::SetProperty(UINT32 /* index */, PROPID /* propID */,
|
||||
const PROPVARIANT * /* value */, IProgress * /* progress */)
|
||||
{
|
||||
return E_NOTIMPL;
|
||||
|
||||
@@ -63,9 +63,9 @@ HRESULT CUpdateCallbackAgent::OpenFileError(const wchar_t *name, DWORD systemErr
|
||||
if (Callback)
|
||||
{
|
||||
RINOK(Callback->UpdateErrorMessage(
|
||||
UString(L"WARNING: ") +
|
||||
NError::MyFormatMessageW(systemError) +
|
||||
UString(L": ") +
|
||||
UString(L"WARNING: ") +
|
||||
NError::MyFormatMessageW(systemError) +
|
||||
UString(L": ") +
|
||||
UString(name)));
|
||||
return S_FALSE;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user