1 // UpdateCallbackGUI.cpp
2
3 #include "StdAfx.h"
4
5 #include "../../../Common/IntToString.h"
6 #include "../../../Common/StringConvert.h"
7
8 #include "../../../Windows/PropVariant.h"
9
10 #include "../FileManager/FormatUtils.h"
11 #include "../FileManager/LangUtils.h"
12
13 #include "../FileManager/resourceGui.h"
14
15 #include "resource2.h"
16
17 #include "UpdateCallbackGUI.h"
18
19 using namespace NWindows;
20
21 // CUpdateCallbackGUI::~CUpdateCallbackGUI() {}
22
Init()23 void CUpdateCallbackGUI::Init()
24 {
25 CUpdateCallbackGUI2::Init();
26 FailedFiles.Clear();
27 }
28
29 void OpenResult_GUI(UString &s, const CCodecs *codecs, const CArchiveLink &arcLink, const wchar_t *name, HRESULT result);
30
OpenResult(const CCodecs * codecs,const CArchiveLink & arcLink,const wchar_t * name,HRESULT result)31 HRESULT CUpdateCallbackGUI::OpenResult(
32 const CCodecs *codecs, const CArchiveLink &arcLink, const wchar_t *name, HRESULT result)
33 {
34 UString s;
35 OpenResult_GUI(s, codecs, arcLink, name, result);
36 if (!s.IsEmpty())
37 {
38 ProgressDialog->Sync.AddError_Message(s);
39 }
40
41 return S_OK;
42 }
43
StartScanning()44 HRESULT CUpdateCallbackGUI::StartScanning()
45 {
46 CProgressSync &sync = ProgressDialog->Sync;
47 sync.Set_Status(LangString(IDS_SCANNING));
48 return S_OK;
49 }
50
ScanError(const FString & path,DWORD systemError)51 HRESULT CUpdateCallbackGUI::ScanError(const FString &path, DWORD systemError)
52 {
53 FailedFiles.Add(path);
54 ProgressDialog->Sync.AddError_Code_Name(HRESULT_FROM_WIN32(systemError), fs2us(path));
55 return S_OK;
56 }
57
FinishScanning(const CDirItemsStat & st)58 HRESULT CUpdateCallbackGUI::FinishScanning(const CDirItemsStat &st)
59 {
60 CProgressSync &sync = ProgressDialog->Sync;
61 RINOK(ProgressDialog->Sync.ScanProgress(st.NumFiles + st.NumAltStreams,
62 st.GetTotalBytes(), FString(), true))
63 sync.Set_Status(L"");
64 return S_OK;
65 }
66
StartArchive(const wchar_t * name,bool)67 HRESULT CUpdateCallbackGUI::StartArchive(const wchar_t *name, bool /* updating */)
68 {
69 CProgressSync &sync = ProgressDialog->Sync;
70 sync.Set_Status(LangString(IDS_PROGRESS_COMPRESSING));
71 sync.Set_TitleFileName(name);
72 return S_OK;
73 }
74
FinishArchive(const CFinishArchiveStat &)75 HRESULT CUpdateCallbackGUI::FinishArchive(const CFinishArchiveStat & /* st */)
76 {
77 CProgressSync &sync = ProgressDialog->Sync;
78 sync.Set_Status(L"");
79 return S_OK;
80 }
81
CheckBreak()82 HRESULT CUpdateCallbackGUI::CheckBreak()
83 {
84 return ProgressDialog->Sync.CheckStop();
85 }
86
ScanProgress(const CDirItemsStat & st,const FString & path,bool isDir)87 HRESULT CUpdateCallbackGUI::ScanProgress(const CDirItemsStat &st, const FString &path, bool isDir)
88 {
89 return ProgressDialog->Sync.ScanProgress(st.NumFiles + st.NumAltStreams,
90 st.GetTotalBytes(), path, isDir);
91 }
92
93 /*
94 HRESULT CUpdateCallbackGUI::Finalize()
95 {
96 return S_OK;
97 }
98 */
99
SetNumItems(const CArcToDoStat & stat)100 HRESULT CUpdateCallbackGUI::SetNumItems(const CArcToDoStat &stat)
101 {
102 ProgressDialog->Sync.Set_NumFilesTotal(stat.Get_NumDataItems_Total());
103 return S_OK;
104 }
105
SetTotal(UInt64 total)106 HRESULT CUpdateCallbackGUI::SetTotal(UInt64 total)
107 {
108 ProgressDialog->Sync.Set_NumBytesTotal(total);
109 return S_OK;
110 }
111
SetCompleted(const UInt64 * completed)112 HRESULT CUpdateCallbackGUI::SetCompleted(const UInt64 *completed)
113 {
114 return ProgressDialog->Sync.Set_NumBytesCur(completed);
115 }
116
SetRatioInfo(const UInt64 * inSize,const UInt64 * outSize)117 HRESULT CUpdateCallbackGUI::SetRatioInfo(const UInt64 *inSize, const UInt64 *outSize)
118 {
119 ProgressDialog->Sync.Set_Ratio(inSize, outSize);
120 return CheckBreak();
121 }
122
GetStream(const wchar_t * name,bool isDir,bool,UInt32 mode)123 HRESULT CUpdateCallbackGUI::GetStream(const wchar_t *name, bool isDir, bool /* isAnti */, UInt32 mode)
124 {
125 return SetOperation_Base(mode, name, isDir);
126 }
127
OpenFileError(const FString & path,DWORD systemError)128 HRESULT CUpdateCallbackGUI::OpenFileError(const FString &path, DWORD systemError)
129 {
130 FailedFiles.Add(path);
131 // if (systemError == ERROR_SHARING_VIOLATION)
132 {
133 ProgressDialog->Sync.AddError_Code_Name(HRESULT_FROM_WIN32(systemError), fs2us(path));
134 return S_FALSE;
135 }
136 // return systemError;
137 }
138
SetOperationResult(Int32)139 HRESULT CUpdateCallbackGUI::SetOperationResult(Int32 /* operationResult */)
140 {
141 NumFiles++;
142 ProgressDialog->Sync.Set_NumFilesCur(NumFiles);
143 return S_OK;
144 }
145
146 void SetExtractErrorMessage(Int32 opRes, Int32 encrypted, const wchar_t *fileName, UString &s);
147
ReportExtractResult(Int32 opRes,Int32 isEncrypted,const wchar_t * name)148 HRESULT CUpdateCallbackGUI::ReportExtractResult(Int32 opRes, Int32 isEncrypted, const wchar_t *name)
149 {
150 if (opRes != NArchive::NExtract::NOperationResult::kOK)
151 {
152 UString s;
153 SetExtractErrorMessage(opRes, isEncrypted, name, s);
154 ProgressDialog->Sync.AddError_Message(s);
155 }
156 return S_OK;
157 }
158
ReportUpdateOperation(UInt32 op,const wchar_t * name,bool isDir)159 HRESULT CUpdateCallbackGUI::ReportUpdateOperation(UInt32 op, const wchar_t *name, bool isDir)
160 {
161 return SetOperation_Base(op, name, isDir);
162 }
163
CryptoGetTextPassword2(Int32 * passwordIsDefined,BSTR * password)164 HRESULT CUpdateCallbackGUI::CryptoGetTextPassword2(Int32 *passwordIsDefined, BSTR *password)
165 {
166 *password = NULL;
167 if (passwordIsDefined)
168 *passwordIsDefined = BoolToInt(PasswordIsDefined);
169 if (!PasswordIsDefined)
170 {
171 if (AskPassword)
172 {
173 RINOK(ShowAskPasswordDialog())
174 }
175 }
176 if (passwordIsDefined)
177 *passwordIsDefined = BoolToInt(PasswordIsDefined);
178 return StringToBstr(Password, password);
179 }
180
CryptoGetTextPassword(BSTR * password)181 HRESULT CUpdateCallbackGUI::CryptoGetTextPassword(BSTR *password)
182 {
183 return CryptoGetTextPassword2(NULL, password);
184 }
185
186 /*
187 It doesn't work, since main stream waits Dialog
188 HRESULT CUpdateCallbackGUI::CloseProgress()
189 {
190 ProgressDialog->MyClose();
191 return S_OK;
192 }
193 */
194
195
Open_CheckBreak()196 HRESULT CUpdateCallbackGUI::Open_CheckBreak()
197 {
198 return ProgressDialog->Sync.CheckStop();
199 }
200
Open_SetTotal(const UInt64 *,const UInt64 *)201 HRESULT CUpdateCallbackGUI::Open_SetTotal(const UInt64 * /* numFiles */, const UInt64 * /* numBytes */)
202 {
203 // if (numFiles != NULL) ProgressDialog->Sync.SetNumFilesTotal(*numFiles);
204 return S_OK;
205 }
206
Open_SetCompleted(const UInt64 *,const UInt64 *)207 HRESULT CUpdateCallbackGUI::Open_SetCompleted(const UInt64 * /* numFiles */, const UInt64 * /* numBytes */)
208 {
209 return ProgressDialog->Sync.CheckStop();
210 }
211
212 #ifndef Z7_NO_CRYPTO
213
Open_CryptoGetTextPassword(BSTR * password)214 HRESULT CUpdateCallbackGUI::Open_CryptoGetTextPassword(BSTR *password)
215 {
216 PasswordWasAsked = true;
217 return CryptoGetTextPassword2(NULL, password);
218 }
219
220 /*
221 HRESULT CUpdateCallbackGUI::Open_GetPasswordIfAny(bool &passwordIsDefined, UString &password)
222 {
223 passwordIsDefined = PasswordIsDefined;
224 password = Password;
225 return S_OK;
226 }
227
228 bool CUpdateCallbackGUI::Open_WasPasswordAsked()
229 {
230 return PasswordWasAsked;
231 }
232
233 void CUpdateCallbackGUI::Open_Clear_PasswordWasAsked_Flag()
234 {
235 PasswordWasAsked = false;
236 }
237 */
238
ShowDeleteFile(const wchar_t * name,bool isDir)239 HRESULT CUpdateCallbackGUI::ShowDeleteFile(const wchar_t *name, bool isDir)
240 {
241 return SetOperation_Base(NUpdateNotifyOp::kDelete, name, isDir);
242 }
243
FinishDeletingAfterArchiving()244 HRESULT CUpdateCallbackGUI::FinishDeletingAfterArchiving()
245 {
246 // ClosePercents2();
247 return S_OK;
248 }
249
DeletingAfterArchiving(const FString & path,bool isDir)250 HRESULT CUpdateCallbackGUI::DeletingAfterArchiving(const FString &path, bool isDir)
251 {
252 return ProgressDialog->Sync.Set_Status2(_lang_Removing, fs2us(path), isDir);
253 }
254
255
MoveArc_Start(const wchar_t * srcTempPath,const wchar_t * destFinalPath,UInt64 totalSize,Int32 updateMode)256 HRESULT CUpdateCallbackGUI::MoveArc_Start(const wchar_t *srcTempPath, const wchar_t *destFinalPath, UInt64 totalSize, Int32 updateMode)
257 {
258 return MoveArc_Start_Base(srcTempPath, destFinalPath, totalSize, updateMode);
259 }
MoveArc_Progress(UInt64 totalSize,UInt64 currentSize)260 HRESULT CUpdateCallbackGUI::MoveArc_Progress(UInt64 totalSize, UInt64 currentSize)
261 {
262 return MoveArc_Progress_Base(totalSize, currentSize);
263 }
MoveArc_Finish()264 HRESULT CUpdateCallbackGUI::MoveArc_Finish()
265 {
266 return MoveArc_Finish_Base();
267 }
268
269
StartOpenArchive(const wchar_t *)270 HRESULT CUpdateCallbackGUI::StartOpenArchive(const wchar_t * /* name */)
271 {
272 return S_OK;
273 }
274
ReadingFileError(const FString & path,DWORD systemError)275 HRESULT CUpdateCallbackGUI::ReadingFileError(const FString &path, DWORD systemError)
276 {
277 FailedFiles.Add(path);
278 ProgressDialog->Sync.AddError_Code_Name(HRESULT_FROM_WIN32(systemError), fs2us(path));
279 return S_OK;
280 }
281
WriteSfx(const wchar_t *,UInt64)282 HRESULT CUpdateCallbackGUI::WriteSfx(const wchar_t * /* name */, UInt64 /* size */)
283 {
284 CProgressSync &sync = ProgressDialog->Sync;
285 sync.Set_Status(L"WriteSfx");
286 return S_OK;
287 }
288
Open_Finished()289 HRESULT CUpdateCallbackGUI::Open_Finished()
290 {
291 // ClosePercents();
292 return S_OK;
293 }
294
295 #endif
296