1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ArchiveExtractCallback.h 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#ifndef __ARCHIVE_EXTRACT_CALLBACK_H 4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define __ARCHIVE_EXTRACT_CALLBACK_H 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "Common/MyCom.h" 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "Common/Wildcard.h" 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "../../IPassword.h" 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "../../Common/FileStreams.h" 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "../../Common/ProgressUtils.h" 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "../../Archive/IArchive.h" 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "../../Archive/Common/OutStreamWithCRC.h" 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "ExtractMode.h" 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "IFileExtractCallback.h" 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "OpenArchive.h" 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruclass CArchiveExtractCallback: 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru public IArchiveExtractCallback, 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // public IArchiveVolumeExtractCallback, 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru public ICryptoGetTextPassword, 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru public ICompressProgressInfo, 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru public CMyUnknownImp 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const CArc *_arc; 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const NWildcard::CCensorNode *_wildcardCensor; 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CMyComPtr<IFolderArchiveExtractCallback> _extractCallback2; 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CMyComPtr<ICompressProgressInfo> _compressProgress; 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CMyComPtr<ICryptoGetTextPassword> _cryptoGetTextPassword; 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UString _directoryPath; 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NExtract::NPathMode::EEnum _pathMode; 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NExtract::NOverwriteMode::EEnum _overwriteMode; 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UString _diskFilePath; 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UString _filePath; 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UInt64 _position; 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bool _isSplit; 4259d709d503bab6e2b61931737e662dd293b40578ccornelius 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bool _extractMode; 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bool WriteCTime; 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bool WriteATime; 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bool WriteMTime; 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bool _encrypted; 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru struct CProcessedFileInfo 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FILETIME CTime; 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FILETIME ATime; 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FILETIME MTime; 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UInt32 Attrib; 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bool CTimeDefined; 59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bool ATimeDefined; 60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bool MTimeDefined; 61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bool AttribDefined; 62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bool IsDir; 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } _fi; 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UInt32 _index; 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UInt64 _curSize; 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bool _curSizeDefined; 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru COutFileStream *_outFileStreamSpec; 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CMyComPtr<ISequentialOutStream> _outFileStream; 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru COutStreamWithCRC *_crcStreamSpec; 73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CMyComPtr<ISequentialOutStream> _crcStream; 74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UStringVector _removePathParts; 76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bool _stdOutMode; 78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bool _testMode; 79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bool _crcMode; 80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bool _multiArchives; 81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CMyComPtr<ICompressProgressInfo> _localProgress; 83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UInt64 _packTotal; 84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UInt64 _unpTotal; 85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void CreateComplexDirectory(const UStringVector &dirPathParts, UString &fullPath); 87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru HRESULT GetTime(int index, PROPID propID, FILETIME &filetime, bool &filetimeIsDefined); 88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru HRESULT GetUnpackSize(); 89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querupublic: 91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CLocalProgress *LocalProgressSpec; 93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UInt64 NumFolders; 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UInt64 NumFiles; 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UInt64 UnpackSize; 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UInt32 CrcSum; 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MY_UNKNOWN_IMP2(ICryptoGetTextPassword, ICompressProgressInfo) 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // COM_INTERFACE_ENTRY(IArchiveVolumeExtractCallback) 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru INTERFACE_IArchiveExtractCallback(;) 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru STDMETHOD(SetRatioInfo)(const UInt64 *inSize, const UInt64 *outSize); 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // IArchiveVolumeExtractCallback 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // STDMETHOD(GetInStream)(const wchar_t *name, ISequentialInStream **inStream); 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru STDMETHOD(CryptoGetTextPassword)(BSTR *password); 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CArchiveExtractCallback(): 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru WriteCTime(true), 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru WriteATime(true), 114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru WriteMTime(true), 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru _multiArchives(false) 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru LocalProgressSpec = new CLocalProgress(); 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru _localProgress = LocalProgressSpec; 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void InitForMulti(bool multiArchives, 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NExtract::NPathMode::EEnum pathMode, 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NExtract::NOverwriteMode::EEnum overwriteMode) 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru _multiArchives = multiArchives; 126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru _pathMode = pathMode; 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru _overwriteMode = overwriteMode; 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NumFolders = NumFiles = UnpackSize = 0; 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CrcSum = 0; 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void Init( 133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const NWildcard::CCensorNode *wildcardCensor, 134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const CArc *arc, 135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru IFolderArchiveExtractCallback *extractCallback2, 136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bool stdOutMode, bool testMode, bool crcMode, 137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UString &directoryPath, 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UStringVector &removePathParts, 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UInt64 packSize); 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru