1 // ArchiveExtractCallback.h
3 #ifndef __ARCHIVEEXTRACTCALLBACK_H
4 #define __ARCHIVEEXTRACTCALLBACK_H
6 #include "../../Archive/IArchive.h"
7 #include "IFileExtractCallback.h"
9 #include "Common/MyString.h"
10 #include "Common/MyCom.h"
12 #include "../../Common/FileStreams.h"
13 #include "../../Common/ProgressUtils.h"
14 #include "../../IPassword.h"
16 #include "ExtractMode.h"
18 class CArchiveExtractCallback:
19 public IArchiveExtractCallback,
20 // public IArchiveVolumeExtractCallback,
21 public ICryptoGetTextPassword,
22 public ICompressProgressInfo,
26 MY_UNKNOWN_IMP2(ICryptoGetTextPassword, ICompressProgressInfo)
27 // COM_INTERFACE_ENTRY(IArchiveVolumeExtractCallback)
30 STDMETHOD(SetTotal)(UInt64 size);
31 STDMETHOD(SetCompleted)(const UInt64 *completeValue);
32 STDMETHOD(SetRatioInfo)(const UInt64 *inSize, const UInt64 *outSize);
35 STDMETHOD(GetStream)(UInt32 index, ISequentialOutStream **outStream, Int32 askExtractMode);
36 STDMETHOD(PrepareOperation)(Int32 askExtractMode);
37 STDMETHOD(SetOperationResult)(Int32 resultEOperationResult);
39 // IArchiveVolumeExtractCallback
40 // STDMETHOD(GetInStream)(const wchar_t *name, ISequentialInStream **inStream);
42 // ICryptoGetTextPassword
43 STDMETHOD(CryptoGetTextPassword)(BSTR *aPassword);
46 CMyComPtr<IInArchive> _archiveHandler;
47 CMyComPtr<IFolderArchiveExtractCallback> _extractCallback2;
48 CMyComPtr<ICompressProgressInfo> _compressProgress;
49 CMyComPtr<ICryptoGetTextPassword> _cryptoGetTextPassword;
50 UString _directoryPath;
51 NExtract::NPathMode::EEnum _pathMode;
52 NExtract::NOverwriteMode::EEnum _overwriteMode;
58 UString _diskFilePath;
68 struct CProcessedFileInfo
70 FILETIME CreationTime;
71 FILETIME LastWriteTime;
72 FILETIME LastAccessTime;
75 bool IsCreationTimeDefined;
76 bool IsLastWriteTimeDefined;
77 bool IsLastAccessTimeDefined;
80 bool AttributesAreDefined;
84 COutFileStream *_outFileStreamSpec;
85 CMyComPtr<ISequentialOutStream> _outFileStream;
86 UStringVector _removePathParts;
88 UString _itemDefaultName;
89 FILETIME _utcLastWriteTimeDefault;
90 UInt32 _attributesDefault;
93 void CreateComplexDirectory(const UStringVector &dirPathParts, UString &fullPath);
94 HRESULT GetTime(int index, PROPID propID, FILETIME &filetime, bool &filetimeIsDefined);
96 CArchiveExtractCallback():
100 _multiArchives(false)
102 LocalProgressSpec = new CLocalProgress();
103 _localProgress = LocalProgressSpec;
106 CLocalProgress *LocalProgressSpec;
107 CMyComPtr<ICompressProgressInfo> _localProgress;
116 void InitForMulti(bool multiArchives,
117 NExtract::NPathMode::EEnum pathMode,
118 NExtract::NOverwriteMode::EEnum overwriteMode)
120 _multiArchives = multiArchives; NumFolders = NumFiles = UnpackSize = 0;
121 _pathMode = pathMode;
122 _overwriteMode = overwriteMode;
126 IInArchive *archiveHandler,
127 IFolderArchiveExtractCallback *extractCallback2,
129 const UString &directoryPath,
130 const UStringVector &removePathParts,
131 const UString &itemDefaultName,
132 const FILETIME &utcLastWriteTimeDefault,
133 UInt32 attributesDefault,