// ExtractCallbackSfx.h | |
#ifndef __EXTRACT_CALLBACK_SFX_H | |
#define __EXTRACT_CALLBACK_SFX_H | |
#include "resource.h" | |
#include "../../../Windows/ResourceString.h" | |
#include "../../Archive/IArchive.h" | |
#include "../../Common/FileStreams.h" | |
#include "../../ICoder.h" | |
#include "../../UI/FileManager/LangUtils.h" | |
#ifndef _NO_PROGRESS | |
#include "../../UI/FileManager/ProgressDialog.h" | |
#endif | |
#include "../../UI/Common/ArchiveOpenCallback.h" | |
class CExtractCallbackImp: | |
public IArchiveExtractCallback, | |
public IOpenCallbackUI, | |
public CMyUnknownImp | |
{ | |
public: | |
MY_UNKNOWN_IMP | |
INTERFACE_IArchiveExtractCallback(;) | |
INTERFACE_IOpenCallbackUI(;) | |
private: | |
CMyComPtr<IInArchive> _archiveHandler; | |
FString _directoryPath; | |
UString _filePath; | |
FString _diskFilePath; | |
bool _extractMode; | |
struct CProcessedFileInfo | |
{ | |
FILETIME MTime; | |
bool IsDir; | |
UInt32 Attributes; | |
} _processedFileInfo; | |
COutFileStream *_outFileStreamSpec; | |
CMyComPtr<ISequentialOutStream> _outFileStream; | |
UString _itemDefaultName; | |
FILETIME _defaultMTime; | |
UInt32 _defaultAttributes; | |
void CreateComplexDirectory(const UStringVector &dirPathParts); | |
public: | |
#ifndef _NO_PROGRESS | |
CProgressDialog ProgressDialog; | |
#endif | |
bool _isCorrupt; | |
UString _message; | |
void Init(IInArchive *archiveHandler, | |
const FString &directoryPath, | |
const UString &itemDefaultName, | |
const FILETIME &defaultMTime, | |
UInt32 defaultAttributes); | |
#ifndef _NO_PROGRESS | |
HRESULT StartProgressDialog(const UString &title, NWindows::CThread &thread) | |
{ | |
ProgressDialog.Create(title, thread, 0); | |
{ | |
ProgressDialog.SetText(LangString(IDS_PROGRESS_EXTRACTING)); | |
} | |
ProgressDialog.Show(SW_SHOWNORMAL); | |
return S_OK; | |
} | |
virtual ~CExtractCallbackImp() { ProgressDialog.Destroy(); } | |
#endif | |
}; | |
#endif |