1*f6dc9357SAndroid Build Coastguard Worker // UpdateCallbackAgent.h
2*f6dc9357SAndroid Build Coastguard Worker
3*f6dc9357SAndroid Build Coastguard Worker #include "StdAfx.h"
4*f6dc9357SAndroid Build Coastguard Worker
5*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/IntToString.h"
6*f6dc9357SAndroid Build Coastguard Worker
7*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/ErrorMsg.h"
8*f6dc9357SAndroid Build Coastguard Worker
9*f6dc9357SAndroid Build Coastguard Worker #include "UpdateCallbackAgent.h"
10*f6dc9357SAndroid Build Coastguard Worker
11*f6dc9357SAndroid Build Coastguard Worker using namespace NWindows;
12*f6dc9357SAndroid Build Coastguard Worker
SetCallback(IFolderArchiveUpdateCallback * callback)13*f6dc9357SAndroid Build Coastguard Worker void CUpdateCallbackAgent::SetCallback(IFolderArchiveUpdateCallback *callback)
14*f6dc9357SAndroid Build Coastguard Worker {
15*f6dc9357SAndroid Build Coastguard Worker Callback = callback;
16*f6dc9357SAndroid Build Coastguard Worker _compressProgress.Release();
17*f6dc9357SAndroid Build Coastguard Worker Callback2.Release();
18*f6dc9357SAndroid Build Coastguard Worker if (Callback)
19*f6dc9357SAndroid Build Coastguard Worker {
20*f6dc9357SAndroid Build Coastguard Worker Callback.QueryInterface(IID_ICompressProgressInfo, &_compressProgress);
21*f6dc9357SAndroid Build Coastguard Worker Callback.QueryInterface(IID_IFolderArchiveUpdateCallback2, &Callback2);
22*f6dc9357SAndroid Build Coastguard Worker }
23*f6dc9357SAndroid Build Coastguard Worker }
24*f6dc9357SAndroid Build Coastguard Worker
SetNumItems(const CArcToDoStat & stat)25*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackAgent::SetNumItems(const CArcToDoStat &stat)
26*f6dc9357SAndroid Build Coastguard Worker {
27*f6dc9357SAndroid Build Coastguard Worker if (Callback)
28*f6dc9357SAndroid Build Coastguard Worker return Callback->SetNumFiles(stat.Get_NumDataItems_Total());
29*f6dc9357SAndroid Build Coastguard Worker return S_OK;
30*f6dc9357SAndroid Build Coastguard Worker }
31*f6dc9357SAndroid Build Coastguard Worker
32*f6dc9357SAndroid Build Coastguard Worker
WriteSfx(const wchar_t *,UInt64)33*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackAgent::WriteSfx(const wchar_t * /* name */, UInt64 /* size */)
34*f6dc9357SAndroid Build Coastguard Worker {
35*f6dc9357SAndroid Build Coastguard Worker return S_OK;
36*f6dc9357SAndroid Build Coastguard Worker }
37*f6dc9357SAndroid Build Coastguard Worker
38*f6dc9357SAndroid Build Coastguard Worker
SetTotal(UINT64 size)39*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackAgent::SetTotal(UINT64 size)
40*f6dc9357SAndroid Build Coastguard Worker {
41*f6dc9357SAndroid Build Coastguard Worker if (Callback)
42*f6dc9357SAndroid Build Coastguard Worker return Callback->SetTotal(size);
43*f6dc9357SAndroid Build Coastguard Worker return S_OK;
44*f6dc9357SAndroid Build Coastguard Worker }
45*f6dc9357SAndroid Build Coastguard Worker
SetCompleted(const UINT64 * completeValue)46*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackAgent::SetCompleted(const UINT64 *completeValue)
47*f6dc9357SAndroid Build Coastguard Worker {
48*f6dc9357SAndroid Build Coastguard Worker if (Callback)
49*f6dc9357SAndroid Build Coastguard Worker return Callback->SetCompleted(completeValue);
50*f6dc9357SAndroid Build Coastguard Worker return S_OK;
51*f6dc9357SAndroid Build Coastguard Worker }
52*f6dc9357SAndroid Build Coastguard Worker
SetRatioInfo(const UInt64 * inSize,const UInt64 * outSize)53*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackAgent::SetRatioInfo(const UInt64 *inSize, const UInt64 *outSize)
54*f6dc9357SAndroid Build Coastguard Worker {
55*f6dc9357SAndroid Build Coastguard Worker if (_compressProgress)
56*f6dc9357SAndroid Build Coastguard Worker return _compressProgress->SetRatioInfo(inSize, outSize);
57*f6dc9357SAndroid Build Coastguard Worker return S_OK;
58*f6dc9357SAndroid Build Coastguard Worker }
59*f6dc9357SAndroid Build Coastguard Worker
CheckBreak()60*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackAgent::CheckBreak()
61*f6dc9357SAndroid Build Coastguard Worker {
62*f6dc9357SAndroid Build Coastguard Worker return S_OK;
63*f6dc9357SAndroid Build Coastguard Worker }
64*f6dc9357SAndroid Build Coastguard Worker
65*f6dc9357SAndroid Build Coastguard Worker /*
66*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackAgent::Finalize()
67*f6dc9357SAndroid Build Coastguard Worker {
68*f6dc9357SAndroid Build Coastguard Worker return S_OK;
69*f6dc9357SAndroid Build Coastguard Worker }
70*f6dc9357SAndroid Build Coastguard Worker */
71*f6dc9357SAndroid Build Coastguard Worker
OpenFileError(const FString & path,DWORD systemError)72*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackAgent::OpenFileError(const FString &path, DWORD systemError)
73*f6dc9357SAndroid Build Coastguard Worker {
74*f6dc9357SAndroid Build Coastguard Worker const HRESULT hres = HRESULT_FROM_WIN32(systemError);
75*f6dc9357SAndroid Build Coastguard Worker // if (systemError == ERROR_SHARING_VIOLATION)
76*f6dc9357SAndroid Build Coastguard Worker {
77*f6dc9357SAndroid Build Coastguard Worker if (Callback2)
78*f6dc9357SAndroid Build Coastguard Worker {
79*f6dc9357SAndroid Build Coastguard Worker RINOK(Callback2->OpenFileError(fs2us(path), hres))
80*f6dc9357SAndroid Build Coastguard Worker return S_FALSE;
81*f6dc9357SAndroid Build Coastguard Worker }
82*f6dc9357SAndroid Build Coastguard Worker
83*f6dc9357SAndroid Build Coastguard Worker if (Callback)
84*f6dc9357SAndroid Build Coastguard Worker {
85*f6dc9357SAndroid Build Coastguard Worker UString s ("WARNING: ");
86*f6dc9357SAndroid Build Coastguard Worker s += NError::MyFormatMessage(systemError);
87*f6dc9357SAndroid Build Coastguard Worker s += ": ";
88*f6dc9357SAndroid Build Coastguard Worker s += fs2us(path);
89*f6dc9357SAndroid Build Coastguard Worker RINOK(Callback->UpdateErrorMessage(s))
90*f6dc9357SAndroid Build Coastguard Worker return S_FALSE;
91*f6dc9357SAndroid Build Coastguard Worker }
92*f6dc9357SAndroid Build Coastguard Worker }
93*f6dc9357SAndroid Build Coastguard Worker // FailedFiles.Add(name);
94*f6dc9357SAndroid Build Coastguard Worker return hres;
95*f6dc9357SAndroid Build Coastguard Worker }
96*f6dc9357SAndroid Build Coastguard Worker
ReadingFileError(const FString & path,DWORD systemError)97*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackAgent::ReadingFileError(const FString &path, DWORD systemError)
98*f6dc9357SAndroid Build Coastguard Worker {
99*f6dc9357SAndroid Build Coastguard Worker const HRESULT hres = HRESULT_FROM_WIN32(systemError);
100*f6dc9357SAndroid Build Coastguard Worker
101*f6dc9357SAndroid Build Coastguard Worker // if (systemError == ERROR_SHARING_VIOLATION)
102*f6dc9357SAndroid Build Coastguard Worker {
103*f6dc9357SAndroid Build Coastguard Worker if (Callback2)
104*f6dc9357SAndroid Build Coastguard Worker {
105*f6dc9357SAndroid Build Coastguard Worker RINOK(Callback2->ReadingFileError(fs2us(path), hres))
106*f6dc9357SAndroid Build Coastguard Worker }
107*f6dc9357SAndroid Build Coastguard Worker else if (Callback)
108*f6dc9357SAndroid Build Coastguard Worker {
109*f6dc9357SAndroid Build Coastguard Worker UString s ("ERROR: ");
110*f6dc9357SAndroid Build Coastguard Worker s += NError::MyFormatMessage(systemError);
111*f6dc9357SAndroid Build Coastguard Worker s += ": ";
112*f6dc9357SAndroid Build Coastguard Worker s += fs2us(path);
113*f6dc9357SAndroid Build Coastguard Worker RINOK(Callback->UpdateErrorMessage(s))
114*f6dc9357SAndroid Build Coastguard Worker }
115*f6dc9357SAndroid Build Coastguard Worker }
116*f6dc9357SAndroid Build Coastguard Worker // FailedFiles.Add(name);
117*f6dc9357SAndroid Build Coastguard Worker return hres;
118*f6dc9357SAndroid Build Coastguard Worker }
119*f6dc9357SAndroid Build Coastguard Worker
GetStream(const wchar_t * name,bool isDir,bool,UInt32 mode)120*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackAgent::GetStream(const wchar_t *name, bool isDir, bool /* isAnti */, UInt32 mode)
121*f6dc9357SAndroid Build Coastguard Worker {
122*f6dc9357SAndroid Build Coastguard Worker if (Callback2)
123*f6dc9357SAndroid Build Coastguard Worker return Callback2->ReportUpdateOperation(mode, name, BoolToInt(isDir));
124*f6dc9357SAndroid Build Coastguard Worker if (Callback)
125*f6dc9357SAndroid Build Coastguard Worker return Callback->CompressOperation(name);
126*f6dc9357SAndroid Build Coastguard Worker return S_OK;
127*f6dc9357SAndroid Build Coastguard Worker }
128*f6dc9357SAndroid Build Coastguard Worker
SetOperationResult(Int32 operationResult)129*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackAgent::SetOperationResult(Int32 operationResult)
130*f6dc9357SAndroid Build Coastguard Worker {
131*f6dc9357SAndroid Build Coastguard Worker if (Callback)
132*f6dc9357SAndroid Build Coastguard Worker return Callback->OperationResult(operationResult);
133*f6dc9357SAndroid Build Coastguard Worker return S_OK;
134*f6dc9357SAndroid Build Coastguard Worker }
135*f6dc9357SAndroid Build Coastguard Worker
136*f6dc9357SAndroid Build Coastguard Worker void SetExtractErrorMessage(Int32 opRes, Int32 encrypted, const wchar_t *fileName, UString &s);
137*f6dc9357SAndroid Build Coastguard Worker
ReportExtractResult(Int32 opRes,Int32 isEncrypted,const wchar_t * name)138*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackAgent::ReportExtractResult(Int32 opRes, Int32 isEncrypted, const wchar_t *name)
139*f6dc9357SAndroid Build Coastguard Worker {
140*f6dc9357SAndroid Build Coastguard Worker if (Callback2)
141*f6dc9357SAndroid Build Coastguard Worker {
142*f6dc9357SAndroid Build Coastguard Worker return Callback2->ReportExtractResult(opRes, isEncrypted, name);
143*f6dc9357SAndroid Build Coastguard Worker }
144*f6dc9357SAndroid Build Coastguard Worker /*
145*f6dc9357SAndroid Build Coastguard Worker if (mode != NArchive::NExtract::NOperationResult::kOK)
146*f6dc9357SAndroid Build Coastguard Worker {
147*f6dc9357SAndroid Build Coastguard Worker Int32 encrypted = 0;
148*f6dc9357SAndroid Build Coastguard Worker UString s;
149*f6dc9357SAndroid Build Coastguard Worker SetExtractErrorMessage(mode, encrypted, name, s);
150*f6dc9357SAndroid Build Coastguard Worker // ProgressDialog->Sync.AddError_Message(s);
151*f6dc9357SAndroid Build Coastguard Worker }
152*f6dc9357SAndroid Build Coastguard Worker */
153*f6dc9357SAndroid Build Coastguard Worker return S_OK;
154*f6dc9357SAndroid Build Coastguard Worker }
155*f6dc9357SAndroid Build Coastguard Worker
ReportUpdateOperation(UInt32 op,const wchar_t * name,bool isDir)156*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackAgent::ReportUpdateOperation(UInt32 op, const wchar_t *name, bool isDir)
157*f6dc9357SAndroid Build Coastguard Worker {
158*f6dc9357SAndroid Build Coastguard Worker if (Callback2)
159*f6dc9357SAndroid Build Coastguard Worker {
160*f6dc9357SAndroid Build Coastguard Worker return Callback2->ReportUpdateOperation(op, name, BoolToInt(isDir));
161*f6dc9357SAndroid Build Coastguard Worker }
162*f6dc9357SAndroid Build Coastguard Worker return S_OK;
163*f6dc9357SAndroid Build Coastguard Worker }
164*f6dc9357SAndroid Build Coastguard Worker
165*f6dc9357SAndroid Build Coastguard Worker /*
166*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackAgent::SetPassword(const UString &
167*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_NO_CRYPTO
168*f6dc9357SAndroid Build Coastguard Worker password
169*f6dc9357SAndroid Build Coastguard Worker #endif
170*f6dc9357SAndroid Build Coastguard Worker )
171*f6dc9357SAndroid Build Coastguard Worker {
172*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_NO_CRYPTO
173*f6dc9357SAndroid Build Coastguard Worker PasswordIsDefined = true;
174*f6dc9357SAndroid Build Coastguard Worker Password = password;
175*f6dc9357SAndroid Build Coastguard Worker #endif
176*f6dc9357SAndroid Build Coastguard Worker return S_OK;
177*f6dc9357SAndroid Build Coastguard Worker }
178*f6dc9357SAndroid Build Coastguard Worker */
179*f6dc9357SAndroid Build Coastguard Worker
CryptoGetTextPassword2(Int32 * passwordIsDefined,BSTR * password)180*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackAgent::CryptoGetTextPassword2(Int32 *passwordIsDefined, BSTR *password)
181*f6dc9357SAndroid Build Coastguard Worker {
182*f6dc9357SAndroid Build Coastguard Worker *password = NULL;
183*f6dc9357SAndroid Build Coastguard Worker *passwordIsDefined = BoolToInt(false);
184*f6dc9357SAndroid Build Coastguard Worker if (!_cryptoGetTextPassword)
185*f6dc9357SAndroid Build Coastguard Worker {
186*f6dc9357SAndroid Build Coastguard Worker if (!Callback)
187*f6dc9357SAndroid Build Coastguard Worker return S_OK;
188*f6dc9357SAndroid Build Coastguard Worker Callback.QueryInterface(IID_ICryptoGetTextPassword2, &_cryptoGetTextPassword);
189*f6dc9357SAndroid Build Coastguard Worker if (!_cryptoGetTextPassword)
190*f6dc9357SAndroid Build Coastguard Worker return S_OK;
191*f6dc9357SAndroid Build Coastguard Worker }
192*f6dc9357SAndroid Build Coastguard Worker return _cryptoGetTextPassword->CryptoGetTextPassword2(passwordIsDefined, password);
193*f6dc9357SAndroid Build Coastguard Worker }
194*f6dc9357SAndroid Build Coastguard Worker
CryptoGetTextPassword(BSTR * password)195*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackAgent::CryptoGetTextPassword(BSTR *password)
196*f6dc9357SAndroid Build Coastguard Worker {
197*f6dc9357SAndroid Build Coastguard Worker *password = NULL;
198*f6dc9357SAndroid Build Coastguard Worker CMyComPtr<ICryptoGetTextPassword> getTextPassword;
199*f6dc9357SAndroid Build Coastguard Worker Callback.QueryInterface(IID_ICryptoGetTextPassword, &getTextPassword);
200*f6dc9357SAndroid Build Coastguard Worker if (!getTextPassword)
201*f6dc9357SAndroid Build Coastguard Worker return E_NOTIMPL;
202*f6dc9357SAndroid Build Coastguard Worker return getTextPassword->CryptoGetTextPassword(password);
203*f6dc9357SAndroid Build Coastguard Worker }
204*f6dc9357SAndroid Build Coastguard Worker
ShowDeleteFile(const wchar_t * name,bool)205*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackAgent::ShowDeleteFile(const wchar_t *name, bool /* isDir */)
206*f6dc9357SAndroid Build Coastguard Worker {
207*f6dc9357SAndroid Build Coastguard Worker return Callback->DeleteOperation(name);
208*f6dc9357SAndroid Build Coastguard Worker }
209