Imported Upstream version 9.20
[platform/upstream/7zip.git] / CPP / 7zip / UI / FileManager / ExtractCallback.h
1 // ExtractCallback.h\r
2 \r
3 #ifndef __EXTRACT_CALLBACK_H\r
4 #define __EXTRACT_CALLBACK_H\r
5 \r
6 #include "Common/MyCom.h"\r
7 \r
8 #include "Windows/ResourceString.h"\r
9 \r
10 #include "../Agent/IFolderArchive.h"\r
11 #include "../Common/ArchiveOpenCallback.h"\r
12 \r
13 #ifndef _NO_CRYPTO\r
14 #include "../../IPassword.h"\r
15 #endif\r
16 \r
17 #include "IFolder.h"\r
18 \r
19 #include "ProgressDialog2.h"\r
20 \r
21 #ifdef LANG\r
22 #include "LangUtils.h"\r
23 #endif\r
24 \r
25 class CExtractCallbackImp:\r
26   public IExtractCallbackUI,\r
27   public IOpenCallbackUI,\r
28   public IFolderOperationsExtractCallback,\r
29   // public IFolderArchiveExtractCallback, // mkultiple from IProgress\r
30   #ifndef _SFX\r
31   public ICompressProgressInfo,\r
32   #endif\r
33   #ifndef _NO_CRYPTO\r
34   public ICryptoGetTextPassword,\r
35   #endif\r
36   public CMyUnknownImp\r
37 {\r
38 public:\r
39   MY_QUERYINTERFACE_BEGIN2(IFolderOperationsExtractCallback)\r
40   MY_QUERYINTERFACE_ENTRY(IFolderArchiveExtractCallback)\r
41   #ifndef _SFX\r
42   MY_QUERYINTERFACE_ENTRY(ICompressProgressInfo)\r
43   #endif\r
44   #ifndef _NO_CRYPTO\r
45   MY_QUERYINTERFACE_ENTRY(ICryptoGetTextPassword)\r
46   #endif\r
47   MY_QUERYINTERFACE_END\r
48   MY_ADDREF_RELEASE\r
49 \r
50   #ifndef _SFX\r
51   STDMETHOD(SetRatioInfo)(const UInt64 *inSize, const UInt64 *outSize);\r
52   #endif\r
53 \r
54   INTERFACE_IProgress(;)\r
55   INTERFACE_IOpenCallbackUI(;)\r
56 \r
57   // IFolderArchiveExtractCallback\r
58   // STDMETHOD(SetTotalFiles)(UInt64 total);\r
59   // STDMETHOD(SetCompletedFiles)(const UInt64 *value);\r
60   STDMETHOD(AskOverwrite)(\r
61       const wchar_t *existName, const FILETIME *existTime, const UInt64 *existSize,\r
62       const wchar_t *newName, const FILETIME *newTime, const UInt64 *newSize,\r
63       Int32 *answer);\r
64   STDMETHOD (PrepareOperation)(const wchar_t *name, bool isFolder, Int32 askExtractMode, const UInt64 *position);\r
65 \r
66   STDMETHOD(MessageError)(const wchar_t *message);\r
67   STDMETHOD(SetOperationResult)(Int32 operationResult, bool encrypted);\r
68 \r
69   // IExtractCallbackUI\r
70   \r
71   HRESULT BeforeOpen(const wchar_t *name);\r
72   HRESULT OpenResult(const wchar_t *name, HRESULT result, bool encrypted);\r
73   HRESULT ThereAreNoFiles();\r
74   HRESULT ExtractResult(HRESULT result);\r
75 \r
76   #ifndef _NO_CRYPTO\r
77   HRESULT SetPassword(const UString &password);\r
78   #endif\r
79 \r
80   // IFolderOperationsExtractCallback\r
81   STDMETHOD(AskWrite)(\r
82       const wchar_t *srcPath,\r
83       Int32 srcIsFolder,\r
84       const FILETIME *srcTime,\r
85       const UInt64 *srcSize,\r
86       const wchar_t *destPathRequest,\r
87       BSTR *destPathResult,\r
88       Int32 *writeAnswer);\r
89   STDMETHOD(ShowMessage)(const wchar_t *message);\r
90   STDMETHOD(SetCurrentFilePath)(const wchar_t *filePath);\r
91   STDMETHOD(SetNumFiles)(UInt64 numFiles);\r
92 \r
93   // ICryptoGetTextPassword\r
94   #ifndef _NO_CRYPTO\r
95   STDMETHOD(CryptoGetTextPassword)(BSTR *password);\r
96   #endif\r
97 \r
98 private:\r
99   UString _currentArchivePath;\r
100   bool _needWriteArchivePath;\r
101 \r
102   UString _currentFilePath;\r
103   bool _isFolder;\r
104 \r
105   HRESULT SetCurrentFilePath2(const wchar_t *filePath);\r
106   void AddErrorMessage(LPCWSTR message);\r
107 public:\r
108   CProgressDialog *ProgressDialog;\r
109   #ifndef _SFX\r
110   UInt64 NumFolders;\r
111   UInt64 NumFiles;\r
112   bool NeedAddFile;\r
113   #endif\r
114   UInt32 NumArchiveErrors;\r
115   bool ThereAreMessageErrors;\r
116   NExtract::NOverwriteMode::EEnum OverwriteMode;\r
117 \r
118   #ifndef _NO_CRYPTO\r
119   bool PasswordIsDefined;\r
120   bool PasswordWasAsked;\r
121   UString Password;\r
122   #endif\r
123 \r
124   CExtractCallbackImp():\r
125     #ifndef _NO_CRYPTO\r
126     PasswordIsDefined(false),\r
127     PasswordWasAsked(false),\r
128     #endif\r
129     OverwriteMode(NExtract::NOverwriteMode::kAskBefore)\r
130     {}\r
131    \r
132   ~CExtractCallbackImp();\r
133   void Init();\r
134 \r
135   bool IsOK() const { return NumArchiveErrors == 0 && !ThereAreMessageErrors; }\r
136 };\r
137 \r
138 #endif\r