xref: /aosp_15_r20/external/lzma/CPP/7zip/UI/GUI/UpdateCallbackGUI.cpp (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
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