1370b324cSopenharmony_ci// UpdateCallbackConsole.cpp
2370b324cSopenharmony_ci
3370b324cSopenharmony_ci#include "StdAfx.h"
4370b324cSopenharmony_ci
5370b324cSopenharmony_ci#include "../../../Common/IntToString.h"
6370b324cSopenharmony_ci
7370b324cSopenharmony_ci#include "../../../Windows/ErrorMsg.h"
8370b324cSopenharmony_ci#include "../../../Windows/FileName.h"
9370b324cSopenharmony_ci
10370b324cSopenharmony_ci#ifndef Z7_ST
11370b324cSopenharmony_ci#include "../../../Windows/Synchronization.h"
12370b324cSopenharmony_ci#endif
13370b324cSopenharmony_ci
14370b324cSopenharmony_ci// #include "../Common/PropIDUtils.h"
15370b324cSopenharmony_ci
16370b324cSopenharmony_ci#include "ConsoleClose.h"
17370b324cSopenharmony_ci#include "UserInputUtils.h"
18370b324cSopenharmony_ci#include "UpdateCallbackConsole.h"
19370b324cSopenharmony_ci
20370b324cSopenharmony_ciusing namespace NWindows;
21370b324cSopenharmony_ci
22370b324cSopenharmony_ci#ifndef Z7_ST
23370b324cSopenharmony_cistatic NSynchronization::CCriticalSection g_CriticalSection;
24370b324cSopenharmony_ci#define MT_LOCK NSynchronization::CCriticalSectionLock lock(g_CriticalSection);
25370b324cSopenharmony_ci#else
26370b324cSopenharmony_ci#define MT_LOCK
27370b324cSopenharmony_ci#endif
28370b324cSopenharmony_ci
29370b324cSopenharmony_cistatic const wchar_t * const kEmptyFileAlias = L"[Content]";
30370b324cSopenharmony_ci
31370b324cSopenharmony_cistatic const char * const kOpenArchiveMessage = "Open archive: ";
32370b324cSopenharmony_cistatic const char * const kCreatingArchiveMessage = "Creating archive: ";
33370b324cSopenharmony_cistatic const char * const kUpdatingArchiveMessage = "Updating archive: ";
34370b324cSopenharmony_cistatic const char * const kScanningMessage = "Scanning the drive:";
35370b324cSopenharmony_ci
36370b324cSopenharmony_cistatic const char * const kError = "ERROR: ";
37370b324cSopenharmony_cistatic const char * const kWarning = "WARNING: ";
38370b324cSopenharmony_ci
39370b324cSopenharmony_cistatic HRESULT CheckBreak2()
40370b324cSopenharmony_ci{
41370b324cSopenharmony_ci  return NConsoleClose::TestBreakSignal() ? E_ABORT : S_OK;
42370b324cSopenharmony_ci}
43370b324cSopenharmony_ci
44370b324cSopenharmony_ciHRESULT Print_OpenArchive_Props(CStdOutStream &so, const CCodecs *codecs, const CArchiveLink &arcLink);
45370b324cSopenharmony_ciHRESULT Print_OpenArchive_Error(CStdOutStream &so, const CCodecs *codecs, const CArchiveLink &arcLink);
46370b324cSopenharmony_ci
47370b324cSopenharmony_civoid PrintErrorFlags(CStdOutStream &so, const char *s, UInt32 errorFlags);
48370b324cSopenharmony_ci
49370b324cSopenharmony_civoid Print_ErrorFormatIndex_Warning(CStdOutStream *_so, const CCodecs *codecs, const CArc &arc);
50370b324cSopenharmony_ci
51370b324cSopenharmony_ciHRESULT CUpdateCallbackConsole::OpenResult(
52370b324cSopenharmony_ci    const CCodecs *codecs, const CArchiveLink &arcLink,
53370b324cSopenharmony_ci    const wchar_t *name, HRESULT result)
54370b324cSopenharmony_ci{
55370b324cSopenharmony_ci  ClosePercents2();
56370b324cSopenharmony_ci
57370b324cSopenharmony_ci  FOR_VECTOR (level, arcLink.Arcs)
58370b324cSopenharmony_ci  {
59370b324cSopenharmony_ci    const CArc &arc = arcLink.Arcs[level];
60370b324cSopenharmony_ci    const CArcErrorInfo &er = arc.ErrorInfo;
61370b324cSopenharmony_ci
62370b324cSopenharmony_ci    UInt32 errorFlags = er.GetErrorFlags();
63370b324cSopenharmony_ci
64370b324cSopenharmony_ci    if (errorFlags != 0 || !er.ErrorMessage.IsEmpty())
65370b324cSopenharmony_ci    {
66370b324cSopenharmony_ci      if (_se)
67370b324cSopenharmony_ci      {
68370b324cSopenharmony_ci        *_se << endl;
69370b324cSopenharmony_ci        if (level != 0)
70370b324cSopenharmony_ci          *_se << arc.Path << endl;
71370b324cSopenharmony_ci      }
72370b324cSopenharmony_ci
73370b324cSopenharmony_ci      if (errorFlags != 0)
74370b324cSopenharmony_ci      {
75370b324cSopenharmony_ci        if (_se)
76370b324cSopenharmony_ci          PrintErrorFlags(*_se, "ERRORS:", errorFlags);
77370b324cSopenharmony_ci      }
78370b324cSopenharmony_ci
79370b324cSopenharmony_ci      if (!er.ErrorMessage.IsEmpty())
80370b324cSopenharmony_ci      {
81370b324cSopenharmony_ci        if (_se)
82370b324cSopenharmony_ci          *_se << "ERRORS:" << endl << er.ErrorMessage << endl;
83370b324cSopenharmony_ci      }
84370b324cSopenharmony_ci
85370b324cSopenharmony_ci      if (_se)
86370b324cSopenharmony_ci      {
87370b324cSopenharmony_ci        *_se << endl;
88370b324cSopenharmony_ci        _se->Flush();
89370b324cSopenharmony_ci      }
90370b324cSopenharmony_ci    }
91370b324cSopenharmony_ci
92370b324cSopenharmony_ci    UInt32 warningFlags = er.GetWarningFlags();
93370b324cSopenharmony_ci
94370b324cSopenharmony_ci    if (warningFlags != 0 || !er.WarningMessage.IsEmpty())
95370b324cSopenharmony_ci    {
96370b324cSopenharmony_ci      if (_so)
97370b324cSopenharmony_ci      {
98370b324cSopenharmony_ci        *_so << endl;
99370b324cSopenharmony_ci        if (level != 0)
100370b324cSopenharmony_ci          *_so << arc.Path << endl;
101370b324cSopenharmony_ci      }
102370b324cSopenharmony_ci
103370b324cSopenharmony_ci      if (warningFlags != 0)
104370b324cSopenharmony_ci      {
105370b324cSopenharmony_ci        if (_so)
106370b324cSopenharmony_ci          PrintErrorFlags(*_so, "WARNINGS:", warningFlags);
107370b324cSopenharmony_ci      }
108370b324cSopenharmony_ci
109370b324cSopenharmony_ci      if (!er.WarningMessage.IsEmpty())
110370b324cSopenharmony_ci      {
111370b324cSopenharmony_ci        if (_so)
112370b324cSopenharmony_ci          *_so << "WARNINGS:" << endl << er.WarningMessage << endl;
113370b324cSopenharmony_ci      }
114370b324cSopenharmony_ci
115370b324cSopenharmony_ci      if (_so)
116370b324cSopenharmony_ci      {
117370b324cSopenharmony_ci        *_so << endl;
118370b324cSopenharmony_ci        if (NeedFlush)
119370b324cSopenharmony_ci          _so->Flush();
120370b324cSopenharmony_ci      }
121370b324cSopenharmony_ci    }
122370b324cSopenharmony_ci
123370b324cSopenharmony_ci
124370b324cSopenharmony_ci    if (er.ErrorFormatIndex >= 0)
125370b324cSopenharmony_ci    {
126370b324cSopenharmony_ci      if (_so)
127370b324cSopenharmony_ci      {
128370b324cSopenharmony_ci        Print_ErrorFormatIndex_Warning(_so, codecs, arc);
129370b324cSopenharmony_ci        if (NeedFlush)
130370b324cSopenharmony_ci          _so->Flush();
131370b324cSopenharmony_ci      }
132370b324cSopenharmony_ci    }
133370b324cSopenharmony_ci  }
134370b324cSopenharmony_ci
135370b324cSopenharmony_ci  if (result == S_OK)
136370b324cSopenharmony_ci  {
137370b324cSopenharmony_ci    if (_so)
138370b324cSopenharmony_ci    {
139370b324cSopenharmony_ci      RINOK(Print_OpenArchive_Props(*_so, codecs, arcLink))
140370b324cSopenharmony_ci      *_so << endl;
141370b324cSopenharmony_ci    }
142370b324cSopenharmony_ci  }
143370b324cSopenharmony_ci  else
144370b324cSopenharmony_ci  {
145370b324cSopenharmony_ci    if (_so)
146370b324cSopenharmony_ci      _so->Flush();
147370b324cSopenharmony_ci    if (_se)
148370b324cSopenharmony_ci    {
149370b324cSopenharmony_ci      *_se << kError;
150370b324cSopenharmony_ci      _se->NormalizePrint_wstr(name);
151370b324cSopenharmony_ci      *_se << endl;
152370b324cSopenharmony_ci      HRESULT res = Print_OpenArchive_Error(*_se, codecs, arcLink);
153370b324cSopenharmony_ci      RINOK(res)
154370b324cSopenharmony_ci      _se->Flush();
155370b324cSopenharmony_ci    }
156370b324cSopenharmony_ci  }
157370b324cSopenharmony_ci
158370b324cSopenharmony_ci  return S_OK;
159370b324cSopenharmony_ci}
160370b324cSopenharmony_ci
161370b324cSopenharmony_ciHRESULT CUpdateCallbackConsole::StartScanning()
162370b324cSopenharmony_ci{
163370b324cSopenharmony_ci  if (_so)
164370b324cSopenharmony_ci    *_so << kScanningMessage << endl;
165370b324cSopenharmony_ci  _percent.Command = "Scan ";
166370b324cSopenharmony_ci  return S_OK;
167370b324cSopenharmony_ci}
168370b324cSopenharmony_ci
169370b324cSopenharmony_ciHRESULT CUpdateCallbackConsole::ScanProgress(const CDirItemsStat &st, const FString &path, bool /* isDir */)
170370b324cSopenharmony_ci{
171370b324cSopenharmony_ci  if (NeedPercents())
172370b324cSopenharmony_ci  {
173370b324cSopenharmony_ci    _percent.Files = st.NumDirs + st.NumFiles + st.NumAltStreams;
174370b324cSopenharmony_ci    _percent.Completed = st.GetTotalBytes();
175370b324cSopenharmony_ci    _percent.FileName = fs2us(path);
176370b324cSopenharmony_ci    _percent.Print();
177370b324cSopenharmony_ci  }
178370b324cSopenharmony_ci
179370b324cSopenharmony_ci  return CheckBreak();
180370b324cSopenharmony_ci}
181370b324cSopenharmony_ci
182370b324cSopenharmony_civoid CCallbackConsoleBase::CommonError(const FString &path, DWORD systemError, bool isWarning)
183370b324cSopenharmony_ci{
184370b324cSopenharmony_ci  ClosePercents2();
185370b324cSopenharmony_ci
186370b324cSopenharmony_ci  if (_se)
187370b324cSopenharmony_ci  {
188370b324cSopenharmony_ci    if (_so)
189370b324cSopenharmony_ci      _so->Flush();
190370b324cSopenharmony_ci
191370b324cSopenharmony_ci    *_se << endl << (isWarning ? kWarning : kError)
192370b324cSopenharmony_ci        << NError::MyFormatMessage(systemError)
193370b324cSopenharmony_ci        << endl;
194370b324cSopenharmony_ci    _se->NormalizePrint_UString(fs2us(path));
195370b324cSopenharmony_ci    *_se << endl << endl;
196370b324cSopenharmony_ci    _se->Flush();
197370b324cSopenharmony_ci  }
198370b324cSopenharmony_ci}
199370b324cSopenharmony_ci
200370b324cSopenharmony_ci/*
201370b324cSopenharmony_civoid CCallbackConsoleBase::CommonError(const char *message)
202370b324cSopenharmony_ci{
203370b324cSopenharmony_ci  ClosePercents2();
204370b324cSopenharmony_ci
205370b324cSopenharmony_ci  if (_se)
206370b324cSopenharmony_ci  {
207370b324cSopenharmony_ci    if (_so)
208370b324cSopenharmony_ci      _so->Flush();
209370b324cSopenharmony_ci
210370b324cSopenharmony_ci    *_se << endl << kError << message << endl;
211370b324cSopenharmony_ci    _se->Flush();
212370b324cSopenharmony_ci  }
213370b324cSopenharmony_ci}
214370b324cSopenharmony_ci*/
215370b324cSopenharmony_ci
216370b324cSopenharmony_ci
217370b324cSopenharmony_ciHRESULT CCallbackConsoleBase::ScanError_Base(const FString &path, DWORD systemError)
218370b324cSopenharmony_ci{
219370b324cSopenharmony_ci  MT_LOCK
220370b324cSopenharmony_ci
221370b324cSopenharmony_ci  ScanErrors.AddError(path, systemError);
222370b324cSopenharmony_ci  CommonError(path, systemError, true);
223370b324cSopenharmony_ci
224370b324cSopenharmony_ci  return S_OK;
225370b324cSopenharmony_ci}
226370b324cSopenharmony_ci
227370b324cSopenharmony_ciHRESULT CCallbackConsoleBase::OpenFileError_Base(const FString &path, DWORD systemError)
228370b324cSopenharmony_ci{
229370b324cSopenharmony_ci  MT_LOCK
230370b324cSopenharmony_ci  FailedFiles.AddError(path, systemError);
231370b324cSopenharmony_ci  NumNonOpenFiles++;
232370b324cSopenharmony_ci  /*
233370b324cSopenharmony_ci  if (systemError == ERROR_SHARING_VIOLATION)
234370b324cSopenharmony_ci  {
235370b324cSopenharmony_ci  */
236370b324cSopenharmony_ci    CommonError(path, systemError, true);
237370b324cSopenharmony_ci    return S_FALSE;
238370b324cSopenharmony_ci  /*
239370b324cSopenharmony_ci  }
240370b324cSopenharmony_ci  return systemError;
241370b324cSopenharmony_ci  */
242370b324cSopenharmony_ci}
243370b324cSopenharmony_ci
244370b324cSopenharmony_ciHRESULT CCallbackConsoleBase::ReadingFileError_Base(const FString &path, DWORD systemError)
245370b324cSopenharmony_ci{
246370b324cSopenharmony_ci  MT_LOCK
247370b324cSopenharmony_ci  CommonError(path, systemError, false);
248370b324cSopenharmony_ci  return HRESULT_FROM_WIN32(systemError);
249370b324cSopenharmony_ci}
250370b324cSopenharmony_ci
251370b324cSopenharmony_ciHRESULT CUpdateCallbackConsole::ScanError(const FString &path, DWORD systemError)
252370b324cSopenharmony_ci{
253370b324cSopenharmony_ci  return ScanError_Base(path, systemError);
254370b324cSopenharmony_ci}
255370b324cSopenharmony_ci
256370b324cSopenharmony_ci
257370b324cSopenharmony_cistatic void PrintPropPair(AString &s, const char *name, UInt64 val)
258370b324cSopenharmony_ci{
259370b324cSopenharmony_ci  char temp[32];
260370b324cSopenharmony_ci  ConvertUInt64ToString(val, temp);
261370b324cSopenharmony_ci  s += name;
262370b324cSopenharmony_ci  s += ": ";
263370b324cSopenharmony_ci  s += temp;
264370b324cSopenharmony_ci}
265370b324cSopenharmony_ci
266370b324cSopenharmony_civoid PrintSize_bytes_Smart(AString &s, UInt64 val);
267370b324cSopenharmony_civoid Print_DirItemsStat(AString &s, const CDirItemsStat &st);
268370b324cSopenharmony_civoid Print_DirItemsStat2(AString &s, const CDirItemsStat2 &st);
269370b324cSopenharmony_ci
270370b324cSopenharmony_ciHRESULT CUpdateCallbackConsole::FinishScanning(const CDirItemsStat &st)
271370b324cSopenharmony_ci{
272370b324cSopenharmony_ci  if (NeedPercents())
273370b324cSopenharmony_ci  {
274370b324cSopenharmony_ci    _percent.ClosePrint(true);
275370b324cSopenharmony_ci    _percent.ClearCurState();
276370b324cSopenharmony_ci  }
277370b324cSopenharmony_ci
278370b324cSopenharmony_ci  if (_so)
279370b324cSopenharmony_ci  {
280370b324cSopenharmony_ci    AString s;
281370b324cSopenharmony_ci    Print_DirItemsStat(s, st);
282370b324cSopenharmony_ci    *_so << s << endl << endl;
283370b324cSopenharmony_ci  }
284370b324cSopenharmony_ci  return S_OK;
285370b324cSopenharmony_ci}
286370b324cSopenharmony_ci
287370b324cSopenharmony_cistatic const char * const k_StdOut_ArcName = "StdOut";
288370b324cSopenharmony_ci
289370b324cSopenharmony_ciHRESULT CUpdateCallbackConsole::StartOpenArchive(const wchar_t *name)
290370b324cSopenharmony_ci{
291370b324cSopenharmony_ci  if (_so)
292370b324cSopenharmony_ci  {
293370b324cSopenharmony_ci    *_so << kOpenArchiveMessage;
294370b324cSopenharmony_ci    if (name)
295370b324cSopenharmony_ci      *_so << name;
296370b324cSopenharmony_ci    else
297370b324cSopenharmony_ci      *_so << k_StdOut_ArcName;
298370b324cSopenharmony_ci    *_so << endl;
299370b324cSopenharmony_ci  }
300370b324cSopenharmony_ci  return S_OK;
301370b324cSopenharmony_ci}
302370b324cSopenharmony_ci
303370b324cSopenharmony_ciHRESULT CUpdateCallbackConsole::StartArchive(const wchar_t *name, bool updating)
304370b324cSopenharmony_ci{
305370b324cSopenharmony_ci  if (NeedPercents())
306370b324cSopenharmony_ci    _percent.ClosePrint(true);
307370b324cSopenharmony_ci
308370b324cSopenharmony_ci  _percent.ClearCurState();
309370b324cSopenharmony_ci  NumNonOpenFiles = 0;
310370b324cSopenharmony_ci
311370b324cSopenharmony_ci  if (_so)
312370b324cSopenharmony_ci  {
313370b324cSopenharmony_ci    *_so << (updating ? kUpdatingArchiveMessage : kCreatingArchiveMessage);
314370b324cSopenharmony_ci    if (name)
315370b324cSopenharmony_ci      _so->NormalizePrint_wstr(name);
316370b324cSopenharmony_ci    else
317370b324cSopenharmony_ci      *_so << k_StdOut_ArcName;
318370b324cSopenharmony_ci   *_so << endl << endl;
319370b324cSopenharmony_ci  }
320370b324cSopenharmony_ci  return S_OK;
321370b324cSopenharmony_ci}
322370b324cSopenharmony_ci
323370b324cSopenharmony_ciHRESULT CUpdateCallbackConsole::FinishArchive(const CFinishArchiveStat &st)
324370b324cSopenharmony_ci{
325370b324cSopenharmony_ci  ClosePercents2();
326370b324cSopenharmony_ci
327370b324cSopenharmony_ci  if (_so)
328370b324cSopenharmony_ci  {
329370b324cSopenharmony_ci    AString s;
330370b324cSopenharmony_ci    // Print_UInt64_and_String(s, _percent.Files == 1 ? "file" : "files", _percent.Files);
331370b324cSopenharmony_ci    PrintPropPair(s, "Files read from disk", _percent.Files - NumNonOpenFiles);
332370b324cSopenharmony_ci    s.Add_LF();
333370b324cSopenharmony_ci    s += "Archive size: ";
334370b324cSopenharmony_ci    PrintSize_bytes_Smart(s, st.OutArcFileSize);
335370b324cSopenharmony_ci    s.Add_LF();
336370b324cSopenharmony_ci    if (st.IsMultiVolMode)
337370b324cSopenharmony_ci    {
338370b324cSopenharmony_ci      s += "Volumes: ";
339370b324cSopenharmony_ci      s.Add_UInt32(st.NumVolumes);
340370b324cSopenharmony_ci      s.Add_LF();
341370b324cSopenharmony_ci    }
342370b324cSopenharmony_ci    *_so << endl;
343370b324cSopenharmony_ci    *_so << s;
344370b324cSopenharmony_ci    // *_so << endl;
345370b324cSopenharmony_ci  }
346370b324cSopenharmony_ci
347370b324cSopenharmony_ci  return S_OK;
348370b324cSopenharmony_ci}
349370b324cSopenharmony_ci
350370b324cSopenharmony_ciHRESULT CUpdateCallbackConsole::WriteSfx(const wchar_t *name, UInt64 size)
351370b324cSopenharmony_ci{
352370b324cSopenharmony_ci  if (_so)
353370b324cSopenharmony_ci  {
354370b324cSopenharmony_ci    *_so << "Write SFX: ";
355370b324cSopenharmony_ci    *_so << name;
356370b324cSopenharmony_ci    AString s (" : ");
357370b324cSopenharmony_ci    PrintSize_bytes_Smart(s, size);
358370b324cSopenharmony_ci    *_so << s << endl;
359370b324cSopenharmony_ci  }
360370b324cSopenharmony_ci  return S_OK;
361370b324cSopenharmony_ci}
362370b324cSopenharmony_ci
363370b324cSopenharmony_ci
364370b324cSopenharmony_ciHRESULT CUpdateCallbackConsole::DeletingAfterArchiving(const FString &path, bool /* isDir */)
365370b324cSopenharmony_ci{
366370b324cSopenharmony_ci  if (LogLevel > 0 && _so)
367370b324cSopenharmony_ci  {
368370b324cSopenharmony_ci    ClosePercents_for_so();
369370b324cSopenharmony_ci
370370b324cSopenharmony_ci    if (!DeleteMessageWasShown)
371370b324cSopenharmony_ci    {
372370b324cSopenharmony_ci      if (_so)
373370b324cSopenharmony_ci        *_so << endl << ": Removing files after including to archive" << endl;
374370b324cSopenharmony_ci    }
375370b324cSopenharmony_ci
376370b324cSopenharmony_ci    {
377370b324cSopenharmony_ci      {
378370b324cSopenharmony_ci        _tempA = "Removing";
379370b324cSopenharmony_ci        _tempA.Add_Space();
380370b324cSopenharmony_ci        *_so << _tempA;
381370b324cSopenharmony_ci        _tempU = fs2us(path);
382370b324cSopenharmony_ci        _so->Normalize_UString(_tempU);
383370b324cSopenharmony_ci        _so->PrintUString(_tempU, _tempA);
384370b324cSopenharmony_ci        *_so << endl;
385370b324cSopenharmony_ci        if (NeedFlush)
386370b324cSopenharmony_ci          _so->Flush();
387370b324cSopenharmony_ci      }
388370b324cSopenharmony_ci    }
389370b324cSopenharmony_ci  }
390370b324cSopenharmony_ci
391370b324cSopenharmony_ci  if (!DeleteMessageWasShown)
392370b324cSopenharmony_ci  {
393370b324cSopenharmony_ci    if (NeedPercents())
394370b324cSopenharmony_ci    {
395370b324cSopenharmony_ci      _percent.ClearCurState();
396370b324cSopenharmony_ci    }
397370b324cSopenharmony_ci    DeleteMessageWasShown = true;
398370b324cSopenharmony_ci  }
399370b324cSopenharmony_ci  else
400370b324cSopenharmony_ci  {
401370b324cSopenharmony_ci    _percent.Files++;
402370b324cSopenharmony_ci  }
403370b324cSopenharmony_ci
404370b324cSopenharmony_ci  if (NeedPercents())
405370b324cSopenharmony_ci  {
406370b324cSopenharmony_ci    // if (!FullLog)
407370b324cSopenharmony_ci    {
408370b324cSopenharmony_ci      _percent.Command = "Removing";
409370b324cSopenharmony_ci      _percent.FileName = fs2us(path);
410370b324cSopenharmony_ci    }
411370b324cSopenharmony_ci    _percent.Print();
412370b324cSopenharmony_ci  }
413370b324cSopenharmony_ci
414370b324cSopenharmony_ci  return S_OK;
415370b324cSopenharmony_ci}
416370b324cSopenharmony_ci
417370b324cSopenharmony_ci
418370b324cSopenharmony_ciHRESULT CUpdateCallbackConsole::FinishDeletingAfterArchiving()
419370b324cSopenharmony_ci{
420370b324cSopenharmony_ci  ClosePercents2();
421370b324cSopenharmony_ci  if (_so && DeleteMessageWasShown)
422370b324cSopenharmony_ci    *_so << endl;
423370b324cSopenharmony_ci  return S_OK;
424370b324cSopenharmony_ci}
425370b324cSopenharmony_ci
426370b324cSopenharmony_ciHRESULT CUpdateCallbackConsole::CheckBreak()
427370b324cSopenharmony_ci{
428370b324cSopenharmony_ci  return CheckBreak2();
429370b324cSopenharmony_ci}
430370b324cSopenharmony_ci
431370b324cSopenharmony_ci/*
432370b324cSopenharmony_ciHRESULT CUpdateCallbackConsole::Finalize()
433370b324cSopenharmony_ci{
434370b324cSopenharmony_ci  // MT_LOCK
435370b324cSopenharmony_ci  return S_OK;
436370b324cSopenharmony_ci}
437370b324cSopenharmony_ci*/
438370b324cSopenharmony_ci
439370b324cSopenharmony_ci
440370b324cSopenharmony_civoid static PrintToDoStat(CStdOutStream *_so, const CDirItemsStat2 &stat, const char *name)
441370b324cSopenharmony_ci{
442370b324cSopenharmony_ci  AString s;
443370b324cSopenharmony_ci  Print_DirItemsStat2(s, stat);
444370b324cSopenharmony_ci  *_so << name << ": " << s << endl;
445370b324cSopenharmony_ci}
446370b324cSopenharmony_ci
447370b324cSopenharmony_ciHRESULT CUpdateCallbackConsole::SetNumItems(const CArcToDoStat &stat)
448370b324cSopenharmony_ci{
449370b324cSopenharmony_ci  if (_so)
450370b324cSopenharmony_ci  {
451370b324cSopenharmony_ci    ClosePercents_for_so();
452370b324cSopenharmony_ci    if (!stat.DeleteData.IsEmpty())
453370b324cSopenharmony_ci    {
454370b324cSopenharmony_ci      *_so << endl;
455370b324cSopenharmony_ci      PrintToDoStat(_so, stat.DeleteData, "Delete data from archive");
456370b324cSopenharmony_ci    }
457370b324cSopenharmony_ci    if (!stat.OldData.IsEmpty())
458370b324cSopenharmony_ci      PrintToDoStat(_so, stat.OldData, "Keep old data in archive");
459370b324cSopenharmony_ci    // if (!stat.NewData.IsEmpty())
460370b324cSopenharmony_ci    {
461370b324cSopenharmony_ci      PrintToDoStat(_so, stat.NewData, "Add new data to archive");
462370b324cSopenharmony_ci    }
463370b324cSopenharmony_ci    *_so << endl;
464370b324cSopenharmony_ci  }
465370b324cSopenharmony_ci  return S_OK;
466370b324cSopenharmony_ci}
467370b324cSopenharmony_ci
468370b324cSopenharmony_ciHRESULT CUpdateCallbackConsole::SetTotal(UInt64 size)
469370b324cSopenharmony_ci{
470370b324cSopenharmony_ci  MT_LOCK
471370b324cSopenharmony_ci  if (NeedPercents())
472370b324cSopenharmony_ci  {
473370b324cSopenharmony_ci    _percent.Total = size;
474370b324cSopenharmony_ci    _percent.Print();
475370b324cSopenharmony_ci  }
476370b324cSopenharmony_ci  return S_OK;
477370b324cSopenharmony_ci}
478370b324cSopenharmony_ci
479370b324cSopenharmony_ciHRESULT CUpdateCallbackConsole::SetCompleted(const UInt64 *completeValue)
480370b324cSopenharmony_ci{
481370b324cSopenharmony_ci  MT_LOCK
482370b324cSopenharmony_ci  if (completeValue)
483370b324cSopenharmony_ci  {
484370b324cSopenharmony_ci    if (NeedPercents())
485370b324cSopenharmony_ci    {
486370b324cSopenharmony_ci      _percent.Completed = *completeValue;
487370b324cSopenharmony_ci      _percent.Print();
488370b324cSopenharmony_ci    }
489370b324cSopenharmony_ci  }
490370b324cSopenharmony_ci  return CheckBreak2();
491370b324cSopenharmony_ci}
492370b324cSopenharmony_ci
493370b324cSopenharmony_ciHRESULT CUpdateCallbackConsole::SetRatioInfo(const UInt64 * /* inSize */, const UInt64 * /* outSize */)
494370b324cSopenharmony_ci{
495370b324cSopenharmony_ci  return CheckBreak2();
496370b324cSopenharmony_ci}
497370b324cSopenharmony_ci
498370b324cSopenharmony_ciHRESULT CCallbackConsoleBase::PrintProgress(const wchar_t *name, bool isDir, const char *command, bool showInLog)
499370b324cSopenharmony_ci{
500370b324cSopenharmony_ci  MT_LOCK
501370b324cSopenharmony_ci
502370b324cSopenharmony_ci  bool show2 = (showInLog && _so);
503370b324cSopenharmony_ci
504370b324cSopenharmony_ci  if (show2)
505370b324cSopenharmony_ci  {
506370b324cSopenharmony_ci    ClosePercents_for_so();
507370b324cSopenharmony_ci
508370b324cSopenharmony_ci    _tempA = command;
509370b324cSopenharmony_ci    if (name)
510370b324cSopenharmony_ci      _tempA.Add_Space();
511370b324cSopenharmony_ci    *_so << _tempA;
512370b324cSopenharmony_ci
513370b324cSopenharmony_ci    _tempU.Empty();
514370b324cSopenharmony_ci    if (name)
515370b324cSopenharmony_ci    {
516370b324cSopenharmony_ci      _tempU = name;
517370b324cSopenharmony_ci      if (isDir)
518370b324cSopenharmony_ci        NWindows::NFile::NName::NormalizeDirPathPrefix(_tempU);
519370b324cSopenharmony_ci      _so->Normalize_UString(_tempU);
520370b324cSopenharmony_ci    }
521370b324cSopenharmony_ci    _so->PrintUString(_tempU, _tempA);
522370b324cSopenharmony_ci    *_so << endl;
523370b324cSopenharmony_ci    if (NeedFlush)
524370b324cSopenharmony_ci      _so->Flush();
525370b324cSopenharmony_ci  }
526370b324cSopenharmony_ci
527370b324cSopenharmony_ci  if (NeedPercents())
528370b324cSopenharmony_ci  {
529370b324cSopenharmony_ci    if (PercentsNameLevel >= 1)
530370b324cSopenharmony_ci    {
531370b324cSopenharmony_ci      _percent.FileName.Empty();
532370b324cSopenharmony_ci      _percent.Command.Empty();
533370b324cSopenharmony_ci      if (PercentsNameLevel > 1 || !show2)
534370b324cSopenharmony_ci      {
535370b324cSopenharmony_ci        _percent.Command = command;
536370b324cSopenharmony_ci        if (name)
537370b324cSopenharmony_ci          _percent.FileName = name;
538370b324cSopenharmony_ci      }
539370b324cSopenharmony_ci    }
540370b324cSopenharmony_ci    _percent.Print();
541370b324cSopenharmony_ci  }
542370b324cSopenharmony_ci
543370b324cSopenharmony_ci  return CheckBreak2();
544370b324cSopenharmony_ci}
545370b324cSopenharmony_ci
546370b324cSopenharmony_ci
547370b324cSopenharmony_ci/*
548370b324cSopenharmony_civoid CCallbackConsoleBase::PrintInfoLine(const UString &s)
549370b324cSopenharmony_ci{
550370b324cSopenharmony_ci  if (LogLevel < 1000)
551370b324cSopenharmony_ci    return;
552370b324cSopenharmony_ci
553370b324cSopenharmony_ci  MT_LOCK
554370b324cSopenharmony_ci
555370b324cSopenharmony_ci  const bool show2 = (_so != NULL);
556370b324cSopenharmony_ci
557370b324cSopenharmony_ci  if (show2)
558370b324cSopenharmony_ci  {
559370b324cSopenharmony_ci    ClosePercents_for_so();
560370b324cSopenharmony_ci    _so->PrintUString(s, _tempA);
561370b324cSopenharmony_ci    *_so << endl;
562370b324cSopenharmony_ci    if (NeedFlush)
563370b324cSopenharmony_ci      _so->Flush();
564370b324cSopenharmony_ci  }
565370b324cSopenharmony_ci}
566370b324cSopenharmony_ci*/
567370b324cSopenharmony_ci
568370b324cSopenharmony_ciHRESULT CUpdateCallbackConsole::GetStream(const wchar_t *name, bool isDir, bool isAnti, UInt32 mode)
569370b324cSopenharmony_ci{
570370b324cSopenharmony_ci  if (StdOutMode)
571370b324cSopenharmony_ci    return S_OK;
572370b324cSopenharmony_ci
573370b324cSopenharmony_ci  if (!name || name[0] == 0)
574370b324cSopenharmony_ci    name = kEmptyFileAlias;
575370b324cSopenharmony_ci
576370b324cSopenharmony_ci  unsigned requiredLevel = 1;
577370b324cSopenharmony_ci
578370b324cSopenharmony_ci  const char *s;
579370b324cSopenharmony_ci  if (mode == NUpdateNotifyOp::kAdd ||
580370b324cSopenharmony_ci      mode == NUpdateNotifyOp::kUpdate)
581370b324cSopenharmony_ci  {
582370b324cSopenharmony_ci    if (isAnti)
583370b324cSopenharmony_ci      s = "Anti";
584370b324cSopenharmony_ci    else if (mode == NUpdateNotifyOp::kAdd)
585370b324cSopenharmony_ci      s = "+";
586370b324cSopenharmony_ci    else
587370b324cSopenharmony_ci      s = "U";
588370b324cSopenharmony_ci  }
589370b324cSopenharmony_ci  else
590370b324cSopenharmony_ci  {
591370b324cSopenharmony_ci    requiredLevel = 3;
592370b324cSopenharmony_ci    if (mode == NUpdateNotifyOp::kAnalyze)
593370b324cSopenharmony_ci      s = "A";
594370b324cSopenharmony_ci    else
595370b324cSopenharmony_ci      s = "Reading";
596370b324cSopenharmony_ci  }
597370b324cSopenharmony_ci
598370b324cSopenharmony_ci  return PrintProgress(name, isDir, s, LogLevel >= requiredLevel);
599370b324cSopenharmony_ci}
600370b324cSopenharmony_ci
601370b324cSopenharmony_ciHRESULT CUpdateCallbackConsole::OpenFileError(const FString &path, DWORD systemError)
602370b324cSopenharmony_ci{
603370b324cSopenharmony_ci  return OpenFileError_Base(path, systemError);
604370b324cSopenharmony_ci}
605370b324cSopenharmony_ci
606370b324cSopenharmony_ciHRESULT CUpdateCallbackConsole::ReadingFileError(const FString &path, DWORD systemError)
607370b324cSopenharmony_ci{
608370b324cSopenharmony_ci  return ReadingFileError_Base(path, systemError);
609370b324cSopenharmony_ci}
610370b324cSopenharmony_ci
611370b324cSopenharmony_ciHRESULT CUpdateCallbackConsole::SetOperationResult(Int32 /* opRes */)
612370b324cSopenharmony_ci{
613370b324cSopenharmony_ci  MT_LOCK
614370b324cSopenharmony_ci  _percent.Files++;
615370b324cSopenharmony_ci  /*
616370b324cSopenharmony_ci  if (opRes != NArchive::NUpdate::NOperationResult::kOK)
617370b324cSopenharmony_ci  {
618370b324cSopenharmony_ci    if (opRes == NArchive::NUpdate::NOperationResult::kError_FileChanged)
619370b324cSopenharmony_ci    {
620370b324cSopenharmony_ci      CommonError("Input file changed");
621370b324cSopenharmony_ci    }
622370b324cSopenharmony_ci  }
623370b324cSopenharmony_ci  */
624370b324cSopenharmony_ci  return S_OK;
625370b324cSopenharmony_ci}
626370b324cSopenharmony_ci
627370b324cSopenharmony_civoid SetExtractErrorMessage(Int32 opRes, Int32 encrypted, AString &dest);
628370b324cSopenharmony_ci
629370b324cSopenharmony_ciHRESULT CUpdateCallbackConsole::ReportExtractResult(Int32 opRes, Int32 isEncrypted, const wchar_t *name)
630370b324cSopenharmony_ci{
631370b324cSopenharmony_ci  // if (StdOutMode) return S_OK;
632370b324cSopenharmony_ci
633370b324cSopenharmony_ci  if (opRes != NArchive::NExtract::NOperationResult::kOK)
634370b324cSopenharmony_ci  {
635370b324cSopenharmony_ci    ClosePercents2();
636370b324cSopenharmony_ci
637370b324cSopenharmony_ci    if (_se)
638370b324cSopenharmony_ci    {
639370b324cSopenharmony_ci      if (_so)
640370b324cSopenharmony_ci        _so->Flush();
641370b324cSopenharmony_ci
642370b324cSopenharmony_ci      AString s;
643370b324cSopenharmony_ci      SetExtractErrorMessage(opRes, isEncrypted, s);
644370b324cSopenharmony_ci      *_se << s << " : " << endl;
645370b324cSopenharmony_ci      _se->NormalizePrint_wstr(name);
646370b324cSopenharmony_ci      *_se << endl << endl;
647370b324cSopenharmony_ci      _se->Flush();
648370b324cSopenharmony_ci    }
649370b324cSopenharmony_ci    return S_OK;
650370b324cSopenharmony_ci  }
651370b324cSopenharmony_ci  return S_OK;
652370b324cSopenharmony_ci}
653370b324cSopenharmony_ci
654370b324cSopenharmony_ci
655370b324cSopenharmony_ciHRESULT CUpdateCallbackConsole::ReportUpdateOperation(UInt32 op, const wchar_t *name, bool isDir)
656370b324cSopenharmony_ci{
657370b324cSopenharmony_ci  // if (StdOutMode) return S_OK;
658370b324cSopenharmony_ci
659370b324cSopenharmony_ci  char temp[16];
660370b324cSopenharmony_ci  const char *s;
661370b324cSopenharmony_ci
662370b324cSopenharmony_ci  unsigned requiredLevel = 1;
663370b324cSopenharmony_ci
664370b324cSopenharmony_ci  switch (op)
665370b324cSopenharmony_ci  {
666370b324cSopenharmony_ci    case NUpdateNotifyOp::kAdd:       s = "+"; break;
667370b324cSopenharmony_ci    case NUpdateNotifyOp::kUpdate:    s = "U"; break;
668370b324cSopenharmony_ci    case NUpdateNotifyOp::kAnalyze:   s = "A"; requiredLevel = 3; break;
669370b324cSopenharmony_ci    case NUpdateNotifyOp::kReplicate: s = "="; requiredLevel = 3; break;
670370b324cSopenharmony_ci    case NUpdateNotifyOp::kRepack:    s = "R"; requiredLevel = 2; break;
671370b324cSopenharmony_ci    case NUpdateNotifyOp::kSkip:      s = "."; requiredLevel = 2; break;
672370b324cSopenharmony_ci    case NUpdateNotifyOp::kDelete:    s = "D"; requiredLevel = 3; break;
673370b324cSopenharmony_ci    case NUpdateNotifyOp::kHeader:    s = "Header creation"; requiredLevel = 100; break;
674370b324cSopenharmony_ci    case NUpdateNotifyOp::kInFileChanged: s = "Size of input file was changed:"; requiredLevel = 10; break;
675370b324cSopenharmony_ci    // case NUpdateNotifyOp::kOpFinished:  s = "Finished"; requiredLevel = 100; break;
676370b324cSopenharmony_ci    default:
677370b324cSopenharmony_ci    {
678370b324cSopenharmony_ci      temp[0] = 'o';
679370b324cSopenharmony_ci      temp[1] = 'p';
680370b324cSopenharmony_ci      ConvertUInt64ToString(op, temp + 2);
681370b324cSopenharmony_ci      s = temp;
682370b324cSopenharmony_ci    }
683370b324cSopenharmony_ci  }
684370b324cSopenharmony_ci
685370b324cSopenharmony_ci  return PrintProgress(name, isDir, s, LogLevel >= requiredLevel);
686370b324cSopenharmony_ci}
687370b324cSopenharmony_ci
688370b324cSopenharmony_ci/*
689370b324cSopenharmony_ciHRESULT CUpdateCallbackConsole::SetPassword(const UString &
690370b324cSopenharmony_ci    #ifndef Z7_NO_CRYPTO
691370b324cSopenharmony_ci    password
692370b324cSopenharmony_ci    #endif
693370b324cSopenharmony_ci    )
694370b324cSopenharmony_ci{
695370b324cSopenharmony_ci  #ifndef Z7_NO_CRYPTO
696370b324cSopenharmony_ci  PasswordIsDefined = true;
697370b324cSopenharmony_ci  Password = password;
698370b324cSopenharmony_ci  #endif
699370b324cSopenharmony_ci  return S_OK;
700370b324cSopenharmony_ci}
701370b324cSopenharmony_ci*/
702370b324cSopenharmony_ci
703370b324cSopenharmony_ciHRESULT CUpdateCallbackConsole::CryptoGetTextPassword2(Int32 *passwordIsDefined, BSTR *password)
704370b324cSopenharmony_ci{
705370b324cSopenharmony_ci  COM_TRY_BEGIN
706370b324cSopenharmony_ci
707370b324cSopenharmony_ci  *password = NULL;
708370b324cSopenharmony_ci
709370b324cSopenharmony_ci  #ifdef Z7_NO_CRYPTO
710370b324cSopenharmony_ci
711370b324cSopenharmony_ci  *passwordIsDefined = false;
712370b324cSopenharmony_ci  return S_OK;
713370b324cSopenharmony_ci
714370b324cSopenharmony_ci  #else
715370b324cSopenharmony_ci
716370b324cSopenharmony_ci  if (!PasswordIsDefined)
717370b324cSopenharmony_ci  {
718370b324cSopenharmony_ci    if (AskPassword)
719370b324cSopenharmony_ci    {
720370b324cSopenharmony_ci      RINOK(GetPassword_HRESULT(_so, Password))
721370b324cSopenharmony_ci      PasswordIsDefined = true;
722370b324cSopenharmony_ci    }
723370b324cSopenharmony_ci  }
724370b324cSopenharmony_ci  *passwordIsDefined = BoolToInt(PasswordIsDefined);
725370b324cSopenharmony_ci  return StringToBstr(Password, password);
726370b324cSopenharmony_ci
727370b324cSopenharmony_ci  #endif
728370b324cSopenharmony_ci
729370b324cSopenharmony_ci  COM_TRY_END
730370b324cSopenharmony_ci}
731370b324cSopenharmony_ci
732370b324cSopenharmony_ciHRESULT CUpdateCallbackConsole::CryptoGetTextPassword(BSTR *password)
733370b324cSopenharmony_ci{
734370b324cSopenharmony_ci  COM_TRY_BEGIN
735370b324cSopenharmony_ci
736370b324cSopenharmony_ci  *password = NULL;
737370b324cSopenharmony_ci
738370b324cSopenharmony_ci  #ifdef Z7_NO_CRYPTO
739370b324cSopenharmony_ci
740370b324cSopenharmony_ci  return E_NOTIMPL;
741370b324cSopenharmony_ci
742370b324cSopenharmony_ci  #else
743370b324cSopenharmony_ci
744370b324cSopenharmony_ci  if (!PasswordIsDefined)
745370b324cSopenharmony_ci  {
746370b324cSopenharmony_ci    {
747370b324cSopenharmony_ci      RINOK(GetPassword_HRESULT(_so, Password))
748370b324cSopenharmony_ci      PasswordIsDefined = true;
749370b324cSopenharmony_ci    }
750370b324cSopenharmony_ci  }
751370b324cSopenharmony_ci  return StringToBstr(Password, password);
752370b324cSopenharmony_ci
753370b324cSopenharmony_ci  #endif
754370b324cSopenharmony_ci  COM_TRY_END
755370b324cSopenharmony_ci}
756370b324cSopenharmony_ci
757370b324cSopenharmony_ciHRESULT CUpdateCallbackConsole::ShowDeleteFile(const wchar_t *name, bool isDir)
758370b324cSopenharmony_ci{
759370b324cSopenharmony_ci  if (StdOutMode)
760370b324cSopenharmony_ci    return S_OK;
761370b324cSopenharmony_ci
762370b324cSopenharmony_ci  if (LogLevel > 7)
763370b324cSopenharmony_ci  {
764370b324cSopenharmony_ci    if (!name || name[0] == 0)
765370b324cSopenharmony_ci      name = kEmptyFileAlias;
766370b324cSopenharmony_ci    return PrintProgress(name, isDir, "D", true);
767370b324cSopenharmony_ci  }
768370b324cSopenharmony_ci  return S_OK;
769370b324cSopenharmony_ci}
770370b324cSopenharmony_ci
771370b324cSopenharmony_ci/*
772370b324cSopenharmony_civoid GetPropName(PROPID propID, const wchar_t *name, AString &nameA, UString &nameU);
773370b324cSopenharmony_ci
774370b324cSopenharmony_cistatic void GetPropName(PROPID propID, UString &nameU)
775370b324cSopenharmony_ci{
776370b324cSopenharmony_ci  AString nameA;
777370b324cSopenharmony_ci  GetPropName(propID, NULL, nameA, nameU);
778370b324cSopenharmony_ci  // if (!nameA.IsEmpty())
779370b324cSopenharmony_ci    nameU = nameA;
780370b324cSopenharmony_ci}
781370b324cSopenharmony_ci
782370b324cSopenharmony_ci
783370b324cSopenharmony_cistatic void AddPropNamePrefix(UString &s, PROPID propID)
784370b324cSopenharmony_ci{
785370b324cSopenharmony_ci  UString name;
786370b324cSopenharmony_ci  GetPropName(propID, name);
787370b324cSopenharmony_ci  s += name;
788370b324cSopenharmony_ci  s += " = ";
789370b324cSopenharmony_ci}
790370b324cSopenharmony_ci
791370b324cSopenharmony_civoid CCallbackConsoleBase::PrintPropInfo(UString &s, PROPID propID, const PROPVARIANT *value)
792370b324cSopenharmony_ci{
793370b324cSopenharmony_ci  AddPropNamePrefix(s, propID);
794370b324cSopenharmony_ci  {
795370b324cSopenharmony_ci    UString dest;
796370b324cSopenharmony_ci    const int level = 9; // we show up to ns precision level
797370b324cSopenharmony_ci    ConvertPropertyToString2(dest, *value, propID, level);
798370b324cSopenharmony_ci    s += dest;
799370b324cSopenharmony_ci  }
800370b324cSopenharmony_ci  PrintInfoLine(s);
801370b324cSopenharmony_ci}
802370b324cSopenharmony_ci
803370b324cSopenharmony_cistatic void Add_IndexType_Index(UString &s, UInt32 indexType, UInt32 index)
804370b324cSopenharmony_ci{
805370b324cSopenharmony_ci  if (indexType == NArchive::NEventIndexType::kArcProp)
806370b324cSopenharmony_ci  {
807370b324cSopenharmony_ci  }
808370b324cSopenharmony_ci  else
809370b324cSopenharmony_ci  {
810370b324cSopenharmony_ci    if (indexType == NArchive::NEventIndexType::kBlockIndex)
811370b324cSopenharmony_ci    {
812370b324cSopenharmony_ci      s += "#";
813370b324cSopenharmony_ci    }
814370b324cSopenharmony_ci    else if (indexType == NArchive::NEventIndexType::kOutArcIndex)
815370b324cSopenharmony_ci    {
816370b324cSopenharmony_ci    }
817370b324cSopenharmony_ci    else
818370b324cSopenharmony_ci    {
819370b324cSopenharmony_ci      s += "indexType_";
820370b324cSopenharmony_ci      s.Add_UInt32(indexType);
821370b324cSopenharmony_ci      s.Add_Space();
822370b324cSopenharmony_ci    }
823370b324cSopenharmony_ci    s.Add_UInt32(index);
824370b324cSopenharmony_ci  }
825370b324cSopenharmony_ci  s += ": ";
826370b324cSopenharmony_ci}
827370b324cSopenharmony_ci
828370b324cSopenharmony_ciHRESULT CUpdateCallbackConsole::ReportProp(UInt32 indexType, UInt32 index, PROPID propID, const PROPVARIANT *value)
829370b324cSopenharmony_ci{
830370b324cSopenharmony_ci  UString s;
831370b324cSopenharmony_ci  Add_IndexType_Index(s, indexType, index);
832370b324cSopenharmony_ci  PrintPropInfo(s, propID, value);
833370b324cSopenharmony_ci  return S_OK;
834370b324cSopenharmony_ci}
835370b324cSopenharmony_ci
836370b324cSopenharmony_cistatic inline char GetHex(Byte value)
837370b324cSopenharmony_ci{
838370b324cSopenharmony_ci  return (char)((value < 10) ? ('0' + value) : ('a' + (value - 10)));
839370b324cSopenharmony_ci}
840370b324cSopenharmony_ci
841370b324cSopenharmony_cistatic void AddHexToString(UString &dest, const Byte *data, UInt32 size)
842370b324cSopenharmony_ci{
843370b324cSopenharmony_ci  for (UInt32 i = 0; i < size; i++)
844370b324cSopenharmony_ci  {
845370b324cSopenharmony_ci    Byte b = data[i];
846370b324cSopenharmony_ci    dest += GetHex((Byte)((b >> 4) & 0xF));
847370b324cSopenharmony_ci    dest += GetHex((Byte)(b & 0xF));
848370b324cSopenharmony_ci  }
849370b324cSopenharmony_ci}
850370b324cSopenharmony_ci
851370b324cSopenharmony_civoid HashHexToString(char *dest, const Byte *data, UInt32 size);
852370b324cSopenharmony_ci
853370b324cSopenharmony_ciHRESULT CUpdateCallbackConsole::ReportRawProp(UInt32 indexType, UInt32 index,
854370b324cSopenharmony_ci    PROPID propID, const void *data, UInt32 dataSize, UInt32 propType)
855370b324cSopenharmony_ci{
856370b324cSopenharmony_ci  UString s;
857370b324cSopenharmony_ci  propType = propType;
858370b324cSopenharmony_ci  Add_IndexType_Index(s, indexType, index);
859370b324cSopenharmony_ci  AddPropNamePrefix(s, propID);
860370b324cSopenharmony_ci  if (propID == kpidChecksum)
861370b324cSopenharmony_ci  {
862370b324cSopenharmony_ci    char temp[k_HashCalc_DigestSize_Max + 8];
863370b324cSopenharmony_ci    HashHexToString(temp, (const Byte *)data, dataSize);
864370b324cSopenharmony_ci    s += temp;
865370b324cSopenharmony_ci  }
866370b324cSopenharmony_ci  else
867370b324cSopenharmony_ci    AddHexToString(s, (const Byte *)data, dataSize);
868370b324cSopenharmony_ci  PrintInfoLine(s);
869370b324cSopenharmony_ci  return S_OK;
870370b324cSopenharmony_ci}
871370b324cSopenharmony_ci
872370b324cSopenharmony_ciHRESULT CUpdateCallbackConsole::ReportFinished(UInt32 indexType, UInt32 index, Int32 opRes)
873370b324cSopenharmony_ci{
874370b324cSopenharmony_ci  UString s;
875370b324cSopenharmony_ci  Add_IndexType_Index(s, indexType, index);
876370b324cSopenharmony_ci  s += "finished";
877370b324cSopenharmony_ci  if (opRes != NArchive::NUpdate::NOperationResult::kOK)
878370b324cSopenharmony_ci  {
879370b324cSopenharmony_ci    s += ": ";
880370b324cSopenharmony_ci    s.Add_UInt32(opRes);
881370b324cSopenharmony_ci  }
882370b324cSopenharmony_ci  PrintInfoLine(s);
883370b324cSopenharmony_ci  return S_OK;
884370b324cSopenharmony_ci}
885370b324cSopenharmony_ci*/
886