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