1baa3858d3f5d128a5c8466b700098109edcad5f2repo sync// UpdateCallbackConsole.cpp 2baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 3baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#include "StdAfx.h" 4baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 5f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka#include "../../../Common/IntToString.h" 6f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 7cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#include "../../../Windows/ErrorMsg.h" 8f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 9baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#ifndef _7ZIP_ST 10cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#include "../../../Windows/Synchronization.h" 11baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#endif 12baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 13baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#include "ConsoleClose.h" 14baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#include "UserInputUtils.h" 15cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#include "UpdateCallbackConsole.h" 16baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 17baa3858d3f5d128a5c8466b700098109edcad5f2repo syncusing namespace NWindows; 18baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 19baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#ifndef _7ZIP_ST 20baa3858d3f5d128a5c8466b700098109edcad5f2repo syncstatic NSynchronization::CCriticalSection g_CriticalSection; 21baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#define MT_LOCK NSynchronization::CCriticalSectionLock lock(g_CriticalSection); 22baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#else 23baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#define MT_LOCK 24baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#endif 25baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 26baa3858d3f5d128a5c8466b700098109edcad5f2repo syncstatic const wchar_t *kEmptyFileAlias = L"[Content]"; 27baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 28f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osakastatic const char *kOpenArchiveMessage = "Open archive: "; 29f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osakastatic const char *kCreatingArchiveMessage = "Creating archive: "; 30f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osakastatic const char *kUpdatingArchiveMessage = "Updating archive: "; 31f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osakastatic const char *kScanningMessage = "Scanning the drive:"; 32baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 33f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osakastatic const char *kError = "ERROR: "; 34f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osakastatic const char *kWarning = "WARNING: "; 35baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 36f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osakastatic HRESULT CheckBreak2() 37baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 38f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka return NConsoleClose::TestBreakSignal() ? E_ABORT : S_OK; 39f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka} 40f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 41f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo OsakaHRESULT Print_OpenArchive_Props(CStdOutStream &so, const CCodecs *codecs, const CArchiveLink &arcLink); 42f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo OsakaHRESULT Print_OpenArchive_Error(CStdOutStream &so, const CCodecs *codecs, const CArchiveLink &arcLink); 43f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 44f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osakavoid PrintErrorFlags(CStdOutStream &so, const char *s, UInt32 errorFlags); 45f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 46f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osakavoid Print_ErrorFormatIndex_Warning(CStdOutStream *_so, const CCodecs *codecs, const CArc &arc); 47f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 48f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo OsakaHRESULT CUpdateCallbackConsole::OpenResult( 49f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka const CCodecs *codecs, const CArchiveLink &arcLink, 50f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka const wchar_t *name, HRESULT result) 51f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka{ 52f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka ClosePercents2(); 53f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 54f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka FOR_VECTOR (level, arcLink.Arcs) 55cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky { 56f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka const CArc &arc = arcLink.Arcs[level]; 57f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka const CArcErrorInfo &er = arc.ErrorInfo; 58f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 59f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka UInt32 errorFlags = er.GetErrorFlags(); 60f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 61f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (errorFlags != 0 || !er.ErrorMessage.IsEmpty()) 62f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka { 63f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (_se) 64f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka { 65f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka *_se << endl; 66f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (level != 0) 67f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka *_se << arc.Path << endl; 68f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka } 69f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 70f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (errorFlags != 0) 71f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka { 72f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (_se) 73f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka PrintErrorFlags(*_se, "ERRORS:", errorFlags); 74f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka } 75f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 76f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (!er.ErrorMessage.IsEmpty()) 77f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka { 78f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (_se) 79f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka *_se << "ERRORS:" << endl << er.ErrorMessage << endl; 80f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka } 81f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 82f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (_se) 83f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka { 84f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka *_se << endl; 85f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka _se->Flush(); 86f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka } 87f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka } 88f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 89f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka UInt32 warningFlags = er.GetWarningFlags(); 90f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 91f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (warningFlags != 0 || !er.WarningMessage.IsEmpty()) 92f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka { 93f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (_so) 94f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka { 95f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka *_so << endl; 96f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (level != 0) 97f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka *_so << arc.Path << endl; 98f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka } 99f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 100f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (warningFlags != 0) 101f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka { 102f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (_so) 103f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka PrintErrorFlags(*_so, "WARNINGS:", warningFlags); 104f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka } 105f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 106f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (!er.WarningMessage.IsEmpty()) 107f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka { 108f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (_so) 109f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka *_so << "WARNINGS:" << endl << er.WarningMessage << endl; 110f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka } 111f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 112f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (_so) 113f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka { 114f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka *_so << endl; 115f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (NeedFlush) 116f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka _so->Flush(); 117f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka } 118f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka } 119f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 120f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 121f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (er.ErrorFormatIndex >= 0) 122f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka { 123f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (_so) 124f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka { 125f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka Print_ErrorFormatIndex_Warning(_so, codecs, arc); 126f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (NeedFlush) 127f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka _so->Flush(); 128f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka } 129f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka } 130cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky } 131f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 132f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (result == S_OK) 133f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka { 134f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (_so) 135f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka { 136f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka RINOK(Print_OpenArchive_Props(*_so, codecs, arcLink)); 137f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka *_so << endl; 138f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka } 139f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka } 140f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka else 141f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka { 142f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (_so) 143f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka _so->Flush(); 144f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (_se) 145f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka { 146f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka *_se << kError << name << endl; 147f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka HRESULT res = Print_OpenArchive_Error(*_se, codecs, arcLink); 148f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka RINOK(res); 149f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka _se->Flush(); 150f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka } 151f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka } 152f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 153baa3858d3f5d128a5c8466b700098109edcad5f2repo sync return S_OK; 154baa3858d3f5d128a5c8466b700098109edcad5f2repo sync} 155baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 156baa3858d3f5d128a5c8466b700098109edcad5f2repo syncHRESULT CUpdateCallbackConsole::StartScanning() 157baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 158f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (_so) 159f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka *_so << kScanningMessage << endl; 160f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka _percent.Command = "Scan "; 161baa3858d3f5d128a5c8466b700098109edcad5f2repo sync return S_OK; 162baa3858d3f5d128a5c8466b700098109edcad5f2repo sync} 163baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 164f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo OsakaHRESULT CUpdateCallbackConsole::ScanProgress(const CDirItemsStat &st, const FString &path, bool /* isDir */) 165baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 166f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (NeedPercents()) 167f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka { 168f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka _percent.Files = st.NumDirs + st.NumFiles + st.NumAltStreams; 169f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka _percent.Completed = st.GetTotalBytes(); 170f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka _percent.FileName = fs2us(path); 171f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka _percent.Print(); 172f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka } 173f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 174baa3858d3f5d128a5c8466b700098109edcad5f2repo sync return CheckBreak(); 175baa3858d3f5d128a5c8466b700098109edcad5f2repo sync} 176baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 177f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osakavoid CCallbackConsoleBase::CommonError(const FString &path, DWORD systemError, bool isWarning) 178baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 179f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka ClosePercents2(); 180f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 181f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (_se) 182baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 183f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (_so) 184f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka _so->Flush(); 185f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 186f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka *_se << endl << (isWarning ? kWarning : kError) 187f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka << NError::MyFormatMessage(systemError) 188f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka << endl << fs2us(path) << endl << endl; 189f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka _se->Flush(); 190baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 191f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka} 192f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 193f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 194f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo OsakaHRESULT CCallbackConsoleBase::ScanError_Base(const FString &path, DWORD systemError) 195f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka{ 196f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka MT_LOCK 197f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 198f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka ScanErrors.AddError(path, systemError); 199f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka CommonError(path, systemError, true); 200f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 201baa3858d3f5d128a5c8466b700098109edcad5f2repo sync return S_OK; 202baa3858d3f5d128a5c8466b700098109edcad5f2repo sync} 203baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 204f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo OsakaHRESULT CCallbackConsoleBase::OpenFileError_Base(const FString &path, DWORD systemError) 205f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka{ 206f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka MT_LOCK 207f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka FailedFiles.AddError(path, systemError); 208f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka /* 209f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (systemError == ERROR_SHARING_VIOLATION) 210f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka { 211f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka */ 212f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka CommonError(path, systemError, true); 213f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka return S_FALSE; 214f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka /* 215f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka } 216f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka return systemError; 217f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka */ 218f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka} 219f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 220f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo OsakaHRESULT CCallbackConsoleBase::ReadingFileError_Base(const FString &path, DWORD systemError) 221f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka{ 222f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka MT_LOCK 223f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka CommonError(path, systemError, false); 224f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka return HRESULT_FROM_WIN32(systemError); 225f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka} 226f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 227f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo OsakaHRESULT CUpdateCallbackConsole::ScanError(const FString &path, DWORD systemError) 228f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka{ 229f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka return ScanError_Base(path, systemError); 230f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka} 231f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 232f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 233f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osakastatic void PrintPropPair(AString &s, const char *name, UInt64 val) 234cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{ 235f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka char temp[32]; 236f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka ConvertUInt64ToString(val, temp); 237f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka s += name; 238f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka s += ": "; 239f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka s += temp; 240cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky} 241cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 242f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osakavoid PrintSize_bytes_Smart(AString &s, UInt64 val); 243f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osakavoid Print_DirItemsStat(AString &s, const CDirItemsStat &st); 244f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 245f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo OsakaHRESULT CUpdateCallbackConsole::FinishScanning(const CDirItemsStat &st) 246baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 247f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (NeedPercents()) 248f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka { 249f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka _percent.ClosePrint(true); 250f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka _percent.ClearCurState(); 251f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka } 252f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 253f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (_so) 254f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka { 255f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka AString s; 256f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka Print_DirItemsStat(s, st); 257f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka *_so << s << endl << endl; 258f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka } 259f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka return S_OK; 260f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka} 261f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 262f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osakastatic const char *k_StdOut_ArcName = "StdOut"; 263f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 264f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo OsakaHRESULT CUpdateCallbackConsole::StartOpenArchive(const wchar_t *name) 265f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka{ 266f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (_so) 267f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka { 268f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka *_so << kOpenArchiveMessage; 269f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (name) 270f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka *_so << name; 271f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka else 272f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka *_so << k_StdOut_ArcName; 273f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka *_so << endl; 274f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka } 275baa3858d3f5d128a5c8466b700098109edcad5f2repo sync return S_OK; 276baa3858d3f5d128a5c8466b700098109edcad5f2repo sync} 277baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 278baa3858d3f5d128a5c8466b700098109edcad5f2repo syncHRESULT CUpdateCallbackConsole::StartArchive(const wchar_t *name, bool updating) 279baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 280f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (_so) 281f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka { 282f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka *_so << (updating ? kUpdatingArchiveMessage : kCreatingArchiveMessage); 283f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (name != 0) 284f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka *_so << name; 285f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka else 286f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka *_so << k_StdOut_ArcName; 287f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka *_so << endl << endl; 288f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka } 289baa3858d3f5d128a5c8466b700098109edcad5f2repo sync return S_OK; 290baa3858d3f5d128a5c8466b700098109edcad5f2repo sync} 291baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 292f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo OsakaHRESULT CUpdateCallbackConsole::FinishArchive(const CFinishArchiveStat &st) 293baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 294f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka ClosePercents2(); 295f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 296f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (_so) 297f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka { 298f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka AString s; 299f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka // Print_UInt64_and_String(s, _percent.Files == 1 ? "file" : "files", _percent.Files); 300f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka PrintPropPair(s, "Files read from disk", _percent.Files); 301f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka s.Add_LF(); 302f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka s += "Archive size: "; 303f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka PrintSize_bytes_Smart(s, st.OutArcFileSize); 304f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka s.Add_LF(); 305f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka *_so << endl; 306f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka *_so << s; 307f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka // *_so << endl; 308f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka } 309f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 310baa3858d3f5d128a5c8466b700098109edcad5f2repo sync return S_OK; 311baa3858d3f5d128a5c8466b700098109edcad5f2repo sync} 312baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 313f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo OsakaHRESULT CUpdateCallbackConsole::WriteSfx(const wchar_t *name, UInt64 size) 314baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 315f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (_so) 316f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka { 317f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka *_so << "Write SFX: "; 318f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka *_so << name; 319f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka AString s = " : "; 320f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka PrintSize_bytes_Smart(s, size); 321f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka *_so << s << endl; 322f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka } 323baa3858d3f5d128a5c8466b700098109edcad5f2repo sync return S_OK; 324baa3858d3f5d128a5c8466b700098109edcad5f2repo sync} 325baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 326f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 327f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo OsakaHRESULT CUpdateCallbackConsole::DeletingAfterArchiving(const FString &path, bool /* isDir */) 328baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 329f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (LogLevel > 0 && _so) 330baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 331f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka ClosePercents_for_so(); 332f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 333f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (!DeleteMessageWasShown) 334f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka { 335f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (_so) 336f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka *_so << endl << ": Removing files after including to archive" << endl; 337f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka } 338f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 339baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 340f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka { 341f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka _tempA = "Removing"; 342f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka _tempA.Add_Space(); 343f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka *_so << _tempA; 344f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka _tempU = fs2us(path); 345f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka _so->PrintUString(_tempU, _tempA); 346f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka *_so << endl; 347f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (NeedFlush) 348f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka _so->Flush(); 349f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka } 350baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 351f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka } 352f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 353f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (!DeleteMessageWasShown) 354f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka { 355f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (NeedPercents()) 356baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 357f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka _percent.ClearCurState(); 358baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 359f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka DeleteMessageWasShown = true; 360f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka } 361f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka else 362f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka { 363f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka _percent.Files++; 364baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 365f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 366f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (NeedPercents()) 367f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka { 368f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka // if (!FullLog) 369f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka { 370f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka _percent.Command = "Removing"; 371f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka _percent.FileName = fs2us(path); 372f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka } 373f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka _percent.Print(); 374f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka } 375f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 376f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka return S_OK; 377f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka} 378f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 379f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 380f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo OsakaHRESULT CUpdateCallbackConsole::FinishDeletingAfterArchiving() 381f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka{ 382f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka ClosePercents2(); 383f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (_so && DeleteMessageWasShown) 384f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka *_so << endl; 385f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka return S_OK; 386f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka} 387f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 388f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo OsakaHRESULT CUpdateCallbackConsole::CheckBreak() 389f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka{ 390f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka return CheckBreak2(); 391f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka} 392f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 393f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka/* 394f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo OsakaHRESULT CUpdateCallbackConsole::Finalize() 395f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka{ 396f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka // MT_LOCK 397baa3858d3f5d128a5c8466b700098109edcad5f2repo sync return S_OK; 398baa3858d3f5d128a5c8466b700098109edcad5f2repo sync} 399f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka*/ 400baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 401f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo OsakaHRESULT CUpdateCallbackConsole::SetNumItems(UInt64 numItems) 402baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 403f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (_so) 404f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka { 405f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka ClosePercents_for_so(); 406f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka AString s; 407f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka PrintPropPair(s, "Items to compress", numItems); 408f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka *_so << s << endl << endl; 409f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka } 410baa3858d3f5d128a5c8466b700098109edcad5f2repo sync return S_OK; 411baa3858d3f5d128a5c8466b700098109edcad5f2repo sync} 412baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 413baa3858d3f5d128a5c8466b700098109edcad5f2repo syncHRESULT CUpdateCallbackConsole::SetTotal(UInt64 size) 414baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 415baa3858d3f5d128a5c8466b700098109edcad5f2repo sync MT_LOCK 416f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (NeedPercents()) 417f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka { 418f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka _percent.Total = size; 419f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka _percent.Print(); 420f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka } 421baa3858d3f5d128a5c8466b700098109edcad5f2repo sync return S_OK; 422baa3858d3f5d128a5c8466b700098109edcad5f2repo sync} 423baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 424baa3858d3f5d128a5c8466b700098109edcad5f2repo syncHRESULT CUpdateCallbackConsole::SetCompleted(const UInt64 *completeValue) 425baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 426baa3858d3f5d128a5c8466b700098109edcad5f2repo sync MT_LOCK 427f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (completeValue) 428baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 429f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (NeedPercents()) 430baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 431f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka _percent.Completed = *completeValue; 432f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka _percent.Print(); 433baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 434baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 435f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka return CheckBreak2(); 436baa3858d3f5d128a5c8466b700098109edcad5f2repo sync} 437baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 438baa3858d3f5d128a5c8466b700098109edcad5f2repo syncHRESULT CUpdateCallbackConsole::SetRatioInfo(const UInt64 * /* inSize */, const UInt64 * /* outSize */) 439baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 440f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka return CheckBreak2(); 441baa3858d3f5d128a5c8466b700098109edcad5f2repo sync} 442baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 443f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo OsakaHRESULT CCallbackConsoleBase::PrintProgress(const wchar_t *name, const char *command, bool showInLog) 444baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 445baa3858d3f5d128a5c8466b700098109edcad5f2repo sync MT_LOCK 446f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 447f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka bool show2 = (showInLog && _so); 448f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 449f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (show2) 450f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka { 451f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka ClosePercents_for_so(); 452f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 453f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka _tempA = command; 454f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (name) 455f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka _tempA.Add_Space(); 456f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka *_so << _tempA; 457f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 458f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka _tempU.Empty(); 459f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (name) 460f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka _tempU = name; 461f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka _so->PrintUString(_tempU, _tempA); 462f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka *_so << endl; 463f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (NeedFlush) 464f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka _so->Flush(); 465f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka } 466f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 467f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (NeedPercents()) 468f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka { 469f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (PercentsNameLevel >= 1) 470f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka { 471f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka _percent.FileName.Empty(); 472f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka _percent.Command.Empty(); 473f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (PercentsNameLevel > 1 || !show2) 474f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka { 475f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka _percent.Command = command; 476f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (name) 477f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka _percent.FileName = name; 478f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka } 479f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka } 480f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka _percent.Print(); 481f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka } 482f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 483f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka return CheckBreak2(); 484f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka} 485f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 486f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo OsakaHRESULT CUpdateCallbackConsole::GetStream(const wchar_t *name, bool /* isDir */, bool isAnti, UInt32 mode) 487f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka{ 488baa3858d3f5d128a5c8466b700098109edcad5f2repo sync if (StdOutMode) 489baa3858d3f5d128a5c8466b700098109edcad5f2repo sync return S_OK; 490f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 491f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (!name || name[0] == 0) 492baa3858d3f5d128a5c8466b700098109edcad5f2repo sync name = kEmptyFileAlias; 493f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 494f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka unsigned requiredLevel = 1; 495f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 496f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka const char *s; 497f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (mode == NUpdateNotifyOp::kAdd || 498f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka mode == NUpdateNotifyOp::kUpdate) 499f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka { 500f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (isAnti) 501f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka s = "Anti"; 502f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka else if (mode == NUpdateNotifyOp::kAdd) 503f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka s = "+"; 504f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka else 505f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka s = "U"; 506f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka } 507f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka else 508f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka { 509f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka requiredLevel = 3; 510f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (mode == NUpdateNotifyOp::kAnalyze) 511f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka s = "A"; 512f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka else 513f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka s = "Reading"; 514f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka } 515f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 516f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka return PrintProgress(name, s, LogLevel >= requiredLevel); 517f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka} 518f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 519f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo OsakaHRESULT CUpdateCallbackConsole::OpenFileError(const FString &path, DWORD systemError) 520f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka{ 521f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka return OpenFileError_Base(path, systemError); 522f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka} 523f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 524f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo OsakaHRESULT CUpdateCallbackConsole::ReadingFileError(const FString &path, DWORD systemError) 525f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka{ 526f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka return ReadingFileError_Base(path, systemError); 527baa3858d3f5d128a5c8466b700098109edcad5f2repo sync} 528baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 529f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo OsakaHRESULT CUpdateCallbackConsole::SetOperationResult(Int32) 530baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 531baa3858d3f5d128a5c8466b700098109edcad5f2repo sync MT_LOCK 532f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka _percent.Files++; 533f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka return S_OK; 534f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka} 535f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 536f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osakavoid SetExtractErrorMessage(Int32 opRes, Int32 encrypted, AString &dest); 537f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 538f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo OsakaHRESULT CUpdateCallbackConsole::ReportExtractResult(Int32 opRes, Int32 isEncrypted, const wchar_t *name) 539f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka{ 540f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka // if (StdOutMode) return S_OK; 541f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 542f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (opRes != NArchive::NExtract::NOperationResult::kOK) 543baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 544f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka ClosePercents2(); 545f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 546f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (_se) 547f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka { 548f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (_so) 549f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka _so->Flush(); 550f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 551f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka AString s; 552f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka SetExtractErrorMessage(opRes, isEncrypted, s); 553f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka *_se << s << " : " << endl << name << endl << endl; 554f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka _se->Flush(); 555f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka } 556f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka return S_OK; 557baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 558f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka return S_OK; 559baa3858d3f5d128a5c8466b700098109edcad5f2repo sync} 560baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 561f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 562f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo OsakaHRESULT CUpdateCallbackConsole::ReportUpdateOpeartion(UInt32 op, const wchar_t *name, bool /* isDir */) 563f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka{ 564f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka // if (StdOutMode) return S_OK; 565f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 566f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka char temp[16]; 567f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka const char *s; 568f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 569f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka unsigned requiredLevel = 1; 570f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 571f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka switch (op) 572f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka { 573f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka case NUpdateNotifyOp::kAdd: s = "+"; break; 574f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka case NUpdateNotifyOp::kUpdate: s = "U"; break; 575f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka case NUpdateNotifyOp::kAnalyze: s = "A"; requiredLevel = 3; break; 576f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka case NUpdateNotifyOp::kReplicate: s = "="; requiredLevel = 3; break; 577f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka case NUpdateNotifyOp::kRepack: s = "R"; requiredLevel = 2; break; 578f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka case NUpdateNotifyOp::kSkip: s = "."; requiredLevel = 2; break; 579f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka case NUpdateNotifyOp::kDelete: s = "D"; requiredLevel = 3; break; 580f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka case NUpdateNotifyOp::kHeader: s = "Header creation"; requiredLevel = 100; break; 581f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka default: 582f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka { 583f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka temp[0] = 'o'; 584f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka temp[1] = 'p'; 585f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka ConvertUInt64ToString(op, temp + 2); 586f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka s = temp; 587f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka } 588f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka } 589f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 590f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka return PrintProgress(name, s, LogLevel >= requiredLevel); 591f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka} 592f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 593f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka/* 594f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo OsakaHRESULT CUpdateCallbackConsole::SetPassword(const UString & 595f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka #ifndef _NO_CRYPTO 596f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka password 597f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka #endif 598f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka ) 599baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 600f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka #ifndef _NO_CRYPTO 601f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka PasswordIsDefined = true; 602f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka Password = password; 603f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka #endif 604baa3858d3f5d128a5c8466b700098109edcad5f2repo sync return S_OK; 605baa3858d3f5d128a5c8466b700098109edcad5f2repo sync} 606f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka*/ 607baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 608baa3858d3f5d128a5c8466b700098109edcad5f2repo syncHRESULT CUpdateCallbackConsole::CryptoGetTextPassword2(Int32 *passwordIsDefined, BSTR *password) 609baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 610f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka COM_TRY_BEGIN 611f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 612baa3858d3f5d128a5c8466b700098109edcad5f2repo sync *password = NULL; 613baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 614baa3858d3f5d128a5c8466b700098109edcad5f2repo sync #ifdef _NO_CRYPTO 615baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 616baa3858d3f5d128a5c8466b700098109edcad5f2repo sync *passwordIsDefined = false; 617baa3858d3f5d128a5c8466b700098109edcad5f2repo sync return S_OK; 618baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 619baa3858d3f5d128a5c8466b700098109edcad5f2repo sync #else 620baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 621baa3858d3f5d128a5c8466b700098109edcad5f2repo sync if (!PasswordIsDefined) 622baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 623baa3858d3f5d128a5c8466b700098109edcad5f2repo sync if (AskPassword) 624baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 625f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka Password = GetPassword(_so); 626baa3858d3f5d128a5c8466b700098109edcad5f2repo sync PasswordIsDefined = true; 627baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 628baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 629baa3858d3f5d128a5c8466b700098109edcad5f2repo sync *passwordIsDefined = BoolToInt(PasswordIsDefined); 630baa3858d3f5d128a5c8466b700098109edcad5f2repo sync return StringToBstr(Password, password); 631baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 632baa3858d3f5d128a5c8466b700098109edcad5f2repo sync #endif 633f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 634f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka COM_TRY_END 635baa3858d3f5d128a5c8466b700098109edcad5f2repo sync} 636baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 637baa3858d3f5d128a5c8466b700098109edcad5f2repo syncHRESULT CUpdateCallbackConsole::CryptoGetTextPassword(BSTR *password) 638baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 639f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka COM_TRY_BEGIN 640f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 641baa3858d3f5d128a5c8466b700098109edcad5f2repo sync *password = NULL; 642baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 643baa3858d3f5d128a5c8466b700098109edcad5f2repo sync #ifdef _NO_CRYPTO 644baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 645baa3858d3f5d128a5c8466b700098109edcad5f2repo sync return E_NOTIMPL; 646baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 647baa3858d3f5d128a5c8466b700098109edcad5f2repo sync #else 648baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 649baa3858d3f5d128a5c8466b700098109edcad5f2repo sync if (!PasswordIsDefined) 650baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 651baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 652f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka Password = GetPassword(_so); 653baa3858d3f5d128a5c8466b700098109edcad5f2repo sync PasswordIsDefined = true; 654baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 655baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 656baa3858d3f5d128a5c8466b700098109edcad5f2repo sync return StringToBstr(Password, password); 657baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 658baa3858d3f5d128a5c8466b700098109edcad5f2repo sync #endif 659f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka COM_TRY_END 660baa3858d3f5d128a5c8466b700098109edcad5f2repo sync} 661baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 662f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo OsakaHRESULT CUpdateCallbackConsole::ShowDeleteFile(const wchar_t *name, bool /* isDir */) 663baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 664baa3858d3f5d128a5c8466b700098109edcad5f2repo sync if (StdOutMode) 665baa3858d3f5d128a5c8466b700098109edcad5f2repo sync return S_OK; 666f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 667f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (LogLevel > 7) 668f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka { 669f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka if (!name || name[0] == 0) 670f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka name = kEmptyFileAlias; 671f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka return PrintProgress(name, "D", true); 672f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka } 673baa3858d3f5d128a5c8466b700098109edcad5f2repo sync return S_OK; 674baa3858d3f5d128a5c8466b700098109edcad5f2repo sync} 675