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