OLD | NEW |
| (Empty) |
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 INTERFACE_IArchiveExtractCallback(;) | |
30 | |
31 STDMETHOD(SetRatioInfo)(const UInt64 *inSize, const UInt64 *outSize); | |
32 | |
33 // IArchiveVolumeExtractCallback | |
34 // STDMETHOD(GetInStream)(const wchar_t *name, ISequentialInStream **inStream)
; | |
35 | |
36 // ICryptoGetTextPassword | |
37 STDMETHOD(CryptoGetTextPassword)(BSTR *aPassword); | |
38 | |
39 private: | |
40 CMyComPtr<IInArchive> _archiveHandler; | |
41 CMyComPtr<IFolderArchiveExtractCallback> _extractCallback2; | |
42 CMyComPtr<ICompressProgressInfo> _compressProgress; | |
43 CMyComPtr<ICryptoGetTextPassword> _cryptoGetTextPassword; | |
44 UString _directoryPath; | |
45 NExtract::NPathMode::EEnum _pathMode; | |
46 NExtract::NOverwriteMode::EEnum _overwriteMode; | |
47 | |
48 UString _filePath; | |
49 UInt64 _position; | |
50 bool _isSplit; | |
51 | |
52 UString _diskFilePath; | |
53 | |
54 bool _extractMode; | |
55 | |
56 bool WriteCTime; | |
57 bool WriteATime; | |
58 bool WriteMTime; | |
59 | |
60 bool _encrypted; | |
61 | |
62 struct CProcessedFileInfo | |
63 { | |
64 FILETIME CTime; | |
65 FILETIME ATime; | |
66 FILETIME MTime; | |
67 UInt32 Attributes; | |
68 | |
69 bool CTimeDefined; | |
70 bool ATimeDefined; | |
71 bool MTimeDefined; | |
72 | |
73 bool IsDir; | |
74 bool AttributesAreDefined; | |
75 } _processedFileInfo; | |
76 | |
77 UInt64 _curSize; | |
78 COutFileStream *_outFileStreamSpec; | |
79 CMyComPtr<ISequentialOutStream> _outFileStream; | |
80 UStringVector _removePathParts; | |
81 | |
82 UString _itemDefaultName; | |
83 FILETIME _utcMTimeDefault; | |
84 UInt32 _attributesDefault; | |
85 bool _stdOutMode; | |
86 | |
87 void CreateComplexDirectory(const UStringVector &dirPathParts, UString &fullPa
th); | |
88 HRESULT GetTime(int index, PROPID propID, FILETIME &filetime, bool &filetimeIs
Defined); | |
89 public: | |
90 CArchiveExtractCallback(): | |
91 WriteCTime(true), | |
92 WriteATime(true), | |
93 WriteMTime(true), | |
94 _multiArchives(false) | |
95 { | |
96 LocalProgressSpec = new CLocalProgress(); | |
97 _localProgress = LocalProgressSpec; | |
98 } | |
99 | |
100 CLocalProgress *LocalProgressSpec; | |
101 CMyComPtr<ICompressProgressInfo> _localProgress; | |
102 UInt64 _packTotal; | |
103 UInt64 _unpTotal; | |
104 | |
105 bool _multiArchives; | |
106 UInt64 NumFolders; | |
107 UInt64 NumFiles; | |
108 UInt64 UnpackSize; | |
109 | |
110 void InitForMulti(bool multiArchives, | |
111 NExtract::NPathMode::EEnum pathMode, | |
112 NExtract::NOverwriteMode::EEnum overwriteMode) | |
113 { | |
114 _multiArchives = multiArchives; NumFolders = NumFiles = UnpackSize = 0; | |
115 _pathMode = pathMode; | |
116 _overwriteMode = overwriteMode; | |
117 } | |
118 | |
119 void Init( | |
120 IInArchive *archiveHandler, | |
121 IFolderArchiveExtractCallback *extractCallback2, | |
122 bool stdOutMode, | |
123 const UString &directoryPath, | |
124 const UStringVector &removePathParts, | |
125 const UString &itemDefaultName, | |
126 const FILETIME &utcMTimeDefault, | |
127 UInt32 attributesDefault, | |
128 UInt64 packSize); | |
129 | |
130 UInt64 _numErrors; | |
131 }; | |
132 | |
133 #endif | |
OLD | NEW |