Source code
Revision control
Copy as Markdown
Other Tools
// ArchiveOpenCallback.h↩
↩
#ifndef __ARCHIVE_OPEN_CALLBACK_H↩
#define __ARCHIVE_OPEN_CALLBACK_H↩
↩
#include "../../../Common/MyCom.h"↩
↩
#include "../../../Windows/FileFind.h"↩
↩
#ifndef _NO_CRYPTO↩
#include "../../IPassword.h"↩
#endif↩
#include "../../Archive/IArchive.h"↩
↩
#ifdef _NO_CRYPTO↩
↩
#define INTERFACE_IOpenCallbackUI_Crypto(x)↩
↩
#else↩
↩
#define INTERFACE_IOpenCallbackUI_Crypto(x) \↩
virtual HRESULT Open_CryptoGetTextPassword(BSTR *password) x; \↩
/* virtual HRESULT Open_GetPasswordIfAny(bool &passwordIsDefined, UString &password) x; */ \↩
/* virtual bool Open_WasPasswordAsked() x; */ \↩
/* virtual void Open_Clear_PasswordWasAsked_Flag() x; */ \↩
↩
#endif↩
↩
#define INTERFACE_IOpenCallbackUI(x) \↩
virtual HRESULT Open_CheckBreak() x; \↩
virtual HRESULT Open_SetTotal(const UInt64 *files, const UInt64 *bytes) x; \↩
virtual HRESULT Open_SetCompleted(const UInt64 *files, const UInt64 *bytes) x; \↩
virtual HRESULT Open_Finished() x; \↩
INTERFACE_IOpenCallbackUI_Crypto(x)↩
↩
struct IOpenCallbackUI↩
{↩
INTERFACE_IOpenCallbackUI(=0)↩
};↩
↩
class COpenCallbackImp:↩
public IArchiveOpenCallback,↩
public IArchiveOpenVolumeCallback,↩
public IArchiveOpenSetSubArchiveName,↩
#ifndef _NO_CRYPTO↩
public ICryptoGetTextPassword,↩
#endif↩
public CMyUnknownImp↩
{↩
public:↩
MY_QUERYINTERFACE_BEGIN2(IArchiveOpenVolumeCallback)↩
MY_QUERYINTERFACE_ENTRY(IArchiveOpenSetSubArchiveName)↩
#ifndef _NO_CRYPTO↩
MY_QUERYINTERFACE_ENTRY(ICryptoGetTextPassword)↩
#endif↩
MY_QUERYINTERFACE_END↩
MY_ADDREF_RELEASE↩
↩
INTERFACE_IArchiveOpenCallback(;)↩
INTERFACE_IArchiveOpenVolumeCallback(;)↩
↩
#ifndef _NO_CRYPTO↩
STDMETHOD(CryptoGetTextPassword)(BSTR *password);↩
#endif↩
↩
STDMETHOD(SetSubArchiveName(const wchar_t *name))↩
{↩
_subArchiveMode = true;↩
_subArchiveName = name;↩
// TotalSize = 0;↩
return S_OK;↩
}↩
↩
private:↩
FString _folderPrefix;↩
NWindows::NFile::NFind::CFileInfo _fileInfo;↩
bool _subArchiveMode;↩
UString _subArchiveName;↩
↩
public:↩
UStringVector FileNames;↩
CBoolVector FileNames_WasUsed;↩
CRecordVector<UInt64> FileSizes;↩
↩
bool PasswordWasAsked;↩
↩
IOpenCallbackUI *Callback;↩
CMyComPtr<IArchiveOpenCallback> ReOpenCallback;↩
// UInt64 TotalSize;↩
↩
COpenCallbackImp(): Callback(NULL), _subArchiveMode(false) {}↩
↩
void Init(const FString &folderPrefix, const FString &fileName)↩
{↩
_folderPrefix = folderPrefix;↩
if (!_fileInfo.Find(_folderPrefix + fileName))↩
throw 20121118;↩
FileNames.Clear();↩
FileNames_WasUsed.Clear();↩
FileSizes.Clear();↩
_subArchiveMode = false;↩
// TotalSize = 0;↩
PasswordWasAsked = false;↩
}↩
↩
bool SetSecondFileInfo(CFSTR newName)↩
{↩
return _fileInfo.Find(newName) && !_fileInfo.IsDir();↩
}↩
};↩
↩
#endif↩