1*f6dc9357SAndroid Build Coastguard Worker // UpdateCallbackConsole.cpp
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 #include "../../../Windows/FileName.h"
9*f6dc9357SAndroid Build Coastguard Worker
10*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_ST
11*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/Synchronization.h"
12*f6dc9357SAndroid Build Coastguard Worker #endif
13*f6dc9357SAndroid Build Coastguard Worker
14*f6dc9357SAndroid Build Coastguard Worker // #include "../Common/PropIDUtils.h"
15*f6dc9357SAndroid Build Coastguard Worker
16*f6dc9357SAndroid Build Coastguard Worker #include "ConsoleClose.h"
17*f6dc9357SAndroid Build Coastguard Worker #include "UserInputUtils.h"
18*f6dc9357SAndroid Build Coastguard Worker #include "UpdateCallbackConsole.h"
19*f6dc9357SAndroid Build Coastguard Worker
20*f6dc9357SAndroid Build Coastguard Worker using namespace NWindows;
21*f6dc9357SAndroid Build Coastguard Worker
22*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_ST
23*f6dc9357SAndroid Build Coastguard Worker static NSynchronization::CCriticalSection g_CriticalSection;
24*f6dc9357SAndroid Build Coastguard Worker #define MT_LOCK NSynchronization::CCriticalSectionLock lock(g_CriticalSection);
25*f6dc9357SAndroid Build Coastguard Worker #else
26*f6dc9357SAndroid Build Coastguard Worker #define MT_LOCK
27*f6dc9357SAndroid Build Coastguard Worker #endif
28*f6dc9357SAndroid Build Coastguard Worker
29*f6dc9357SAndroid Build Coastguard Worker static const wchar_t * const kEmptyFileAlias = L"[Content]";
30*f6dc9357SAndroid Build Coastguard Worker
31*f6dc9357SAndroid Build Coastguard Worker static const char * const kOpenArchiveMessage = "Open archive: ";
32*f6dc9357SAndroid Build Coastguard Worker static const char * const kCreatingArchiveMessage = "Creating archive: ";
33*f6dc9357SAndroid Build Coastguard Worker static const char * const kUpdatingArchiveMessage = "Updating archive: ";
34*f6dc9357SAndroid Build Coastguard Worker static const char * const kScanningMessage = "Scanning the drive:";
35*f6dc9357SAndroid Build Coastguard Worker
36*f6dc9357SAndroid Build Coastguard Worker static const char * const kError = "ERROR: ";
37*f6dc9357SAndroid Build Coastguard Worker static const char * const kWarning = "WARNING: ";
38*f6dc9357SAndroid Build Coastguard Worker
CheckBreak2()39*f6dc9357SAndroid Build Coastguard Worker static HRESULT CheckBreak2()
40*f6dc9357SAndroid Build Coastguard Worker {
41*f6dc9357SAndroid Build Coastguard Worker return NConsoleClose::TestBreakSignal() ? E_ABORT : S_OK;
42*f6dc9357SAndroid Build Coastguard Worker }
43*f6dc9357SAndroid Build Coastguard Worker
44*f6dc9357SAndroid Build Coastguard Worker HRESULT Print_OpenArchive_Props(CStdOutStream &so, const CCodecs *codecs, const CArchiveLink &arcLink);
45*f6dc9357SAndroid Build Coastguard Worker HRESULT Print_OpenArchive_Error(CStdOutStream &so, const CCodecs *codecs, const CArchiveLink &arcLink);
46*f6dc9357SAndroid Build Coastguard Worker
47*f6dc9357SAndroid Build Coastguard Worker void PrintErrorFlags(CStdOutStream &so, const char *s, UInt32 errorFlags);
48*f6dc9357SAndroid Build Coastguard Worker
49*f6dc9357SAndroid Build Coastguard Worker void Print_ErrorFormatIndex_Warning(CStdOutStream *_so, const CCodecs *codecs, const CArc &arc);
50*f6dc9357SAndroid Build Coastguard Worker
OpenResult(const CCodecs * codecs,const CArchiveLink & arcLink,const wchar_t * name,HRESULT result)51*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackConsole::OpenResult(
52*f6dc9357SAndroid Build Coastguard Worker const CCodecs *codecs, const CArchiveLink &arcLink,
53*f6dc9357SAndroid Build Coastguard Worker const wchar_t *name, HRESULT result)
54*f6dc9357SAndroid Build Coastguard Worker {
55*f6dc9357SAndroid Build Coastguard Worker ClosePercents2();
56*f6dc9357SAndroid Build Coastguard Worker
57*f6dc9357SAndroid Build Coastguard Worker FOR_VECTOR (level, arcLink.Arcs)
58*f6dc9357SAndroid Build Coastguard Worker {
59*f6dc9357SAndroid Build Coastguard Worker const CArc &arc = arcLink.Arcs[level];
60*f6dc9357SAndroid Build Coastguard Worker const CArcErrorInfo &er = arc.ErrorInfo;
61*f6dc9357SAndroid Build Coastguard Worker
62*f6dc9357SAndroid Build Coastguard Worker UInt32 errorFlags = er.GetErrorFlags();
63*f6dc9357SAndroid Build Coastguard Worker
64*f6dc9357SAndroid Build Coastguard Worker if (errorFlags != 0 || !er.ErrorMessage.IsEmpty())
65*f6dc9357SAndroid Build Coastguard Worker {
66*f6dc9357SAndroid Build Coastguard Worker if (_se)
67*f6dc9357SAndroid Build Coastguard Worker {
68*f6dc9357SAndroid Build Coastguard Worker *_se << endl;
69*f6dc9357SAndroid Build Coastguard Worker if (level != 0)
70*f6dc9357SAndroid Build Coastguard Worker *_se << arc.Path << endl;
71*f6dc9357SAndroid Build Coastguard Worker }
72*f6dc9357SAndroid Build Coastguard Worker
73*f6dc9357SAndroid Build Coastguard Worker if (errorFlags != 0)
74*f6dc9357SAndroid Build Coastguard Worker {
75*f6dc9357SAndroid Build Coastguard Worker if (_se)
76*f6dc9357SAndroid Build Coastguard Worker PrintErrorFlags(*_se, "ERRORS:", errorFlags);
77*f6dc9357SAndroid Build Coastguard Worker }
78*f6dc9357SAndroid Build Coastguard Worker
79*f6dc9357SAndroid Build Coastguard Worker if (!er.ErrorMessage.IsEmpty())
80*f6dc9357SAndroid Build Coastguard Worker {
81*f6dc9357SAndroid Build Coastguard Worker if (_se)
82*f6dc9357SAndroid Build Coastguard Worker *_se << "ERRORS:" << endl << er.ErrorMessage << endl;
83*f6dc9357SAndroid Build Coastguard Worker }
84*f6dc9357SAndroid Build Coastguard Worker
85*f6dc9357SAndroid Build Coastguard Worker if (_se)
86*f6dc9357SAndroid Build Coastguard Worker {
87*f6dc9357SAndroid Build Coastguard Worker *_se << endl;
88*f6dc9357SAndroid Build Coastguard Worker _se->Flush();
89*f6dc9357SAndroid Build Coastguard Worker }
90*f6dc9357SAndroid Build Coastguard Worker }
91*f6dc9357SAndroid Build Coastguard Worker
92*f6dc9357SAndroid Build Coastguard Worker UInt32 warningFlags = er.GetWarningFlags();
93*f6dc9357SAndroid Build Coastguard Worker
94*f6dc9357SAndroid Build Coastguard Worker if (warningFlags != 0 || !er.WarningMessage.IsEmpty())
95*f6dc9357SAndroid Build Coastguard Worker {
96*f6dc9357SAndroid Build Coastguard Worker if (_so)
97*f6dc9357SAndroid Build Coastguard Worker {
98*f6dc9357SAndroid Build Coastguard Worker *_so << endl;
99*f6dc9357SAndroid Build Coastguard Worker if (level != 0)
100*f6dc9357SAndroid Build Coastguard Worker *_so << arc.Path << endl;
101*f6dc9357SAndroid Build Coastguard Worker }
102*f6dc9357SAndroid Build Coastguard Worker
103*f6dc9357SAndroid Build Coastguard Worker if (warningFlags != 0)
104*f6dc9357SAndroid Build Coastguard Worker {
105*f6dc9357SAndroid Build Coastguard Worker if (_so)
106*f6dc9357SAndroid Build Coastguard Worker PrintErrorFlags(*_so, "WARNINGS:", warningFlags);
107*f6dc9357SAndroid Build Coastguard Worker }
108*f6dc9357SAndroid Build Coastguard Worker
109*f6dc9357SAndroid Build Coastguard Worker if (!er.WarningMessage.IsEmpty())
110*f6dc9357SAndroid Build Coastguard Worker {
111*f6dc9357SAndroid Build Coastguard Worker if (_so)
112*f6dc9357SAndroid Build Coastguard Worker *_so << "WARNINGS:" << endl << er.WarningMessage << endl;
113*f6dc9357SAndroid Build Coastguard Worker }
114*f6dc9357SAndroid Build Coastguard Worker
115*f6dc9357SAndroid Build Coastguard Worker if (_so)
116*f6dc9357SAndroid Build Coastguard Worker {
117*f6dc9357SAndroid Build Coastguard Worker *_so << endl;
118*f6dc9357SAndroid Build Coastguard Worker if (NeedFlush)
119*f6dc9357SAndroid Build Coastguard Worker _so->Flush();
120*f6dc9357SAndroid Build Coastguard Worker }
121*f6dc9357SAndroid Build Coastguard Worker }
122*f6dc9357SAndroid Build Coastguard Worker
123*f6dc9357SAndroid Build Coastguard Worker
124*f6dc9357SAndroid Build Coastguard Worker if (er.ErrorFormatIndex >= 0)
125*f6dc9357SAndroid Build Coastguard Worker {
126*f6dc9357SAndroid Build Coastguard Worker if (_so)
127*f6dc9357SAndroid Build Coastguard Worker {
128*f6dc9357SAndroid Build Coastguard Worker Print_ErrorFormatIndex_Warning(_so, codecs, arc);
129*f6dc9357SAndroid Build Coastguard Worker if (NeedFlush)
130*f6dc9357SAndroid Build Coastguard Worker _so->Flush();
131*f6dc9357SAndroid Build Coastguard Worker }
132*f6dc9357SAndroid Build Coastguard Worker }
133*f6dc9357SAndroid Build Coastguard Worker }
134*f6dc9357SAndroid Build Coastguard Worker
135*f6dc9357SAndroid Build Coastguard Worker if (result == S_OK)
136*f6dc9357SAndroid Build Coastguard Worker {
137*f6dc9357SAndroid Build Coastguard Worker if (_so)
138*f6dc9357SAndroid Build Coastguard Worker {
139*f6dc9357SAndroid Build Coastguard Worker RINOK(Print_OpenArchive_Props(*_so, codecs, arcLink))
140*f6dc9357SAndroid Build Coastguard Worker *_so << endl;
141*f6dc9357SAndroid Build Coastguard Worker }
142*f6dc9357SAndroid Build Coastguard Worker }
143*f6dc9357SAndroid Build Coastguard Worker else
144*f6dc9357SAndroid Build Coastguard Worker {
145*f6dc9357SAndroid Build Coastguard Worker if (_so)
146*f6dc9357SAndroid Build Coastguard Worker _so->Flush();
147*f6dc9357SAndroid Build Coastguard Worker if (_se)
148*f6dc9357SAndroid Build Coastguard Worker {
149*f6dc9357SAndroid Build Coastguard Worker *_se << kError;
150*f6dc9357SAndroid Build Coastguard Worker _se->NormalizePrint_wstr_Path(name);
151*f6dc9357SAndroid Build Coastguard Worker *_se << endl;
152*f6dc9357SAndroid Build Coastguard Worker HRESULT res = Print_OpenArchive_Error(*_se, codecs, arcLink);
153*f6dc9357SAndroid Build Coastguard Worker RINOK(res)
154*f6dc9357SAndroid Build Coastguard Worker _se->Flush();
155*f6dc9357SAndroid Build Coastguard Worker }
156*f6dc9357SAndroid Build Coastguard Worker }
157*f6dc9357SAndroid Build Coastguard Worker
158*f6dc9357SAndroid Build Coastguard Worker return S_OK;
159*f6dc9357SAndroid Build Coastguard Worker }
160*f6dc9357SAndroid Build Coastguard Worker
StartScanning()161*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackConsole::StartScanning()
162*f6dc9357SAndroid Build Coastguard Worker {
163*f6dc9357SAndroid Build Coastguard Worker if (_so)
164*f6dc9357SAndroid Build Coastguard Worker *_so << kScanningMessage << endl;
165*f6dc9357SAndroid Build Coastguard Worker _percent.Command = "Scan ";
166*f6dc9357SAndroid Build Coastguard Worker return S_OK;
167*f6dc9357SAndroid Build Coastguard Worker }
168*f6dc9357SAndroid Build Coastguard Worker
ScanProgress(const CDirItemsStat & st,const FString & path,bool)169*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackConsole::ScanProgress(const CDirItemsStat &st, const FString &path, bool /* isDir */)
170*f6dc9357SAndroid Build Coastguard Worker {
171*f6dc9357SAndroid Build Coastguard Worker if (NeedPercents())
172*f6dc9357SAndroid Build Coastguard Worker {
173*f6dc9357SAndroid Build Coastguard Worker _percent.Files = st.NumDirs + st.NumFiles + st.NumAltStreams;
174*f6dc9357SAndroid Build Coastguard Worker _percent.Completed = st.GetTotalBytes();
175*f6dc9357SAndroid Build Coastguard Worker _percent.FileName = fs2us(path);
176*f6dc9357SAndroid Build Coastguard Worker _percent.Print();
177*f6dc9357SAndroid Build Coastguard Worker }
178*f6dc9357SAndroid Build Coastguard Worker
179*f6dc9357SAndroid Build Coastguard Worker return CheckBreak();
180*f6dc9357SAndroid Build Coastguard Worker }
181*f6dc9357SAndroid Build Coastguard Worker
CommonError(const FString & path,DWORD systemError,bool isWarning)182*f6dc9357SAndroid Build Coastguard Worker void CCallbackConsoleBase::CommonError(const FString &path, DWORD systemError, bool isWarning)
183*f6dc9357SAndroid Build Coastguard Worker {
184*f6dc9357SAndroid Build Coastguard Worker ClosePercents2();
185*f6dc9357SAndroid Build Coastguard Worker
186*f6dc9357SAndroid Build Coastguard Worker if (_se)
187*f6dc9357SAndroid Build Coastguard Worker {
188*f6dc9357SAndroid Build Coastguard Worker if (_so)
189*f6dc9357SAndroid Build Coastguard Worker _so->Flush();
190*f6dc9357SAndroid Build Coastguard Worker
191*f6dc9357SAndroid Build Coastguard Worker *_se << endl << (isWarning ? kWarning : kError)
192*f6dc9357SAndroid Build Coastguard Worker << NError::MyFormatMessage(systemError)
193*f6dc9357SAndroid Build Coastguard Worker << endl;
194*f6dc9357SAndroid Build Coastguard Worker _se->NormalizePrint_UString_Path(fs2us(path));
195*f6dc9357SAndroid Build Coastguard Worker *_se << endl << endl;
196*f6dc9357SAndroid Build Coastguard Worker _se->Flush();
197*f6dc9357SAndroid Build Coastguard Worker }
198*f6dc9357SAndroid Build Coastguard Worker }
199*f6dc9357SAndroid Build Coastguard Worker
200*f6dc9357SAndroid Build Coastguard Worker /*
201*f6dc9357SAndroid Build Coastguard Worker void CCallbackConsoleBase::CommonError(const char *message)
202*f6dc9357SAndroid Build Coastguard Worker {
203*f6dc9357SAndroid Build Coastguard Worker ClosePercents2();
204*f6dc9357SAndroid Build Coastguard Worker
205*f6dc9357SAndroid Build Coastguard Worker if (_se)
206*f6dc9357SAndroid Build Coastguard Worker {
207*f6dc9357SAndroid Build Coastguard Worker if (_so)
208*f6dc9357SAndroid Build Coastguard Worker _so->Flush();
209*f6dc9357SAndroid Build Coastguard Worker
210*f6dc9357SAndroid Build Coastguard Worker *_se << endl << kError << message << endl;
211*f6dc9357SAndroid Build Coastguard Worker _se->Flush();
212*f6dc9357SAndroid Build Coastguard Worker }
213*f6dc9357SAndroid Build Coastguard Worker }
214*f6dc9357SAndroid Build Coastguard Worker */
215*f6dc9357SAndroid Build Coastguard Worker
216*f6dc9357SAndroid Build Coastguard Worker
ScanError_Base(const FString & path,DWORD systemError)217*f6dc9357SAndroid Build Coastguard Worker HRESULT CCallbackConsoleBase::ScanError_Base(const FString &path, DWORD systemError)
218*f6dc9357SAndroid Build Coastguard Worker {
219*f6dc9357SAndroid Build Coastguard Worker MT_LOCK
220*f6dc9357SAndroid Build Coastguard Worker
221*f6dc9357SAndroid Build Coastguard Worker ScanErrors.AddError(path, systemError);
222*f6dc9357SAndroid Build Coastguard Worker CommonError(path, systemError, true);
223*f6dc9357SAndroid Build Coastguard Worker
224*f6dc9357SAndroid Build Coastguard Worker return S_OK;
225*f6dc9357SAndroid Build Coastguard Worker }
226*f6dc9357SAndroid Build Coastguard Worker
OpenFileError_Base(const FString & path,DWORD systemError)227*f6dc9357SAndroid Build Coastguard Worker HRESULT CCallbackConsoleBase::OpenFileError_Base(const FString &path, DWORD systemError)
228*f6dc9357SAndroid Build Coastguard Worker {
229*f6dc9357SAndroid Build Coastguard Worker MT_LOCK
230*f6dc9357SAndroid Build Coastguard Worker FailedFiles.AddError(path, systemError);
231*f6dc9357SAndroid Build Coastguard Worker NumNonOpenFiles++;
232*f6dc9357SAndroid Build Coastguard Worker /*
233*f6dc9357SAndroid Build Coastguard Worker if (systemError == ERROR_SHARING_VIOLATION)
234*f6dc9357SAndroid Build Coastguard Worker {
235*f6dc9357SAndroid Build Coastguard Worker */
236*f6dc9357SAndroid Build Coastguard Worker CommonError(path, systemError, true);
237*f6dc9357SAndroid Build Coastguard Worker return S_FALSE;
238*f6dc9357SAndroid Build Coastguard Worker /*
239*f6dc9357SAndroid Build Coastguard Worker }
240*f6dc9357SAndroid Build Coastguard Worker return systemError;
241*f6dc9357SAndroid Build Coastguard Worker */
242*f6dc9357SAndroid Build Coastguard Worker }
243*f6dc9357SAndroid Build Coastguard Worker
ReadingFileError_Base(const FString & path,DWORD systemError)244*f6dc9357SAndroid Build Coastguard Worker HRESULT CCallbackConsoleBase::ReadingFileError_Base(const FString &path, DWORD systemError)
245*f6dc9357SAndroid Build Coastguard Worker {
246*f6dc9357SAndroid Build Coastguard Worker MT_LOCK
247*f6dc9357SAndroid Build Coastguard Worker CommonError(path, systemError, false);
248*f6dc9357SAndroid Build Coastguard Worker return HRESULT_FROM_WIN32(systemError);
249*f6dc9357SAndroid Build Coastguard Worker }
250*f6dc9357SAndroid Build Coastguard Worker
ScanError(const FString & path,DWORD systemError)251*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackConsole::ScanError(const FString &path, DWORD systemError)
252*f6dc9357SAndroid Build Coastguard Worker {
253*f6dc9357SAndroid Build Coastguard Worker return ScanError_Base(path, systemError);
254*f6dc9357SAndroid Build Coastguard Worker }
255*f6dc9357SAndroid Build Coastguard Worker
256*f6dc9357SAndroid Build Coastguard Worker
PrintPropPair(AString & s,const char * name,UInt64 val)257*f6dc9357SAndroid Build Coastguard Worker static void PrintPropPair(AString &s, const char *name, UInt64 val)
258*f6dc9357SAndroid Build Coastguard Worker {
259*f6dc9357SAndroid Build Coastguard Worker char temp[32];
260*f6dc9357SAndroid Build Coastguard Worker ConvertUInt64ToString(val, temp);
261*f6dc9357SAndroid Build Coastguard Worker s += name;
262*f6dc9357SAndroid Build Coastguard Worker s += ": ";
263*f6dc9357SAndroid Build Coastguard Worker s += temp;
264*f6dc9357SAndroid Build Coastguard Worker }
265*f6dc9357SAndroid Build Coastguard Worker
266*f6dc9357SAndroid Build Coastguard Worker void PrintSize_bytes_Smart(AString &s, UInt64 val);
267*f6dc9357SAndroid Build Coastguard Worker void Print_DirItemsStat(AString &s, const CDirItemsStat &st);
268*f6dc9357SAndroid Build Coastguard Worker void Print_DirItemsStat2(AString &s, const CDirItemsStat2 &st);
269*f6dc9357SAndroid Build Coastguard Worker
FinishScanning(const CDirItemsStat & st)270*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackConsole::FinishScanning(const CDirItemsStat &st)
271*f6dc9357SAndroid Build Coastguard Worker {
272*f6dc9357SAndroid Build Coastguard Worker if (NeedPercents())
273*f6dc9357SAndroid Build Coastguard Worker {
274*f6dc9357SAndroid Build Coastguard Worker _percent.ClosePrint(true);
275*f6dc9357SAndroid Build Coastguard Worker _percent.ClearCurState();
276*f6dc9357SAndroid Build Coastguard Worker }
277*f6dc9357SAndroid Build Coastguard Worker
278*f6dc9357SAndroid Build Coastguard Worker if (_so)
279*f6dc9357SAndroid Build Coastguard Worker {
280*f6dc9357SAndroid Build Coastguard Worker AString s;
281*f6dc9357SAndroid Build Coastguard Worker Print_DirItemsStat(s, st);
282*f6dc9357SAndroid Build Coastguard Worker *_so << s << endl << endl;
283*f6dc9357SAndroid Build Coastguard Worker }
284*f6dc9357SAndroid Build Coastguard Worker return S_OK;
285*f6dc9357SAndroid Build Coastguard Worker }
286*f6dc9357SAndroid Build Coastguard Worker
287*f6dc9357SAndroid Build Coastguard Worker static const char * const k_StdOut_ArcName = "StdOut";
288*f6dc9357SAndroid Build Coastguard Worker
StartOpenArchive(const wchar_t * name)289*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackConsole::StartOpenArchive(const wchar_t *name)
290*f6dc9357SAndroid Build Coastguard Worker {
291*f6dc9357SAndroid Build Coastguard Worker if (_so)
292*f6dc9357SAndroid Build Coastguard Worker {
293*f6dc9357SAndroid Build Coastguard Worker *_so << kOpenArchiveMessage;
294*f6dc9357SAndroid Build Coastguard Worker if (name)
295*f6dc9357SAndroid Build Coastguard Worker *_so << name;
296*f6dc9357SAndroid Build Coastguard Worker else
297*f6dc9357SAndroid Build Coastguard Worker *_so << k_StdOut_ArcName;
298*f6dc9357SAndroid Build Coastguard Worker *_so << endl;
299*f6dc9357SAndroid Build Coastguard Worker }
300*f6dc9357SAndroid Build Coastguard Worker return S_OK;
301*f6dc9357SAndroid Build Coastguard Worker }
302*f6dc9357SAndroid Build Coastguard Worker
StartArchive(const wchar_t * name,bool updating)303*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackConsole::StartArchive(const wchar_t *name, bool updating)
304*f6dc9357SAndroid Build Coastguard Worker {
305*f6dc9357SAndroid Build Coastguard Worker if (NeedPercents())
306*f6dc9357SAndroid Build Coastguard Worker _percent.ClosePrint(true);
307*f6dc9357SAndroid Build Coastguard Worker
308*f6dc9357SAndroid Build Coastguard Worker _percent.ClearCurState();
309*f6dc9357SAndroid Build Coastguard Worker NumNonOpenFiles = 0;
310*f6dc9357SAndroid Build Coastguard Worker
311*f6dc9357SAndroid Build Coastguard Worker if (_so)
312*f6dc9357SAndroid Build Coastguard Worker {
313*f6dc9357SAndroid Build Coastguard Worker *_so << (updating ? kUpdatingArchiveMessage : kCreatingArchiveMessage);
314*f6dc9357SAndroid Build Coastguard Worker if (name)
315*f6dc9357SAndroid Build Coastguard Worker _so->NormalizePrint_wstr_Path(name);
316*f6dc9357SAndroid Build Coastguard Worker else
317*f6dc9357SAndroid Build Coastguard Worker *_so << k_StdOut_ArcName;
318*f6dc9357SAndroid Build Coastguard Worker *_so << endl << endl;
319*f6dc9357SAndroid Build Coastguard Worker }
320*f6dc9357SAndroid Build Coastguard Worker return S_OK;
321*f6dc9357SAndroid Build Coastguard Worker }
322*f6dc9357SAndroid Build Coastguard Worker
FinishArchive(const CFinishArchiveStat & st)323*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackConsole::FinishArchive(const CFinishArchiveStat &st)
324*f6dc9357SAndroid Build Coastguard Worker {
325*f6dc9357SAndroid Build Coastguard Worker ClosePercents2();
326*f6dc9357SAndroid Build Coastguard Worker
327*f6dc9357SAndroid Build Coastguard Worker if (_so)
328*f6dc9357SAndroid Build Coastguard Worker {
329*f6dc9357SAndroid Build Coastguard Worker AString s;
330*f6dc9357SAndroid Build Coastguard Worker // Print_UInt64_and_String(s, _percent.Files == 1 ? "file" : "files", _percent.Files);
331*f6dc9357SAndroid Build Coastguard Worker PrintPropPair(s, "Files read from disk", _percent.Files - NumNonOpenFiles);
332*f6dc9357SAndroid Build Coastguard Worker s.Add_LF();
333*f6dc9357SAndroid Build Coastguard Worker s += "Archive size: ";
334*f6dc9357SAndroid Build Coastguard Worker PrintSize_bytes_Smart(s, st.OutArcFileSize);
335*f6dc9357SAndroid Build Coastguard Worker s.Add_LF();
336*f6dc9357SAndroid Build Coastguard Worker if (st.IsMultiVolMode)
337*f6dc9357SAndroid Build Coastguard Worker {
338*f6dc9357SAndroid Build Coastguard Worker s += "Volumes: ";
339*f6dc9357SAndroid Build Coastguard Worker s.Add_UInt32(st.NumVolumes);
340*f6dc9357SAndroid Build Coastguard Worker s.Add_LF();
341*f6dc9357SAndroid Build Coastguard Worker }
342*f6dc9357SAndroid Build Coastguard Worker *_so << endl;
343*f6dc9357SAndroid Build Coastguard Worker *_so << s;
344*f6dc9357SAndroid Build Coastguard Worker // *_so << endl;
345*f6dc9357SAndroid Build Coastguard Worker }
346*f6dc9357SAndroid Build Coastguard Worker
347*f6dc9357SAndroid Build Coastguard Worker return S_OK;
348*f6dc9357SAndroid Build Coastguard Worker }
349*f6dc9357SAndroid Build Coastguard Worker
WriteSfx(const wchar_t * name,UInt64 size)350*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackConsole::WriteSfx(const wchar_t *name, UInt64 size)
351*f6dc9357SAndroid Build Coastguard Worker {
352*f6dc9357SAndroid Build Coastguard Worker if (_so)
353*f6dc9357SAndroid Build Coastguard Worker {
354*f6dc9357SAndroid Build Coastguard Worker *_so << "Write SFX: ";
355*f6dc9357SAndroid Build Coastguard Worker *_so << name;
356*f6dc9357SAndroid Build Coastguard Worker AString s (" : ");
357*f6dc9357SAndroid Build Coastguard Worker PrintSize_bytes_Smart(s, size);
358*f6dc9357SAndroid Build Coastguard Worker *_so << s << endl;
359*f6dc9357SAndroid Build Coastguard Worker }
360*f6dc9357SAndroid Build Coastguard Worker return S_OK;
361*f6dc9357SAndroid Build Coastguard Worker }
362*f6dc9357SAndroid Build Coastguard Worker
363*f6dc9357SAndroid Build Coastguard Worker
364*f6dc9357SAndroid Build Coastguard Worker
MoveArc_UpdateStatus()365*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackConsole::MoveArc_UpdateStatus()
366*f6dc9357SAndroid Build Coastguard Worker {
367*f6dc9357SAndroid Build Coastguard Worker if (NeedPercents())
368*f6dc9357SAndroid Build Coastguard Worker {
369*f6dc9357SAndroid Build Coastguard Worker AString &s = _percent.Command;
370*f6dc9357SAndroid Build Coastguard Worker s = " : ";
371*f6dc9357SAndroid Build Coastguard Worker s.Add_UInt64(_arcMoving_percents);
372*f6dc9357SAndroid Build Coastguard Worker s.Add_Char('%');
373*f6dc9357SAndroid Build Coastguard Worker const bool totalDefined = (_arcMoving_total != 0 && _arcMoving_total != (UInt64)(Int64)-1);
374*f6dc9357SAndroid Build Coastguard Worker if (_arcMoving_current != 0 || totalDefined)
375*f6dc9357SAndroid Build Coastguard Worker {
376*f6dc9357SAndroid Build Coastguard Worker s += " : ";
377*f6dc9357SAndroid Build Coastguard Worker s.Add_UInt64(_arcMoving_current >> 20);
378*f6dc9357SAndroid Build Coastguard Worker s += " MiB";
379*f6dc9357SAndroid Build Coastguard Worker }
380*f6dc9357SAndroid Build Coastguard Worker if (totalDefined)
381*f6dc9357SAndroid Build Coastguard Worker {
382*f6dc9357SAndroid Build Coastguard Worker s += " / ";
383*f6dc9357SAndroid Build Coastguard Worker s.Add_UInt64((_arcMoving_total + ((1 << 20) - 1)) >> 20);
384*f6dc9357SAndroid Build Coastguard Worker s += " MiB";
385*f6dc9357SAndroid Build Coastguard Worker }
386*f6dc9357SAndroid Build Coastguard Worker s += " : temporary archive moving ...";
387*f6dc9357SAndroid Build Coastguard Worker _percent.Print();
388*f6dc9357SAndroid Build Coastguard Worker }
389*f6dc9357SAndroid Build Coastguard Worker
390*f6dc9357SAndroid Build Coastguard Worker // we ignore single Ctrl-C, if (_arcMoving_updateMode) mode
391*f6dc9357SAndroid Build Coastguard Worker // because we want to get good final archive instead of temp archive.
392*f6dc9357SAndroid Build Coastguard Worker if (NConsoleClose::g_BreakCounter == 1 && _arcMoving_updateMode)
393*f6dc9357SAndroid Build Coastguard Worker return S_OK;
394*f6dc9357SAndroid Build Coastguard Worker return CheckBreak();
395*f6dc9357SAndroid Build Coastguard Worker }
396*f6dc9357SAndroid Build Coastguard Worker
397*f6dc9357SAndroid Build Coastguard Worker
MoveArc_Start(const wchar_t * srcTempPath,const wchar_t * destFinalPath,UInt64 size,Int32 updateMode)398*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackConsole::MoveArc_Start(
399*f6dc9357SAndroid Build Coastguard Worker const wchar_t *srcTempPath, const wchar_t *destFinalPath,
400*f6dc9357SAndroid Build Coastguard Worker UInt64 size, Int32 updateMode)
401*f6dc9357SAndroid Build Coastguard Worker {
402*f6dc9357SAndroid Build Coastguard Worker #if 0 // 1 : for debug
403*f6dc9357SAndroid Build Coastguard Worker if (LogLevel > 0 && _so)
404*f6dc9357SAndroid Build Coastguard Worker {
405*f6dc9357SAndroid Build Coastguard Worker ClosePercents_for_so();
406*f6dc9357SAndroid Build Coastguard Worker *_so << "Temporary archive moving:" << endl;
407*f6dc9357SAndroid Build Coastguard Worker _tempU = srcTempPath;
408*f6dc9357SAndroid Build Coastguard Worker _so->Normalize_UString_Path(_tempU);
409*f6dc9357SAndroid Build Coastguard Worker _so->PrintUString(_tempU, _tempA);
410*f6dc9357SAndroid Build Coastguard Worker *_so << endl;
411*f6dc9357SAndroid Build Coastguard Worker _tempU = destFinalPath;
412*f6dc9357SAndroid Build Coastguard Worker _so->Normalize_UString_Path(_tempU);
413*f6dc9357SAndroid Build Coastguard Worker _so->PrintUString(_tempU, _tempA);
414*f6dc9357SAndroid Build Coastguard Worker *_so << endl;
415*f6dc9357SAndroid Build Coastguard Worker }
416*f6dc9357SAndroid Build Coastguard Worker #else
417*f6dc9357SAndroid Build Coastguard Worker UNUSED_VAR(srcTempPath)
418*f6dc9357SAndroid Build Coastguard Worker UNUSED_VAR(destFinalPath)
419*f6dc9357SAndroid Build Coastguard Worker #endif
420*f6dc9357SAndroid Build Coastguard Worker
421*f6dc9357SAndroid Build Coastguard Worker _arcMoving_updateMode = updateMode;
422*f6dc9357SAndroid Build Coastguard Worker _arcMoving_total = size;
423*f6dc9357SAndroid Build Coastguard Worker _arcMoving_current = 0;
424*f6dc9357SAndroid Build Coastguard Worker _arcMoving_percents = 0;
425*f6dc9357SAndroid Build Coastguard Worker return MoveArc_UpdateStatus();
426*f6dc9357SAndroid Build Coastguard Worker }
427*f6dc9357SAndroid Build Coastguard Worker
428*f6dc9357SAndroid Build Coastguard Worker
MoveArc_Progress(UInt64 totalSize,UInt64 currentSize)429*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackConsole::MoveArc_Progress(UInt64 totalSize, UInt64 currentSize)
430*f6dc9357SAndroid Build Coastguard Worker {
431*f6dc9357SAndroid Build Coastguard Worker #if 0 // 1 : for debug
432*f6dc9357SAndroid Build Coastguard Worker if (_so)
433*f6dc9357SAndroid Build Coastguard Worker {
434*f6dc9357SAndroid Build Coastguard Worker ClosePercents_for_so();
435*f6dc9357SAndroid Build Coastguard Worker *_so << totalSize << " : " << currentSize << endl;
436*f6dc9357SAndroid Build Coastguard Worker }
437*f6dc9357SAndroid Build Coastguard Worker #endif
438*f6dc9357SAndroid Build Coastguard Worker
439*f6dc9357SAndroid Build Coastguard Worker UInt64 percents = 0;
440*f6dc9357SAndroid Build Coastguard Worker if (totalSize != 0)
441*f6dc9357SAndroid Build Coastguard Worker {
442*f6dc9357SAndroid Build Coastguard Worker if (totalSize < ((UInt64)1 << 57))
443*f6dc9357SAndroid Build Coastguard Worker percents = currentSize * 100 / totalSize;
444*f6dc9357SAndroid Build Coastguard Worker else
445*f6dc9357SAndroid Build Coastguard Worker percents = currentSize / (totalSize / 100);
446*f6dc9357SAndroid Build Coastguard Worker }
447*f6dc9357SAndroid Build Coastguard Worker
448*f6dc9357SAndroid Build Coastguard Worker #ifdef _WIN32
449*f6dc9357SAndroid Build Coastguard Worker // Sleep(300); // for debug
450*f6dc9357SAndroid Build Coastguard Worker #endif
451*f6dc9357SAndroid Build Coastguard Worker // totalSize = (UInt64)(Int64)-1; // for debug
452*f6dc9357SAndroid Build Coastguard Worker
453*f6dc9357SAndroid Build Coastguard Worker if (percents == _arcMoving_percents)
454*f6dc9357SAndroid Build Coastguard Worker return CheckBreak();
455*f6dc9357SAndroid Build Coastguard Worker _arcMoving_current = currentSize;
456*f6dc9357SAndroid Build Coastguard Worker _arcMoving_total = totalSize;
457*f6dc9357SAndroid Build Coastguard Worker _arcMoving_percents = percents;
458*f6dc9357SAndroid Build Coastguard Worker return MoveArc_UpdateStatus();
459*f6dc9357SAndroid Build Coastguard Worker }
460*f6dc9357SAndroid Build Coastguard Worker
461*f6dc9357SAndroid Build Coastguard Worker
MoveArc_Finish()462*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackConsole::MoveArc_Finish()
463*f6dc9357SAndroid Build Coastguard Worker {
464*f6dc9357SAndroid Build Coastguard Worker // _arcMoving_percents = 0;
465*f6dc9357SAndroid Build Coastguard Worker if (NeedPercents())
466*f6dc9357SAndroid Build Coastguard Worker {
467*f6dc9357SAndroid Build Coastguard Worker _percent.Command.Empty();
468*f6dc9357SAndroid Build Coastguard Worker _percent.Print();
469*f6dc9357SAndroid Build Coastguard Worker }
470*f6dc9357SAndroid Build Coastguard Worker // it can return delayed user break (E_ABORT) status,
471*f6dc9357SAndroid Build Coastguard Worker // if it ignored single CTRL+C in MoveArc_Progress().
472*f6dc9357SAndroid Build Coastguard Worker return CheckBreak();
473*f6dc9357SAndroid Build Coastguard Worker }
474*f6dc9357SAndroid Build Coastguard Worker
475*f6dc9357SAndroid Build Coastguard Worker
476*f6dc9357SAndroid Build Coastguard Worker
DeletingAfterArchiving(const FString & path,bool)477*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackConsole::DeletingAfterArchiving(const FString &path, bool /* isDir */)
478*f6dc9357SAndroid Build Coastguard Worker {
479*f6dc9357SAndroid Build Coastguard Worker if (LogLevel > 0 && _so)
480*f6dc9357SAndroid Build Coastguard Worker {
481*f6dc9357SAndroid Build Coastguard Worker ClosePercents_for_so();
482*f6dc9357SAndroid Build Coastguard Worker
483*f6dc9357SAndroid Build Coastguard Worker if (!DeleteMessageWasShown)
484*f6dc9357SAndroid Build Coastguard Worker {
485*f6dc9357SAndroid Build Coastguard Worker if (_so)
486*f6dc9357SAndroid Build Coastguard Worker *_so << endl << ": Removing files after including to archive" << endl;
487*f6dc9357SAndroid Build Coastguard Worker }
488*f6dc9357SAndroid Build Coastguard Worker
489*f6dc9357SAndroid Build Coastguard Worker {
490*f6dc9357SAndroid Build Coastguard Worker {
491*f6dc9357SAndroid Build Coastguard Worker _tempA = "Removing";
492*f6dc9357SAndroid Build Coastguard Worker _tempA.Add_Space();
493*f6dc9357SAndroid Build Coastguard Worker *_so << _tempA;
494*f6dc9357SAndroid Build Coastguard Worker _tempU = fs2us(path);
495*f6dc9357SAndroid Build Coastguard Worker _so->Normalize_UString_Path(_tempU);
496*f6dc9357SAndroid Build Coastguard Worker _so->PrintUString(_tempU, _tempA);
497*f6dc9357SAndroid Build Coastguard Worker *_so << endl;
498*f6dc9357SAndroid Build Coastguard Worker if (NeedFlush)
499*f6dc9357SAndroid Build Coastguard Worker _so->Flush();
500*f6dc9357SAndroid Build Coastguard Worker }
501*f6dc9357SAndroid Build Coastguard Worker }
502*f6dc9357SAndroid Build Coastguard Worker }
503*f6dc9357SAndroid Build Coastguard Worker
504*f6dc9357SAndroid Build Coastguard Worker if (!DeleteMessageWasShown)
505*f6dc9357SAndroid Build Coastguard Worker {
506*f6dc9357SAndroid Build Coastguard Worker if (NeedPercents())
507*f6dc9357SAndroid Build Coastguard Worker {
508*f6dc9357SAndroid Build Coastguard Worker _percent.ClearCurState();
509*f6dc9357SAndroid Build Coastguard Worker }
510*f6dc9357SAndroid Build Coastguard Worker DeleteMessageWasShown = true;
511*f6dc9357SAndroid Build Coastguard Worker }
512*f6dc9357SAndroid Build Coastguard Worker else
513*f6dc9357SAndroid Build Coastguard Worker {
514*f6dc9357SAndroid Build Coastguard Worker _percent.Files++;
515*f6dc9357SAndroid Build Coastguard Worker }
516*f6dc9357SAndroid Build Coastguard Worker
517*f6dc9357SAndroid Build Coastguard Worker if (NeedPercents())
518*f6dc9357SAndroid Build Coastguard Worker {
519*f6dc9357SAndroid Build Coastguard Worker // if (!FullLog)
520*f6dc9357SAndroid Build Coastguard Worker {
521*f6dc9357SAndroid Build Coastguard Worker _percent.Command = "Removing";
522*f6dc9357SAndroid Build Coastguard Worker _percent.FileName = fs2us(path);
523*f6dc9357SAndroid Build Coastguard Worker }
524*f6dc9357SAndroid Build Coastguard Worker _percent.Print();
525*f6dc9357SAndroid Build Coastguard Worker }
526*f6dc9357SAndroid Build Coastguard Worker
527*f6dc9357SAndroid Build Coastguard Worker return S_OK;
528*f6dc9357SAndroid Build Coastguard Worker }
529*f6dc9357SAndroid Build Coastguard Worker
530*f6dc9357SAndroid Build Coastguard Worker
FinishDeletingAfterArchiving()531*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackConsole::FinishDeletingAfterArchiving()
532*f6dc9357SAndroid Build Coastguard Worker {
533*f6dc9357SAndroid Build Coastguard Worker ClosePercents2();
534*f6dc9357SAndroid Build Coastguard Worker if (_so && DeleteMessageWasShown)
535*f6dc9357SAndroid Build Coastguard Worker *_so << endl;
536*f6dc9357SAndroid Build Coastguard Worker return S_OK;
537*f6dc9357SAndroid Build Coastguard Worker }
538*f6dc9357SAndroid Build Coastguard Worker
CheckBreak()539*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackConsole::CheckBreak()
540*f6dc9357SAndroid Build Coastguard Worker {
541*f6dc9357SAndroid Build Coastguard Worker return CheckBreak2();
542*f6dc9357SAndroid Build Coastguard Worker }
543*f6dc9357SAndroid Build Coastguard Worker
544*f6dc9357SAndroid Build Coastguard Worker /*
545*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackConsole::Finalize()
546*f6dc9357SAndroid Build Coastguard Worker {
547*f6dc9357SAndroid Build Coastguard Worker // MT_LOCK
548*f6dc9357SAndroid Build Coastguard Worker return S_OK;
549*f6dc9357SAndroid Build Coastguard Worker }
550*f6dc9357SAndroid Build Coastguard Worker */
551*f6dc9357SAndroid Build Coastguard Worker
552*f6dc9357SAndroid Build Coastguard Worker
PrintToDoStat(CStdOutStream * _so,const CDirItemsStat2 & stat,const char * name)553*f6dc9357SAndroid Build Coastguard Worker void static PrintToDoStat(CStdOutStream *_so, const CDirItemsStat2 &stat, const char *name)
554*f6dc9357SAndroid Build Coastguard Worker {
555*f6dc9357SAndroid Build Coastguard Worker AString s;
556*f6dc9357SAndroid Build Coastguard Worker Print_DirItemsStat2(s, stat);
557*f6dc9357SAndroid Build Coastguard Worker *_so << name << ": " << s << endl;
558*f6dc9357SAndroid Build Coastguard Worker }
559*f6dc9357SAndroid Build Coastguard Worker
SetNumItems(const CArcToDoStat & stat)560*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackConsole::SetNumItems(const CArcToDoStat &stat)
561*f6dc9357SAndroid Build Coastguard Worker {
562*f6dc9357SAndroid Build Coastguard Worker if (_so)
563*f6dc9357SAndroid Build Coastguard Worker {
564*f6dc9357SAndroid Build Coastguard Worker ClosePercents_for_so();
565*f6dc9357SAndroid Build Coastguard Worker if (!stat.DeleteData.IsEmpty())
566*f6dc9357SAndroid Build Coastguard Worker {
567*f6dc9357SAndroid Build Coastguard Worker *_so << endl;
568*f6dc9357SAndroid Build Coastguard Worker PrintToDoStat(_so, stat.DeleteData, "Delete data from archive");
569*f6dc9357SAndroid Build Coastguard Worker }
570*f6dc9357SAndroid Build Coastguard Worker if (!stat.OldData.IsEmpty())
571*f6dc9357SAndroid Build Coastguard Worker PrintToDoStat(_so, stat.OldData, "Keep old data in archive");
572*f6dc9357SAndroid Build Coastguard Worker // if (!stat.NewData.IsEmpty())
573*f6dc9357SAndroid Build Coastguard Worker {
574*f6dc9357SAndroid Build Coastguard Worker PrintToDoStat(_so, stat.NewData, "Add new data to archive");
575*f6dc9357SAndroid Build Coastguard Worker }
576*f6dc9357SAndroid Build Coastguard Worker *_so << endl;
577*f6dc9357SAndroid Build Coastguard Worker }
578*f6dc9357SAndroid Build Coastguard Worker return S_OK;
579*f6dc9357SAndroid Build Coastguard Worker }
580*f6dc9357SAndroid Build Coastguard Worker
SetTotal(UInt64 size)581*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackConsole::SetTotal(UInt64 size)
582*f6dc9357SAndroid Build Coastguard Worker {
583*f6dc9357SAndroid Build Coastguard Worker MT_LOCK
584*f6dc9357SAndroid Build Coastguard Worker if (NeedPercents())
585*f6dc9357SAndroid Build Coastguard Worker {
586*f6dc9357SAndroid Build Coastguard Worker _percent.Total = size;
587*f6dc9357SAndroid Build Coastguard Worker _percent.Print();
588*f6dc9357SAndroid Build Coastguard Worker }
589*f6dc9357SAndroid Build Coastguard Worker return S_OK;
590*f6dc9357SAndroid Build Coastguard Worker }
591*f6dc9357SAndroid Build Coastguard Worker
SetCompleted(const UInt64 * completeValue)592*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackConsole::SetCompleted(const UInt64 *completeValue)
593*f6dc9357SAndroid Build Coastguard Worker {
594*f6dc9357SAndroid Build Coastguard Worker MT_LOCK
595*f6dc9357SAndroid Build Coastguard Worker if (completeValue)
596*f6dc9357SAndroid Build Coastguard Worker {
597*f6dc9357SAndroid Build Coastguard Worker if (NeedPercents())
598*f6dc9357SAndroid Build Coastguard Worker {
599*f6dc9357SAndroid Build Coastguard Worker _percent.Completed = *completeValue;
600*f6dc9357SAndroid Build Coastguard Worker _percent.Print();
601*f6dc9357SAndroid Build Coastguard Worker }
602*f6dc9357SAndroid Build Coastguard Worker }
603*f6dc9357SAndroid Build Coastguard Worker return CheckBreak2();
604*f6dc9357SAndroid Build Coastguard Worker }
605*f6dc9357SAndroid Build Coastguard Worker
SetRatioInfo(const UInt64 *,const UInt64 *)606*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackConsole::SetRatioInfo(const UInt64 * /* inSize */, const UInt64 * /* outSize */)
607*f6dc9357SAndroid Build Coastguard Worker {
608*f6dc9357SAndroid Build Coastguard Worker return CheckBreak2();
609*f6dc9357SAndroid Build Coastguard Worker }
610*f6dc9357SAndroid Build Coastguard Worker
PrintProgress(const wchar_t * name,bool isDir,const char * command,bool showInLog)611*f6dc9357SAndroid Build Coastguard Worker HRESULT CCallbackConsoleBase::PrintProgress(const wchar_t *name, bool isDir, const char *command, bool showInLog)
612*f6dc9357SAndroid Build Coastguard Worker {
613*f6dc9357SAndroid Build Coastguard Worker MT_LOCK
614*f6dc9357SAndroid Build Coastguard Worker
615*f6dc9357SAndroid Build Coastguard Worker bool show2 = (showInLog && _so);
616*f6dc9357SAndroid Build Coastguard Worker
617*f6dc9357SAndroid Build Coastguard Worker if (show2)
618*f6dc9357SAndroid Build Coastguard Worker {
619*f6dc9357SAndroid Build Coastguard Worker ClosePercents_for_so();
620*f6dc9357SAndroid Build Coastguard Worker
621*f6dc9357SAndroid Build Coastguard Worker _tempA = command;
622*f6dc9357SAndroid Build Coastguard Worker if (name)
623*f6dc9357SAndroid Build Coastguard Worker _tempA.Add_Space();
624*f6dc9357SAndroid Build Coastguard Worker *_so << _tempA;
625*f6dc9357SAndroid Build Coastguard Worker
626*f6dc9357SAndroid Build Coastguard Worker _tempU.Empty();
627*f6dc9357SAndroid Build Coastguard Worker if (name)
628*f6dc9357SAndroid Build Coastguard Worker {
629*f6dc9357SAndroid Build Coastguard Worker _tempU = name;
630*f6dc9357SAndroid Build Coastguard Worker if (isDir)
631*f6dc9357SAndroid Build Coastguard Worker NWindows::NFile::NName::NormalizeDirPathPrefix(_tempU);
632*f6dc9357SAndroid Build Coastguard Worker _so->Normalize_UString_Path(_tempU);
633*f6dc9357SAndroid Build Coastguard Worker }
634*f6dc9357SAndroid Build Coastguard Worker _so->PrintUString(_tempU, _tempA);
635*f6dc9357SAndroid Build Coastguard Worker *_so << endl;
636*f6dc9357SAndroid Build Coastguard Worker if (NeedFlush)
637*f6dc9357SAndroid Build Coastguard Worker _so->Flush();
638*f6dc9357SAndroid Build Coastguard Worker }
639*f6dc9357SAndroid Build Coastguard Worker
640*f6dc9357SAndroid Build Coastguard Worker if (NeedPercents())
641*f6dc9357SAndroid Build Coastguard Worker {
642*f6dc9357SAndroid Build Coastguard Worker if (PercentsNameLevel >= 1)
643*f6dc9357SAndroid Build Coastguard Worker {
644*f6dc9357SAndroid Build Coastguard Worker _percent.FileName.Empty();
645*f6dc9357SAndroid Build Coastguard Worker _percent.Command.Empty();
646*f6dc9357SAndroid Build Coastguard Worker if (PercentsNameLevel > 1 || !show2)
647*f6dc9357SAndroid Build Coastguard Worker {
648*f6dc9357SAndroid Build Coastguard Worker _percent.Command = command;
649*f6dc9357SAndroid Build Coastguard Worker if (name)
650*f6dc9357SAndroid Build Coastguard Worker _percent.FileName = name;
651*f6dc9357SAndroid Build Coastguard Worker }
652*f6dc9357SAndroid Build Coastguard Worker }
653*f6dc9357SAndroid Build Coastguard Worker _percent.Print();
654*f6dc9357SAndroid Build Coastguard Worker }
655*f6dc9357SAndroid Build Coastguard Worker
656*f6dc9357SAndroid Build Coastguard Worker return CheckBreak2();
657*f6dc9357SAndroid Build Coastguard Worker }
658*f6dc9357SAndroid Build Coastguard Worker
659*f6dc9357SAndroid Build Coastguard Worker
660*f6dc9357SAndroid Build Coastguard Worker /*
661*f6dc9357SAndroid Build Coastguard Worker void CCallbackConsoleBase::PrintInfoLine(const UString &s)
662*f6dc9357SAndroid Build Coastguard Worker {
663*f6dc9357SAndroid Build Coastguard Worker if (LogLevel < 1000)
664*f6dc9357SAndroid Build Coastguard Worker return;
665*f6dc9357SAndroid Build Coastguard Worker
666*f6dc9357SAndroid Build Coastguard Worker MT_LOCK
667*f6dc9357SAndroid Build Coastguard Worker
668*f6dc9357SAndroid Build Coastguard Worker const bool show2 = (_so != NULL);
669*f6dc9357SAndroid Build Coastguard Worker
670*f6dc9357SAndroid Build Coastguard Worker if (show2)
671*f6dc9357SAndroid Build Coastguard Worker {
672*f6dc9357SAndroid Build Coastguard Worker ClosePercents_for_so();
673*f6dc9357SAndroid Build Coastguard Worker _so->PrintUString(s, _tempA);
674*f6dc9357SAndroid Build Coastguard Worker *_so << endl;
675*f6dc9357SAndroid Build Coastguard Worker if (NeedFlush)
676*f6dc9357SAndroid Build Coastguard Worker _so->Flush();
677*f6dc9357SAndroid Build Coastguard Worker }
678*f6dc9357SAndroid Build Coastguard Worker }
679*f6dc9357SAndroid Build Coastguard Worker */
680*f6dc9357SAndroid Build Coastguard Worker
GetStream(const wchar_t * name,bool isDir,bool isAnti,UInt32 mode)681*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackConsole::GetStream(const wchar_t *name, bool isDir, bool isAnti, UInt32 mode)
682*f6dc9357SAndroid Build Coastguard Worker {
683*f6dc9357SAndroid Build Coastguard Worker if (StdOutMode)
684*f6dc9357SAndroid Build Coastguard Worker return S_OK;
685*f6dc9357SAndroid Build Coastguard Worker
686*f6dc9357SAndroid Build Coastguard Worker if (!name || name[0] == 0)
687*f6dc9357SAndroid Build Coastguard Worker name = kEmptyFileAlias;
688*f6dc9357SAndroid Build Coastguard Worker
689*f6dc9357SAndroid Build Coastguard Worker unsigned requiredLevel = 1;
690*f6dc9357SAndroid Build Coastguard Worker
691*f6dc9357SAndroid Build Coastguard Worker const char *s;
692*f6dc9357SAndroid Build Coastguard Worker if (mode == NUpdateNotifyOp::kAdd ||
693*f6dc9357SAndroid Build Coastguard Worker mode == NUpdateNotifyOp::kUpdate)
694*f6dc9357SAndroid Build Coastguard Worker {
695*f6dc9357SAndroid Build Coastguard Worker if (isAnti)
696*f6dc9357SAndroid Build Coastguard Worker s = "Anti";
697*f6dc9357SAndroid Build Coastguard Worker else if (mode == NUpdateNotifyOp::kAdd)
698*f6dc9357SAndroid Build Coastguard Worker s = "+";
699*f6dc9357SAndroid Build Coastguard Worker else
700*f6dc9357SAndroid Build Coastguard Worker s = "U";
701*f6dc9357SAndroid Build Coastguard Worker }
702*f6dc9357SAndroid Build Coastguard Worker else
703*f6dc9357SAndroid Build Coastguard Worker {
704*f6dc9357SAndroid Build Coastguard Worker requiredLevel = 3;
705*f6dc9357SAndroid Build Coastguard Worker if (mode == NUpdateNotifyOp::kAnalyze)
706*f6dc9357SAndroid Build Coastguard Worker s = "A";
707*f6dc9357SAndroid Build Coastguard Worker else
708*f6dc9357SAndroid Build Coastguard Worker s = "Reading";
709*f6dc9357SAndroid Build Coastguard Worker }
710*f6dc9357SAndroid Build Coastguard Worker
711*f6dc9357SAndroid Build Coastguard Worker return PrintProgress(name, isDir, s, LogLevel >= requiredLevel);
712*f6dc9357SAndroid Build Coastguard Worker }
713*f6dc9357SAndroid Build Coastguard Worker
OpenFileError(const FString & path,DWORD systemError)714*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackConsole::OpenFileError(const FString &path, DWORD systemError)
715*f6dc9357SAndroid Build Coastguard Worker {
716*f6dc9357SAndroid Build Coastguard Worker return OpenFileError_Base(path, systemError);
717*f6dc9357SAndroid Build Coastguard Worker }
718*f6dc9357SAndroid Build Coastguard Worker
ReadingFileError(const FString & path,DWORD systemError)719*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackConsole::ReadingFileError(const FString &path, DWORD systemError)
720*f6dc9357SAndroid Build Coastguard Worker {
721*f6dc9357SAndroid Build Coastguard Worker return ReadingFileError_Base(path, systemError);
722*f6dc9357SAndroid Build Coastguard Worker }
723*f6dc9357SAndroid Build Coastguard Worker
SetOperationResult(Int32)724*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackConsole::SetOperationResult(Int32 /* opRes */)
725*f6dc9357SAndroid Build Coastguard Worker {
726*f6dc9357SAndroid Build Coastguard Worker MT_LOCK
727*f6dc9357SAndroid Build Coastguard Worker _percent.Files++;
728*f6dc9357SAndroid Build Coastguard Worker /*
729*f6dc9357SAndroid Build Coastguard Worker if (opRes != NArchive::NUpdate::NOperationResult::kOK)
730*f6dc9357SAndroid Build Coastguard Worker {
731*f6dc9357SAndroid Build Coastguard Worker if (opRes == NArchive::NUpdate::NOperationResult::kError_FileChanged)
732*f6dc9357SAndroid Build Coastguard Worker {
733*f6dc9357SAndroid Build Coastguard Worker CommonError("Input file changed");
734*f6dc9357SAndroid Build Coastguard Worker }
735*f6dc9357SAndroid Build Coastguard Worker }
736*f6dc9357SAndroid Build Coastguard Worker */
737*f6dc9357SAndroid Build Coastguard Worker return S_OK;
738*f6dc9357SAndroid Build Coastguard Worker }
739*f6dc9357SAndroid Build Coastguard Worker
740*f6dc9357SAndroid Build Coastguard Worker void SetExtractErrorMessage(Int32 opRes, Int32 encrypted, AString &dest);
741*f6dc9357SAndroid Build Coastguard Worker
ReportExtractResult(Int32 opRes,Int32 isEncrypted,const wchar_t * name)742*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackConsole::ReportExtractResult(Int32 opRes, Int32 isEncrypted, const wchar_t *name)
743*f6dc9357SAndroid Build Coastguard Worker {
744*f6dc9357SAndroid Build Coastguard Worker // if (StdOutMode) return S_OK;
745*f6dc9357SAndroid Build Coastguard Worker
746*f6dc9357SAndroid Build Coastguard Worker if (opRes != NArchive::NExtract::NOperationResult::kOK)
747*f6dc9357SAndroid Build Coastguard Worker {
748*f6dc9357SAndroid Build Coastguard Worker ClosePercents2();
749*f6dc9357SAndroid Build Coastguard Worker
750*f6dc9357SAndroid Build Coastguard Worker if (_se)
751*f6dc9357SAndroid Build Coastguard Worker {
752*f6dc9357SAndroid Build Coastguard Worker if (_so)
753*f6dc9357SAndroid Build Coastguard Worker _so->Flush();
754*f6dc9357SAndroid Build Coastguard Worker
755*f6dc9357SAndroid Build Coastguard Worker AString s;
756*f6dc9357SAndroid Build Coastguard Worker SetExtractErrorMessage(opRes, isEncrypted, s);
757*f6dc9357SAndroid Build Coastguard Worker *_se << s << " : " << endl;
758*f6dc9357SAndroid Build Coastguard Worker _se->NormalizePrint_wstr_Path(name);
759*f6dc9357SAndroid Build Coastguard Worker *_se << endl << endl;
760*f6dc9357SAndroid Build Coastguard Worker _se->Flush();
761*f6dc9357SAndroid Build Coastguard Worker }
762*f6dc9357SAndroid Build Coastguard Worker return S_OK;
763*f6dc9357SAndroid Build Coastguard Worker }
764*f6dc9357SAndroid Build Coastguard Worker return S_OK;
765*f6dc9357SAndroid Build Coastguard Worker }
766*f6dc9357SAndroid Build Coastguard Worker
767*f6dc9357SAndroid Build Coastguard Worker
ReportUpdateOperation(UInt32 op,const wchar_t * name,bool isDir)768*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackConsole::ReportUpdateOperation(UInt32 op, const wchar_t *name, bool isDir)
769*f6dc9357SAndroid Build Coastguard Worker {
770*f6dc9357SAndroid Build Coastguard Worker // if (StdOutMode) return S_OK;
771*f6dc9357SAndroid Build Coastguard Worker
772*f6dc9357SAndroid Build Coastguard Worker char temp[16];
773*f6dc9357SAndroid Build Coastguard Worker const char *s;
774*f6dc9357SAndroid Build Coastguard Worker
775*f6dc9357SAndroid Build Coastguard Worker unsigned requiredLevel = 1;
776*f6dc9357SAndroid Build Coastguard Worker
777*f6dc9357SAndroid Build Coastguard Worker switch (op)
778*f6dc9357SAndroid Build Coastguard Worker {
779*f6dc9357SAndroid Build Coastguard Worker case NUpdateNotifyOp::kAdd: s = "+"; break;
780*f6dc9357SAndroid Build Coastguard Worker case NUpdateNotifyOp::kUpdate: s = "U"; break;
781*f6dc9357SAndroid Build Coastguard Worker case NUpdateNotifyOp::kAnalyze: s = "A"; requiredLevel = 3; break;
782*f6dc9357SAndroid Build Coastguard Worker case NUpdateNotifyOp::kReplicate: s = "="; requiredLevel = 3; break;
783*f6dc9357SAndroid Build Coastguard Worker case NUpdateNotifyOp::kRepack: s = "R"; requiredLevel = 2; break;
784*f6dc9357SAndroid Build Coastguard Worker case NUpdateNotifyOp::kSkip: s = "."; requiredLevel = 2; break;
785*f6dc9357SAndroid Build Coastguard Worker case NUpdateNotifyOp::kDelete: s = "D"; requiredLevel = 3; break;
786*f6dc9357SAndroid Build Coastguard Worker case NUpdateNotifyOp::kHeader: s = "Header creation"; requiredLevel = 100; break;
787*f6dc9357SAndroid Build Coastguard Worker case NUpdateNotifyOp::kInFileChanged: s = "Size of input file was changed:"; requiredLevel = 10; break;
788*f6dc9357SAndroid Build Coastguard Worker // case NUpdateNotifyOp::kOpFinished: s = "Finished"; requiredLevel = 100; break;
789*f6dc9357SAndroid Build Coastguard Worker default:
790*f6dc9357SAndroid Build Coastguard Worker {
791*f6dc9357SAndroid Build Coastguard Worker temp[0] = 'o';
792*f6dc9357SAndroid Build Coastguard Worker temp[1] = 'p';
793*f6dc9357SAndroid Build Coastguard Worker ConvertUInt64ToString(op, temp + 2);
794*f6dc9357SAndroid Build Coastguard Worker s = temp;
795*f6dc9357SAndroid Build Coastguard Worker }
796*f6dc9357SAndroid Build Coastguard Worker }
797*f6dc9357SAndroid Build Coastguard Worker
798*f6dc9357SAndroid Build Coastguard Worker return PrintProgress(name, isDir, s, LogLevel >= requiredLevel);
799*f6dc9357SAndroid Build Coastguard Worker }
800*f6dc9357SAndroid Build Coastguard Worker
801*f6dc9357SAndroid Build Coastguard Worker /*
802*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackConsole::SetPassword(const UString &
803*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_NO_CRYPTO
804*f6dc9357SAndroid Build Coastguard Worker password
805*f6dc9357SAndroid Build Coastguard Worker #endif
806*f6dc9357SAndroid Build Coastguard Worker )
807*f6dc9357SAndroid Build Coastguard Worker {
808*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_NO_CRYPTO
809*f6dc9357SAndroid Build Coastguard Worker PasswordIsDefined = true;
810*f6dc9357SAndroid Build Coastguard Worker Password = password;
811*f6dc9357SAndroid Build Coastguard Worker #endif
812*f6dc9357SAndroid Build Coastguard Worker return S_OK;
813*f6dc9357SAndroid Build Coastguard Worker }
814*f6dc9357SAndroid Build Coastguard Worker */
815*f6dc9357SAndroid Build Coastguard Worker
CryptoGetTextPassword2(Int32 * passwordIsDefined,BSTR * password)816*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackConsole::CryptoGetTextPassword2(Int32 *passwordIsDefined, BSTR *password)
817*f6dc9357SAndroid Build Coastguard Worker {
818*f6dc9357SAndroid Build Coastguard Worker COM_TRY_BEGIN
819*f6dc9357SAndroid Build Coastguard Worker
820*f6dc9357SAndroid Build Coastguard Worker *password = NULL;
821*f6dc9357SAndroid Build Coastguard Worker
822*f6dc9357SAndroid Build Coastguard Worker #ifdef Z7_NO_CRYPTO
823*f6dc9357SAndroid Build Coastguard Worker
824*f6dc9357SAndroid Build Coastguard Worker *passwordIsDefined = false;
825*f6dc9357SAndroid Build Coastguard Worker return S_OK;
826*f6dc9357SAndroid Build Coastguard Worker
827*f6dc9357SAndroid Build Coastguard Worker #else
828*f6dc9357SAndroid Build Coastguard Worker
829*f6dc9357SAndroid Build Coastguard Worker if (!PasswordIsDefined)
830*f6dc9357SAndroid Build Coastguard Worker {
831*f6dc9357SAndroid Build Coastguard Worker if (AskPassword)
832*f6dc9357SAndroid Build Coastguard Worker {
833*f6dc9357SAndroid Build Coastguard Worker RINOK(GetPassword_HRESULT(_so, Password))
834*f6dc9357SAndroid Build Coastguard Worker PasswordIsDefined = true;
835*f6dc9357SAndroid Build Coastguard Worker }
836*f6dc9357SAndroid Build Coastguard Worker }
837*f6dc9357SAndroid Build Coastguard Worker *passwordIsDefined = BoolToInt(PasswordIsDefined);
838*f6dc9357SAndroid Build Coastguard Worker return StringToBstr(Password, password);
839*f6dc9357SAndroid Build Coastguard Worker
840*f6dc9357SAndroid Build Coastguard Worker #endif
841*f6dc9357SAndroid Build Coastguard Worker
842*f6dc9357SAndroid Build Coastguard Worker COM_TRY_END
843*f6dc9357SAndroid Build Coastguard Worker }
844*f6dc9357SAndroid Build Coastguard Worker
CryptoGetTextPassword(BSTR * password)845*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackConsole::CryptoGetTextPassword(BSTR *password)
846*f6dc9357SAndroid Build Coastguard Worker {
847*f6dc9357SAndroid Build Coastguard Worker COM_TRY_BEGIN
848*f6dc9357SAndroid Build Coastguard Worker
849*f6dc9357SAndroid Build Coastguard Worker *password = NULL;
850*f6dc9357SAndroid Build Coastguard Worker
851*f6dc9357SAndroid Build Coastguard Worker #ifdef Z7_NO_CRYPTO
852*f6dc9357SAndroid Build Coastguard Worker
853*f6dc9357SAndroid Build Coastguard Worker return E_NOTIMPL;
854*f6dc9357SAndroid Build Coastguard Worker
855*f6dc9357SAndroid Build Coastguard Worker #else
856*f6dc9357SAndroid Build Coastguard Worker
857*f6dc9357SAndroid Build Coastguard Worker if (!PasswordIsDefined)
858*f6dc9357SAndroid Build Coastguard Worker {
859*f6dc9357SAndroid Build Coastguard Worker {
860*f6dc9357SAndroid Build Coastguard Worker RINOK(GetPassword_HRESULT(_so, Password))
861*f6dc9357SAndroid Build Coastguard Worker PasswordIsDefined = true;
862*f6dc9357SAndroid Build Coastguard Worker }
863*f6dc9357SAndroid Build Coastguard Worker }
864*f6dc9357SAndroid Build Coastguard Worker return StringToBstr(Password, password);
865*f6dc9357SAndroid Build Coastguard Worker
866*f6dc9357SAndroid Build Coastguard Worker #endif
867*f6dc9357SAndroid Build Coastguard Worker COM_TRY_END
868*f6dc9357SAndroid Build Coastguard Worker }
869*f6dc9357SAndroid Build Coastguard Worker
ShowDeleteFile(const wchar_t * name,bool isDir)870*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackConsole::ShowDeleteFile(const wchar_t *name, bool isDir)
871*f6dc9357SAndroid Build Coastguard Worker {
872*f6dc9357SAndroid Build Coastguard Worker if (StdOutMode)
873*f6dc9357SAndroid Build Coastguard Worker return S_OK;
874*f6dc9357SAndroid Build Coastguard Worker
875*f6dc9357SAndroid Build Coastguard Worker if (LogLevel > 7)
876*f6dc9357SAndroid Build Coastguard Worker {
877*f6dc9357SAndroid Build Coastguard Worker if (!name || name[0] == 0)
878*f6dc9357SAndroid Build Coastguard Worker name = kEmptyFileAlias;
879*f6dc9357SAndroid Build Coastguard Worker return PrintProgress(name, isDir, "D", true);
880*f6dc9357SAndroid Build Coastguard Worker }
881*f6dc9357SAndroid Build Coastguard Worker return S_OK;
882*f6dc9357SAndroid Build Coastguard Worker }
883*f6dc9357SAndroid Build Coastguard Worker
884*f6dc9357SAndroid Build Coastguard Worker /*
885*f6dc9357SAndroid Build Coastguard Worker void GetPropName(PROPID propID, const wchar_t *name, AString &nameA, UString &nameU);
886*f6dc9357SAndroid Build Coastguard Worker
887*f6dc9357SAndroid Build Coastguard Worker static void GetPropName(PROPID propID, UString &nameU)
888*f6dc9357SAndroid Build Coastguard Worker {
889*f6dc9357SAndroid Build Coastguard Worker AString nameA;
890*f6dc9357SAndroid Build Coastguard Worker GetPropName(propID, NULL, nameA, nameU);
891*f6dc9357SAndroid Build Coastguard Worker // if (!nameA.IsEmpty())
892*f6dc9357SAndroid Build Coastguard Worker nameU = nameA;
893*f6dc9357SAndroid Build Coastguard Worker }
894*f6dc9357SAndroid Build Coastguard Worker
895*f6dc9357SAndroid Build Coastguard Worker
896*f6dc9357SAndroid Build Coastguard Worker static void AddPropNamePrefix(UString &s, PROPID propID)
897*f6dc9357SAndroid Build Coastguard Worker {
898*f6dc9357SAndroid Build Coastguard Worker UString name;
899*f6dc9357SAndroid Build Coastguard Worker GetPropName(propID, name);
900*f6dc9357SAndroid Build Coastguard Worker s += name;
901*f6dc9357SAndroid Build Coastguard Worker s += " = ";
902*f6dc9357SAndroid Build Coastguard Worker }
903*f6dc9357SAndroid Build Coastguard Worker
904*f6dc9357SAndroid Build Coastguard Worker void CCallbackConsoleBase::PrintPropInfo(UString &s, PROPID propID, const PROPVARIANT *value)
905*f6dc9357SAndroid Build Coastguard Worker {
906*f6dc9357SAndroid Build Coastguard Worker AddPropNamePrefix(s, propID);
907*f6dc9357SAndroid Build Coastguard Worker {
908*f6dc9357SAndroid Build Coastguard Worker UString dest;
909*f6dc9357SAndroid Build Coastguard Worker const int level = 9; // we show up to ns precision level
910*f6dc9357SAndroid Build Coastguard Worker ConvertPropertyToString2(dest, *value, propID, level);
911*f6dc9357SAndroid Build Coastguard Worker s += dest;
912*f6dc9357SAndroid Build Coastguard Worker }
913*f6dc9357SAndroid Build Coastguard Worker PrintInfoLine(s);
914*f6dc9357SAndroid Build Coastguard Worker }
915*f6dc9357SAndroid Build Coastguard Worker
916*f6dc9357SAndroid Build Coastguard Worker static void Add_IndexType_Index(UString &s, UInt32 indexType, UInt32 index)
917*f6dc9357SAndroid Build Coastguard Worker {
918*f6dc9357SAndroid Build Coastguard Worker if (indexType == NArchive::NEventIndexType::kArcProp)
919*f6dc9357SAndroid Build Coastguard Worker {
920*f6dc9357SAndroid Build Coastguard Worker }
921*f6dc9357SAndroid Build Coastguard Worker else
922*f6dc9357SAndroid Build Coastguard Worker {
923*f6dc9357SAndroid Build Coastguard Worker if (indexType == NArchive::NEventIndexType::kBlockIndex)
924*f6dc9357SAndroid Build Coastguard Worker {
925*f6dc9357SAndroid Build Coastguard Worker s += "#";
926*f6dc9357SAndroid Build Coastguard Worker }
927*f6dc9357SAndroid Build Coastguard Worker else if (indexType == NArchive::NEventIndexType::kOutArcIndex)
928*f6dc9357SAndroid Build Coastguard Worker {
929*f6dc9357SAndroid Build Coastguard Worker }
930*f6dc9357SAndroid Build Coastguard Worker else
931*f6dc9357SAndroid Build Coastguard Worker {
932*f6dc9357SAndroid Build Coastguard Worker s += "indexType_";
933*f6dc9357SAndroid Build Coastguard Worker s.Add_UInt32(indexType);
934*f6dc9357SAndroid Build Coastguard Worker s.Add_Space();
935*f6dc9357SAndroid Build Coastguard Worker }
936*f6dc9357SAndroid Build Coastguard Worker s.Add_UInt32(index);
937*f6dc9357SAndroid Build Coastguard Worker }
938*f6dc9357SAndroid Build Coastguard Worker s += ": ";
939*f6dc9357SAndroid Build Coastguard Worker }
940*f6dc9357SAndroid Build Coastguard Worker
941*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackConsole::ReportProp(UInt32 indexType, UInt32 index, PROPID propID, const PROPVARIANT *value)
942*f6dc9357SAndroid Build Coastguard Worker {
943*f6dc9357SAndroid Build Coastguard Worker UString s;
944*f6dc9357SAndroid Build Coastguard Worker Add_IndexType_Index(s, indexType, index);
945*f6dc9357SAndroid Build Coastguard Worker PrintPropInfo(s, propID, value);
946*f6dc9357SAndroid Build Coastguard Worker return S_OK;
947*f6dc9357SAndroid Build Coastguard Worker }
948*f6dc9357SAndroid Build Coastguard Worker
949*f6dc9357SAndroid Build Coastguard Worker static inline char GetHex(Byte value)
950*f6dc9357SAndroid Build Coastguard Worker {
951*f6dc9357SAndroid Build Coastguard Worker return (char)((value < 10) ? ('0' + value) : ('a' + (value - 10)));
952*f6dc9357SAndroid Build Coastguard Worker }
953*f6dc9357SAndroid Build Coastguard Worker
954*f6dc9357SAndroid Build Coastguard Worker static void AddHexToString(UString &dest, const Byte *data, UInt32 size)
955*f6dc9357SAndroid Build Coastguard Worker {
956*f6dc9357SAndroid Build Coastguard Worker for (UInt32 i = 0; i < size; i++)
957*f6dc9357SAndroid Build Coastguard Worker {
958*f6dc9357SAndroid Build Coastguard Worker Byte b = data[i];
959*f6dc9357SAndroid Build Coastguard Worker dest += GetHex((Byte)((b >> 4) & 0xF));
960*f6dc9357SAndroid Build Coastguard Worker dest += GetHex((Byte)(b & 0xF));
961*f6dc9357SAndroid Build Coastguard Worker }
962*f6dc9357SAndroid Build Coastguard Worker }
963*f6dc9357SAndroid Build Coastguard Worker
964*f6dc9357SAndroid Build Coastguard Worker void HashHexToString(char *dest, const Byte *data, UInt32 size);
965*f6dc9357SAndroid Build Coastguard Worker
966*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackConsole::ReportRawProp(UInt32 indexType, UInt32 index,
967*f6dc9357SAndroid Build Coastguard Worker PROPID propID, const void *data, UInt32 dataSize, UInt32 propType)
968*f6dc9357SAndroid Build Coastguard Worker {
969*f6dc9357SAndroid Build Coastguard Worker UString s;
970*f6dc9357SAndroid Build Coastguard Worker propType = propType;
971*f6dc9357SAndroid Build Coastguard Worker Add_IndexType_Index(s, indexType, index);
972*f6dc9357SAndroid Build Coastguard Worker AddPropNamePrefix(s, propID);
973*f6dc9357SAndroid Build Coastguard Worker if (propID == kpidChecksum)
974*f6dc9357SAndroid Build Coastguard Worker {
975*f6dc9357SAndroid Build Coastguard Worker char temp[k_HashCalc_DigestSize_Max + 8];
976*f6dc9357SAndroid Build Coastguard Worker HashHexToString(temp, (const Byte *)data, dataSize);
977*f6dc9357SAndroid Build Coastguard Worker s += temp;
978*f6dc9357SAndroid Build Coastguard Worker }
979*f6dc9357SAndroid Build Coastguard Worker else
980*f6dc9357SAndroid Build Coastguard Worker AddHexToString(s, (const Byte *)data, dataSize);
981*f6dc9357SAndroid Build Coastguard Worker PrintInfoLine(s);
982*f6dc9357SAndroid Build Coastguard Worker return S_OK;
983*f6dc9357SAndroid Build Coastguard Worker }
984*f6dc9357SAndroid Build Coastguard Worker
985*f6dc9357SAndroid Build Coastguard Worker HRESULT CUpdateCallbackConsole::ReportFinished(UInt32 indexType, UInt32 index, Int32 opRes)
986*f6dc9357SAndroid Build Coastguard Worker {
987*f6dc9357SAndroid Build Coastguard Worker UString s;
988*f6dc9357SAndroid Build Coastguard Worker Add_IndexType_Index(s, indexType, index);
989*f6dc9357SAndroid Build Coastguard Worker s += "finished";
990*f6dc9357SAndroid Build Coastguard Worker if (opRes != NArchive::NUpdate::NOperationResult::kOK)
991*f6dc9357SAndroid Build Coastguard Worker {
992*f6dc9357SAndroid Build Coastguard Worker s += ": ";
993*f6dc9357SAndroid Build Coastguard Worker s.Add_UInt32(opRes);
994*f6dc9357SAndroid Build Coastguard Worker }
995*f6dc9357SAndroid Build Coastguard Worker PrintInfoLine(s);
996*f6dc9357SAndroid Build Coastguard Worker return S_OK;
997*f6dc9357SAndroid Build Coastguard Worker }
998*f6dc9357SAndroid Build Coastguard Worker */
999