Imported Upstream version 9.20
[platform/upstream/7zip.git] / CPP / 7zip / UI / GUI / UpdateCallbackGUI.cpp
1 // UpdateCallbackGUI.cpp\r
2 \r
3 #include "StdAfx.h"\r
4 \r
5 #include "Common/IntToString.h"\r
6 #include "Common/StringConvert.h"\r
7 \r
8 #include "Windows/Error.h"\r
9 #include "Windows/PropVariant.h"\r
10 \r
11 #include "../FileManager/PasswordDialog.h"\r
12 \r
13 #include "UpdateCallbackGUI.h"\r
14 \r
15 using namespace NWindows;\r
16 \r
17 CUpdateCallbackGUI::~CUpdateCallbackGUI() {}\r
18 \r
19 void CUpdateCallbackGUI::Init()\r
20 {\r
21   FailedFiles.Clear();\r
22   NumFiles = 0;\r
23 }\r
24 \r
25 void CUpdateCallbackGUI::AddErrorMessage(LPCWSTR message)\r
26 {\r
27   ProgressDialog->Sync.AddErrorMessage(message);\r
28 }\r
29 \r
30 void CUpdateCallbackGUI::AddErrorMessage(const wchar_t *name, DWORD systemError)\r
31 {\r
32   AddErrorMessage(\r
33       UString(L"WARNING: ") +\r
34       NError::MyFormatMessageW(systemError) +\r
35       UString(L": ") +\r
36       UString(name));\r
37 }\r
38 \r
39 HRESULT CUpdateCallbackGUI::OpenResult(const wchar_t *name, HRESULT result)\r
40 {\r
41   if (result != S_OK)\r
42   {\r
43     AddErrorMessage (UString(L"Error: ") + name + UString(L" is not supported archive"));\r
44   }\r
45   return S_OK;\r
46 }\r
47 \r
48 HRESULT CUpdateCallbackGUI::StartScanning()\r
49 {\r
50   return S_OK;\r
51 }\r
52 \r
53 HRESULT CUpdateCallbackGUI::CanNotFindError(const wchar_t *name, DWORD systemError)\r
54 {\r
55   FailedFiles.Add(name);\r
56   AddErrorMessage(name, systemError);\r
57   return S_OK;\r
58 }\r
59 \r
60 HRESULT CUpdateCallbackGUI::FinishScanning()\r
61 {\r
62   return S_OK;\r
63 }\r
64 \r
65 HRESULT CUpdateCallbackGUI::StartArchive(const wchar_t *name, bool /* updating */)\r
66 {\r
67   ProgressDialog->Sync.SetTitleFileName(name);\r
68   return S_OK;\r
69 }\r
70 \r
71 HRESULT CUpdateCallbackGUI::FinishArchive()\r
72 {\r
73   return S_OK;\r
74 }\r
75 \r
76 HRESULT CUpdateCallbackGUI::CheckBreak()\r
77 {\r
78   return ProgressDialog->Sync.ProcessStopAndPause();\r
79 }\r
80 \r
81 HRESULT CUpdateCallbackGUI::ScanProgress(UInt64 /* numFolders */, UInt64 numFiles, const wchar_t *path)\r
82 {\r
83   ProgressDialog->Sync.SetCurrentFileName(path);\r
84   ProgressDialog->Sync.SetNumFilesTotal(numFiles);\r
85   return ProgressDialog->Sync.ProcessStopAndPause();\r
86 }\r
87 \r
88 HRESULT CUpdateCallbackGUI::Finilize()\r
89 {\r
90   return S_OK;\r
91 }\r
92 \r
93 HRESULT CUpdateCallbackGUI::SetNumFiles(UInt64 numFiles)\r
94 {\r
95   ProgressDialog->Sync.SetNumFilesTotal(numFiles);\r
96   return S_OK;\r
97 }\r
98 \r
99 HRESULT CUpdateCallbackGUI::SetTotal(UInt64 total)\r
100 {\r
101   ProgressDialog->Sync.SetProgress(total, 0);\r
102   return S_OK;\r
103 }\r
104 \r
105 HRESULT CUpdateCallbackGUI::SetCompleted(const UInt64 *completeValue)\r
106 {\r
107   RINOK(CheckBreak());\r
108   if (completeValue != NULL)\r
109     ProgressDialog->Sync.SetPos(*completeValue);\r
110   return S_OK;\r
111 }\r
112 \r
113 HRESULT CUpdateCallbackGUI::SetRatioInfo(const UInt64 *inSize, const UInt64 *outSize)\r
114 {\r
115   RINOK(CheckBreak());\r
116   ProgressDialog->Sync.SetRatioInfo(inSize, outSize);\r
117   return S_OK;\r
118 }\r
119 \r
120 HRESULT CUpdateCallbackGUI::GetStream(const wchar_t *name, bool /* isAnti */)\r
121 {\r
122   ProgressDialog->Sync.SetCurrentFileName(name);\r
123   return S_OK;\r
124 }\r
125 \r
126 HRESULT CUpdateCallbackGUI::OpenFileError(const wchar_t *name, DWORD systemError)\r
127 {\r
128   FailedFiles.Add(name);\r
129   // if (systemError == ERROR_SHARING_VIOLATION)\r
130   {\r
131     AddErrorMessage(name, systemError);\r
132     return S_FALSE;\r
133   }\r
134   // return systemError;\r
135 }\r
136 \r
137 HRESULT CUpdateCallbackGUI::SetOperationResult(Int32 /* operationResult */)\r
138 {\r
139   NumFiles++;\r
140   ProgressDialog->Sync.SetNumFilesCur(NumFiles);\r
141   return S_OK;\r
142 }\r
143 \r
144 HRESULT CUpdateCallbackGUI::CryptoGetTextPassword2(Int32 *passwordIsDefined, BSTR *password)\r
145 {\r
146   *password = NULL;\r
147   if (!PasswordIsDefined)\r
148   {\r
149     if (passwordIsDefined == 0 || AskPassword)\r
150     {\r
151       CPasswordDialog dialog;\r
152       ProgressDialog->WaitCreating();\r
153       if (dialog.Create(*ProgressDialog) == IDCANCEL)\r
154         return E_ABORT;\r
155       Password = dialog.Password;\r
156       PasswordIsDefined = true;\r
157     }\r
158   }\r
159   if (passwordIsDefined != 0)\r
160     *passwordIsDefined = BoolToInt(PasswordIsDefined);\r
161   return StringToBstr(Password, password);\r
162 }\r
163 \r
164 HRESULT CUpdateCallbackGUI::CryptoGetTextPassword(BSTR *password)\r
165 {\r
166   return CryptoGetTextPassword2(NULL, password);\r
167 }\r
168 \r
169 /*\r
170 It doesn't work, since main stream waits Dialog\r
171 HRESULT CUpdateCallbackGUI::CloseProgress()\r
172 {\r
173   ProgressDialog->MyClose();\r
174   return S_OK;\r
175 }\r
176 */\r
177 \r
178 \r
179 HRESULT CUpdateCallbackGUI::Open_CheckBreak()\r
180 {\r
181   return ProgressDialog->Sync.ProcessStopAndPause();\r
182 }\r
183 \r
184 HRESULT CUpdateCallbackGUI::Open_SetTotal(const UInt64 * /* numFiles */, const UInt64 * /* numBytes */)\r
185 {\r
186   // if (numFiles != NULL) ProgressDialog->Sync.SetNumFilesTotal(*numFiles);\r
187   return S_OK;\r
188 }\r
189 \r
190 HRESULT CUpdateCallbackGUI::Open_SetCompleted(const UInt64 * /* numFiles */, const UInt64 * /* numBytes */)\r
191 {\r
192   return ProgressDialog->Sync.ProcessStopAndPause();\r
193 }\r
194 \r
195 #ifndef _NO_CRYPTO\r
196 \r
197 HRESULT CUpdateCallbackGUI::Open_CryptoGetTextPassword(BSTR *password)\r
198 {\r
199   PasswordWasAsked = true;\r
200   return CryptoGetTextPassword2(NULL, password);\r
201 }\r
202 \r
203 HRESULT CUpdateCallbackGUI::Open_GetPasswordIfAny(UString &password)\r
204 {\r
205   if (PasswordIsDefined)\r
206     password = Password;\r
207   return S_OK;\r
208 }\r
209 \r
210 bool CUpdateCallbackGUI::Open_WasPasswordAsked()\r
211 {\r
212   return PasswordWasAsked;\r
213 }\r
214 \r
215 void CUpdateCallbackGUI::Open_ClearPasswordWasAskedFlag()\r
216 {\r
217   PasswordWasAsked = false;\r
218 }\r
219 \r
220 /*\r
221 HRESULT CUpdateCallbackGUI::ShowDeleteFile(const wchar_t *name)\r
222 {\r
223   ProgressDialog->Sync.SetCurrentFileName(name);\r
224   return S_OK;\r
225 }\r
226 */\r
227 \r
228 #endif\r