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