You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
1.9 KiB
87 lines
1.9 KiB
// 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
|