1 // ArchiveExtractCallback.h
\r
3 #ifndef __ARCHIVE_EXTRACT_CALLBACK_H
\r
4 #define __ARCHIVE_EXTRACT_CALLBACK_H
\r
6 #include "Common/MyCom.h"
\r
7 #include "Common/Wildcard.h"
\r
9 #include "../../IPassword.h"
\r
11 #include "../../Common/FileStreams.h"
\r
12 #include "../../Common/ProgressUtils.h"
\r
14 #include "../../Archive/IArchive.h"
\r
16 #include "../../Archive/Common/OutStreamWithCRC.h"
\r
18 #include "ExtractMode.h"
\r
19 #include "IFileExtractCallback.h"
\r
20 #include "OpenArchive.h"
\r
22 class CArchiveExtractCallback:
\r
23 public IArchiveExtractCallback,
\r
24 // public IArchiveVolumeExtractCallback,
\r
25 public ICryptoGetTextPassword,
\r
26 public ICompressProgressInfo,
\r
27 public CMyUnknownImp
\r
30 const NWildcard::CCensorNode *_wildcardCensor;
\r
31 CMyComPtr<IFolderArchiveExtractCallback> _extractCallback2;
\r
32 CMyComPtr<ICompressProgressInfo> _compressProgress;
\r
33 CMyComPtr<ICryptoGetTextPassword> _cryptoGetTextPassword;
\r
34 UString _directoryPath;
\r
35 NExtract::NPathMode::EEnum _pathMode;
\r
36 NExtract::NOverwriteMode::EEnum _overwriteMode;
\r
38 UString _diskFilePath;
\r
51 struct CProcessedFileInfo
\r
68 bool _curSizeDefined;
\r
69 COutFileStream *_outFileStreamSpec;
\r
70 CMyComPtr<ISequentialOutStream> _outFileStream;
\r
72 COutStreamWithCRC *_crcStreamSpec;
\r
73 CMyComPtr<ISequentialOutStream> _crcStream;
\r
75 UStringVector _removePathParts;
\r
80 bool _multiArchives;
\r
82 CMyComPtr<ICompressProgressInfo> _localProgress;
\r
86 void CreateComplexDirectory(const UStringVector &dirPathParts, UString &fullPath);
\r
87 HRESULT GetTime(int index, PROPID propID, FILETIME &filetime, bool &filetimeIsDefined);
\r
88 HRESULT GetUnpackSize();
\r
92 CLocalProgress *LocalProgressSpec;
\r
99 MY_UNKNOWN_IMP2(ICryptoGetTextPassword, ICompressProgressInfo)
\r
100 // COM_INTERFACE_ENTRY(IArchiveVolumeExtractCallback)
\r
102 INTERFACE_IArchiveExtractCallback(;)
\r
104 STDMETHOD(SetRatioInfo)(const UInt64 *inSize, const UInt64 *outSize);
\r
106 // IArchiveVolumeExtractCallback
\r
107 // STDMETHOD(GetInStream)(const wchar_t *name, ISequentialInStream **inStream);
\r
109 STDMETHOD(CryptoGetTextPassword)(BSTR *password);
\r
111 CArchiveExtractCallback():
\r
115 _multiArchives(false)
\r
117 LocalProgressSpec = new CLocalProgress();
\r
118 _localProgress = LocalProgressSpec;
\r
121 void InitForMulti(bool multiArchives,
\r
122 NExtract::NPathMode::EEnum pathMode,
\r
123 NExtract::NOverwriteMode::EEnum overwriteMode)
\r
125 _multiArchives = multiArchives;
\r
126 _pathMode = pathMode;
\r
127 _overwriteMode = overwriteMode;
\r
128 NumFolders = NumFiles = UnpackSize = 0;
\r
133 const NWildcard::CCensorNode *wildcardCensor,
\r
135 IFolderArchiveExtractCallback *extractCallback2,
\r
136 bool stdOutMode, bool testMode, bool crcMode,
\r
137 const UString &directoryPath,
\r
138 const UStringVector &removePathParts,
\r