|
1 // ArchiveExtractCallback.h |
|
2 |
|
3 #ifndef __ARCHIVEEXTRACTCALLBACK_H |
|
4 #define __ARCHIVEEXTRACTCALLBACK_H |
|
5 |
|
6 #include "../../Archive/IArchive.h" |
|
7 #include "IFileExtractCallback.h" |
|
8 |
|
9 #include "Common/MyString.h" |
|
10 #include "Common/MyCom.h" |
|
11 |
|
12 #include "../../Common/FileStreams.h" |
|
13 #include "../../Common/ProgressUtils.h" |
|
14 #include "../../IPassword.h" |
|
15 |
|
16 #include "ExtractMode.h" |
|
17 |
|
18 class CArchiveExtractCallback: |
|
19 public IArchiveExtractCallback, |
|
20 // public IArchiveVolumeExtractCallback, |
|
21 public ICryptoGetTextPassword, |
|
22 public ICompressProgressInfo, |
|
23 public CMyUnknownImp |
|
24 { |
|
25 public: |
|
26 MY_UNKNOWN_IMP2(ICryptoGetTextPassword, ICompressProgressInfo) |
|
27 // COM_INTERFACE_ENTRY(IArchiveVolumeExtractCallback) |
|
28 |
|
29 // IProgress |
|
30 STDMETHOD(SetTotal)(UInt64 size); |
|
31 STDMETHOD(SetCompleted)(const UInt64 *completeValue); |
|
32 STDMETHOD(SetRatioInfo)(const UInt64 *inSize, const UInt64 *outSize); |
|
33 |
|
34 // IExtractCallBack |
|
35 STDMETHOD(GetStream)(UInt32 index, ISequentialOutStream **outStream, Int32 askExtractMode); |
|
36 STDMETHOD(PrepareOperation)(Int32 askExtractMode); |
|
37 STDMETHOD(SetOperationResult)(Int32 resultEOperationResult); |
|
38 |
|
39 // IArchiveVolumeExtractCallback |
|
40 // STDMETHOD(GetInStream)(const wchar_t *name, ISequentialInStream **inStream); |
|
41 |
|
42 // ICryptoGetTextPassword |
|
43 STDMETHOD(CryptoGetTextPassword)(BSTR *aPassword); |
|
44 |
|
45 private: |
|
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; |
|
53 |
|
54 UString _filePath; |
|
55 UInt64 _position; |
|
56 bool _isSplit; |
|
57 |
|
58 UString _diskFilePath; |
|
59 |
|
60 bool _extractMode; |
|
61 |
|
62 bool WriteModified; |
|
63 bool WriteCreated; |
|
64 bool WriteAccessed; |
|
65 |
|
66 bool _encrypted; |
|
67 |
|
68 struct CProcessedFileInfo |
|
69 { |
|
70 FILETIME CreationTime; |
|
71 FILETIME LastWriteTime; |
|
72 FILETIME LastAccessTime; |
|
73 UInt32 Attributes; |
|
74 |
|
75 bool IsCreationTimeDefined; |
|
76 bool IsLastWriteTimeDefined; |
|
77 bool IsLastAccessTimeDefined; |
|
78 |
|
79 bool IsDirectory; |
|
80 bool AttributesAreDefined; |
|
81 } _processedFileInfo; |
|
82 |
|
83 UInt64 _curSize; |
|
84 COutFileStream *_outFileStreamSpec; |
|
85 CMyComPtr<ISequentialOutStream> _outFileStream; |
|
86 UStringVector _removePathParts; |
|
87 |
|
88 UString _itemDefaultName; |
|
89 FILETIME _utcLastWriteTimeDefault; |
|
90 UInt32 _attributesDefault; |
|
91 bool _stdOutMode; |
|
92 |
|
93 void CreateComplexDirectory(const UStringVector &dirPathParts, UString &fullPath); |
|
94 HRESULT GetTime(int index, PROPID propID, FILETIME &filetime, bool &filetimeIsDefined); |
|
95 public: |
|
96 CArchiveExtractCallback(): |
|
97 WriteModified(true), |
|
98 WriteCreated(false), |
|
99 WriteAccessed(false), |
|
100 _multiArchives(false) |
|
101 { |
|
102 LocalProgressSpec = new CLocalProgress(); |
|
103 _localProgress = LocalProgressSpec; |
|
104 } |
|
105 |
|
106 CLocalProgress *LocalProgressSpec; |
|
107 CMyComPtr<ICompressProgressInfo> _localProgress; |
|
108 UInt64 _packTotal; |
|
109 UInt64 _unpTotal; |
|
110 |
|
111 bool _multiArchives; |
|
112 UInt64 NumFolders; |
|
113 UInt64 NumFiles; |
|
114 UInt64 UnpackSize; |
|
115 |
|
116 void InitForMulti(bool multiArchives, |
|
117 NExtract::NPathMode::EEnum pathMode, |
|
118 NExtract::NOverwriteMode::EEnum overwriteMode) |
|
119 { |
|
120 _multiArchives = multiArchives; NumFolders = NumFiles = UnpackSize = 0; |
|
121 _pathMode = pathMode; |
|
122 _overwriteMode = overwriteMode; |
|
123 } |
|
124 |
|
125 void Init( |
|
126 IInArchive *archiveHandler, |
|
127 IFolderArchiveExtractCallback *extractCallback2, |
|
128 bool stdOutMode, |
|
129 const UString &directoryPath, |
|
130 const UStringVector &removePathParts, |
|
131 const UString &itemDefaultName, |
|
132 const FILETIME &utcLastWriteTimeDefault, |
|
133 UInt32 attributesDefault, |
|
134 UInt64 packSize); |
|
135 |
|
136 UInt64 _numErrors; |
|
137 }; |
|
138 |
|
139 #endif |