1*f6dc9357SAndroid Build Coastguard Worker // ExtractCallbackConsole.h 2*f6dc9357SAndroid Build Coastguard Worker 3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_EXTRACT_CALLBACK_CONSOLE_H 4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_EXTRACT_CALLBACK_CONSOLE_H 5*f6dc9357SAndroid Build Coastguard Worker 6*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/StdOutStream.h" 7*f6dc9357SAndroid Build Coastguard Worker 8*f6dc9357SAndroid Build Coastguard Worker #include "../../IPassword.h" 9*f6dc9357SAndroid Build Coastguard Worker 10*f6dc9357SAndroid Build Coastguard Worker #include "../../Archive/IArchive.h" 11*f6dc9357SAndroid Build Coastguard Worker 12*f6dc9357SAndroid Build Coastguard Worker #include "../Common/ArchiveExtractCallback.h" 13*f6dc9357SAndroid Build Coastguard Worker 14*f6dc9357SAndroid Build Coastguard Worker #include "PercentPrinter.h" 15*f6dc9357SAndroid Build Coastguard Worker 16*f6dc9357SAndroid Build Coastguard Worker #include "OpenCallbackConsole.h" 17*f6dc9357SAndroid Build Coastguard Worker 18*f6dc9357SAndroid Build Coastguard Worker /* 19*f6dc9357SAndroid Build Coastguard Worker struct CErrorPathCodes2 20*f6dc9357SAndroid Build Coastguard Worker { 21*f6dc9357SAndroid Build Coastguard Worker FStringVector Paths; 22*f6dc9357SAndroid Build Coastguard Worker CRecordVector<DWORD> Codes; 23*f6dc9357SAndroid Build Coastguard Worker 24*f6dc9357SAndroid Build Coastguard Worker void AddError(const FString &path, DWORD systemError) 25*f6dc9357SAndroid Build Coastguard Worker { 26*f6dc9357SAndroid Build Coastguard Worker Paths.Add(path); 27*f6dc9357SAndroid Build Coastguard Worker Codes.Add(systemError); 28*f6dc9357SAndroid Build Coastguard Worker } 29*f6dc9357SAndroid Build Coastguard Worker void Clear() 30*f6dc9357SAndroid Build Coastguard Worker { 31*f6dc9357SAndroid Build Coastguard Worker Paths.Clear(); 32*f6dc9357SAndroid Build Coastguard Worker Codes.Clear(); 33*f6dc9357SAndroid Build Coastguard Worker } 34*f6dc9357SAndroid Build Coastguard Worker }; 35*f6dc9357SAndroid Build Coastguard Worker */ 36*f6dc9357SAndroid Build Coastguard Worker 37*f6dc9357SAndroid Build Coastguard Worker class CExtractScanConsole Z7_final: public IDirItemsCallback 38*f6dc9357SAndroid Build Coastguard Worker { 39*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_IMP(IDirItemsCallback) 40*f6dc9357SAndroid Build Coastguard Worker 41*f6dc9357SAndroid Build Coastguard Worker CStdOutStream *_so; 42*f6dc9357SAndroid Build Coastguard Worker CStdOutStream *_se; 43*f6dc9357SAndroid Build Coastguard Worker CPercentPrinter _percent; 44*f6dc9357SAndroid Build Coastguard Worker 45*f6dc9357SAndroid Build Coastguard Worker // CErrorPathCodes2 ScanErrors; 46*f6dc9357SAndroid Build Coastguard Worker NeedPercents()47*f6dc9357SAndroid Build Coastguard Worker bool NeedPercents() const { return _percent._so && !_percent.DisablePrint; } 48*f6dc9357SAndroid Build Coastguard Worker ClosePercentsAndFlush()49*f6dc9357SAndroid Build Coastguard Worker void ClosePercentsAndFlush() 50*f6dc9357SAndroid Build Coastguard Worker { 51*f6dc9357SAndroid Build Coastguard Worker if (NeedPercents()) 52*f6dc9357SAndroid Build Coastguard Worker _percent.ClosePrint(true); 53*f6dc9357SAndroid Build Coastguard Worker if (_so) 54*f6dc9357SAndroid Build Coastguard Worker _so->Flush(); 55*f6dc9357SAndroid Build Coastguard Worker } 56*f6dc9357SAndroid Build Coastguard Worker 57*f6dc9357SAndroid Build Coastguard Worker public: 58*f6dc9357SAndroid Build Coastguard Worker Init(CStdOutStream * outStream,CStdOutStream * errorStream,CStdOutStream * percentStream,bool disablePercents)59*f6dc9357SAndroid Build Coastguard Worker void Init( 60*f6dc9357SAndroid Build Coastguard Worker CStdOutStream *outStream, 61*f6dc9357SAndroid Build Coastguard Worker CStdOutStream *errorStream, 62*f6dc9357SAndroid Build Coastguard Worker CStdOutStream *percentStream, 63*f6dc9357SAndroid Build Coastguard Worker bool disablePercents) 64*f6dc9357SAndroid Build Coastguard Worker { 65*f6dc9357SAndroid Build Coastguard Worker _so = outStream; 66*f6dc9357SAndroid Build Coastguard Worker _se = errorStream; 67*f6dc9357SAndroid Build Coastguard Worker _percent._so = percentStream; 68*f6dc9357SAndroid Build Coastguard Worker _percent.DisablePrint = disablePercents; 69*f6dc9357SAndroid Build Coastguard Worker } 70*f6dc9357SAndroid Build Coastguard Worker SetWindowWidth(unsigned width)71*f6dc9357SAndroid Build Coastguard Worker void SetWindowWidth(unsigned width) { _percent.MaxLen = width - 1; } 72*f6dc9357SAndroid Build Coastguard Worker 73*f6dc9357SAndroid Build Coastguard Worker void StartScanning(); 74*f6dc9357SAndroid Build Coastguard Worker CloseScanning()75*f6dc9357SAndroid Build Coastguard Worker void CloseScanning() 76*f6dc9357SAndroid Build Coastguard Worker { 77*f6dc9357SAndroid Build Coastguard Worker if (NeedPercents()) 78*f6dc9357SAndroid Build Coastguard Worker _percent.ClosePrint(true); 79*f6dc9357SAndroid Build Coastguard Worker } 80*f6dc9357SAndroid Build Coastguard Worker 81*f6dc9357SAndroid Build Coastguard Worker void PrintStat(const CDirItemsStat &st); 82*f6dc9357SAndroid Build Coastguard Worker }; 83*f6dc9357SAndroid Build Coastguard Worker 84*f6dc9357SAndroid Build Coastguard Worker 85*f6dc9357SAndroid Build Coastguard Worker 86*f6dc9357SAndroid Build Coastguard Worker 87*f6dc9357SAndroid Build Coastguard Worker class CExtractCallbackConsole Z7_final: 88*f6dc9357SAndroid Build Coastguard Worker public IFolderArchiveExtractCallback, 89*f6dc9357SAndroid Build Coastguard Worker public IExtractCallbackUI, 90*f6dc9357SAndroid Build Coastguard Worker // public IArchiveExtractCallbackMessage, 91*f6dc9357SAndroid Build Coastguard Worker public IFolderArchiveExtractCallback2, 92*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_NO_CRYPTO 93*f6dc9357SAndroid Build Coastguard Worker public ICryptoGetTextPassword, 94*f6dc9357SAndroid Build Coastguard Worker #endif 95*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_SFX 96*f6dc9357SAndroid Build Coastguard Worker public IArchiveRequestMemoryUseCallback, 97*f6dc9357SAndroid Build Coastguard Worker #endif 98*f6dc9357SAndroid Build Coastguard Worker 99*f6dc9357SAndroid Build Coastguard Worker public COpenCallbackConsole, 100*f6dc9357SAndroid Build Coastguard Worker public CMyUnknownImp 101*f6dc9357SAndroid Build Coastguard Worker { 102*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_BEGIN2(IFolderArchiveExtractCallback) 103*f6dc9357SAndroid Build Coastguard Worker // Z7_COM_QI_ENTRY(IArchiveExtractCallbackMessage) 104*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_ENTRY(IFolderArchiveExtractCallback2) 105*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_NO_CRYPTO 106*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_ENTRY(ICryptoGetTextPassword) 107*f6dc9357SAndroid Build Coastguard Worker #endif 108*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_SFX 109*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_ENTRY(IArchiveRequestMemoryUseCallback) 110*f6dc9357SAndroid Build Coastguard Worker #endif 111*f6dc9357SAndroid Build Coastguard Worker 112*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_END 113*f6dc9357SAndroid Build Coastguard Worker Z7_COM_ADDREF_RELEASE 114*f6dc9357SAndroid Build Coastguard Worker 115*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(IProgress) 116*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(IFolderArchiveExtractCallback) 117*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_IMP(IExtractCallbackUI) 118*f6dc9357SAndroid Build Coastguard Worker // Z7_IFACE_COM7_IMP(IArchiveExtractCallbackMessage) 119*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(IFolderArchiveExtractCallback2) 120*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_NO_CRYPTO 121*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(ICryptoGetTextPassword) 122*f6dc9357SAndroid Build Coastguard Worker #endif 123*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_SFX 124*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(IArchiveRequestMemoryUseCallback) 125*f6dc9357SAndroid Build Coastguard Worker #endif 126*f6dc9357SAndroid Build Coastguard Worker 127*f6dc9357SAndroid Build Coastguard Worker bool _needWriteArchivePath; 128*f6dc9357SAndroid Build Coastguard Worker 129*f6dc9357SAndroid Build Coastguard Worker public: 130*f6dc9357SAndroid Build Coastguard Worker bool ThereIsError_in_Current; 131*f6dc9357SAndroid Build Coastguard Worker bool ThereIsWarning_in_Current; 132*f6dc9357SAndroid Build Coastguard Worker bool NeedFlush; 133*f6dc9357SAndroid Build Coastguard Worker 134*f6dc9357SAndroid Build Coastguard Worker private: 135*f6dc9357SAndroid Build Coastguard Worker AString _tempA; 136*f6dc9357SAndroid Build Coastguard Worker UString _tempU; 137*f6dc9357SAndroid Build Coastguard Worker 138*f6dc9357SAndroid Build Coastguard Worker UString _currentArchivePath; 139*f6dc9357SAndroid Build Coastguard Worker UString _currentName; 140*f6dc9357SAndroid Build Coastguard Worker 141*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_SFX 142*f6dc9357SAndroid Build Coastguard Worker void PrintTo_se_Path_WithTitle(const UString &path, const char *title); 143*f6dc9357SAndroid Build Coastguard Worker void Add_ArchiveName_Error(); 144*f6dc9357SAndroid Build Coastguard Worker #endif 145*f6dc9357SAndroid Build Coastguard Worker ClosePercents_for_so()146*f6dc9357SAndroid Build Coastguard Worker void ClosePercents_for_so() 147*f6dc9357SAndroid Build Coastguard Worker { 148*f6dc9357SAndroid Build Coastguard Worker if (NeedPercents() && _so == _percent._so) 149*f6dc9357SAndroid Build Coastguard Worker _percent.ClosePrint(false); 150*f6dc9357SAndroid Build Coastguard Worker } 151*f6dc9357SAndroid Build Coastguard Worker ClosePercentsAndFlush()152*f6dc9357SAndroid Build Coastguard Worker void ClosePercentsAndFlush() 153*f6dc9357SAndroid Build Coastguard Worker { 154*f6dc9357SAndroid Build Coastguard Worker if (NeedPercents()) 155*f6dc9357SAndroid Build Coastguard Worker _percent.ClosePrint(true); 156*f6dc9357SAndroid Build Coastguard Worker if (_so) 157*f6dc9357SAndroid Build Coastguard Worker _so->Flush(); 158*f6dc9357SAndroid Build Coastguard Worker } 159*f6dc9357SAndroid Build Coastguard Worker public: 160*f6dc9357SAndroid Build Coastguard Worker UInt64 NumTryArcs; 161*f6dc9357SAndroid Build Coastguard Worker 162*f6dc9357SAndroid Build Coastguard Worker UInt64 NumOkArcs; 163*f6dc9357SAndroid Build Coastguard Worker UInt64 NumCantOpenArcs; 164*f6dc9357SAndroid Build Coastguard Worker UInt64 NumArcsWithError; 165*f6dc9357SAndroid Build Coastguard Worker UInt64 NumArcsWithWarnings; 166*f6dc9357SAndroid Build Coastguard Worker 167*f6dc9357SAndroid Build Coastguard Worker UInt64 NumOpenArcErrors; 168*f6dc9357SAndroid Build Coastguard Worker UInt64 NumOpenArcWarnings; 169*f6dc9357SAndroid Build Coastguard Worker 170*f6dc9357SAndroid Build Coastguard Worker UInt64 NumFileErrors; 171*f6dc9357SAndroid Build Coastguard Worker UInt64 NumFileErrors_in_Current; 172*f6dc9357SAndroid Build Coastguard Worker 173*f6dc9357SAndroid Build Coastguard Worker unsigned PercentsNameLevel; 174*f6dc9357SAndroid Build Coastguard Worker unsigned LogLevel; 175*f6dc9357SAndroid Build Coastguard Worker CExtractCallbackConsole()176*f6dc9357SAndroid Build Coastguard Worker CExtractCallbackConsole(): 177*f6dc9357SAndroid Build Coastguard Worker _needWriteArchivePath(true), 178*f6dc9357SAndroid Build Coastguard Worker NeedFlush(false), 179*f6dc9357SAndroid Build Coastguard Worker PercentsNameLevel(1), 180*f6dc9357SAndroid Build Coastguard Worker LogLevel(0) 181*f6dc9357SAndroid Build Coastguard Worker {} 182*f6dc9357SAndroid Build Coastguard Worker SetWindowWidth(unsigned width)183*f6dc9357SAndroid Build Coastguard Worker void SetWindowWidth(unsigned width) { _percent.MaxLen = width - 1; } 184*f6dc9357SAndroid Build Coastguard Worker Init(CStdOutStream * outStream,CStdOutStream * errorStream,CStdOutStream * percentStream,bool disablePercents)185*f6dc9357SAndroid Build Coastguard Worker void Init( 186*f6dc9357SAndroid Build Coastguard Worker CStdOutStream *outStream, 187*f6dc9357SAndroid Build Coastguard Worker CStdOutStream *errorStream, 188*f6dc9357SAndroid Build Coastguard Worker CStdOutStream *percentStream, 189*f6dc9357SAndroid Build Coastguard Worker bool disablePercents) 190*f6dc9357SAndroid Build Coastguard Worker { 191*f6dc9357SAndroid Build Coastguard Worker COpenCallbackConsole::Init(outStream, errorStream, percentStream, disablePercents); 192*f6dc9357SAndroid Build Coastguard Worker 193*f6dc9357SAndroid Build Coastguard Worker NumTryArcs = 0; 194*f6dc9357SAndroid Build Coastguard Worker 195*f6dc9357SAndroid Build Coastguard Worker ThereIsError_in_Current = false; 196*f6dc9357SAndroid Build Coastguard Worker ThereIsWarning_in_Current = false; 197*f6dc9357SAndroid Build Coastguard Worker 198*f6dc9357SAndroid Build Coastguard Worker NumOkArcs = 0; 199*f6dc9357SAndroid Build Coastguard Worker NumCantOpenArcs = 0; 200*f6dc9357SAndroid Build Coastguard Worker NumArcsWithError = 0; 201*f6dc9357SAndroid Build Coastguard Worker NumArcsWithWarnings = 0; 202*f6dc9357SAndroid Build Coastguard Worker 203*f6dc9357SAndroid Build Coastguard Worker NumOpenArcErrors = 0; 204*f6dc9357SAndroid Build Coastguard Worker NumOpenArcWarnings = 0; 205*f6dc9357SAndroid Build Coastguard Worker 206*f6dc9357SAndroid Build Coastguard Worker NumFileErrors = 0; 207*f6dc9357SAndroid Build Coastguard Worker NumFileErrors_in_Current = 0; 208*f6dc9357SAndroid Build Coastguard Worker } 209*f6dc9357SAndroid Build Coastguard Worker }; 210*f6dc9357SAndroid Build Coastguard Worker 211*f6dc9357SAndroid Build Coastguard Worker #endif 212