1 // ExtractCallbackConsole.h 2 3 #ifndef __EXTRACT_CALLBACK_CONSOLE_H 4 #define __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 /* 19 struct 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 37 class CExtractScanConsole: public IDirItemsCallback 38 { 39 CStdOutStream *_so; 40 CStdOutStream *_se; 41 CPercentPrinter _percent; 42 43 // CErrorPathCodes2 ScanErrors; 44 NeedPercents()45 bool NeedPercents() const { return _percent._so != NULL; } 46 ClosePercentsAndFlush()47 void ClosePercentsAndFlush() 48 { 49 if (NeedPercents()) 50 _percent.ClosePrint(true); 51 if (_so) 52 _so->Flush(); 53 } 54 55 public: 56 ~CExtractScanConsole()57 virtual ~CExtractScanConsole() {} 58 Init(CStdOutStream * outStream,CStdOutStream * errorStream,CStdOutStream * percentStream)59 void Init(CStdOutStream *outStream, CStdOutStream *errorStream, CStdOutStream *percentStream) 60 { 61 _so = outStream; 62 _se = errorStream; 63 _percent._so = percentStream; 64 } 65 SetWindowWidth(unsigned width)66 void SetWindowWidth(unsigned width) { _percent.MaxLen = width - 1; } 67 68 void StartScanning(); 69 70 INTERFACE_IDirItemsCallback(;) 71 CloseScanning()72 void CloseScanning() 73 { 74 if (NeedPercents()) 75 _percent.ClosePrint(true); 76 } 77 78 void PrintStat(const CDirItemsStat &st); 79 }; 80 81 82 83 84 class CExtractCallbackConsole: 85 public IExtractCallbackUI, 86 // public IArchiveExtractCallbackMessage, 87 public IFolderArchiveExtractCallback2, 88 #ifndef _NO_CRYPTO 89 public ICryptoGetTextPassword, 90 #endif 91 public COpenCallbackConsole, 92 public CMyUnknownImp 93 { 94 AString _tempA; 95 UString _tempU; 96 97 UString _currentName; 98 ClosePercents_for_so()99 void ClosePercents_for_so() 100 { 101 if (NeedPercents() && _so == _percent._so) 102 _percent.ClosePrint(false); 103 } 104 ClosePercentsAndFlush()105 void ClosePercentsAndFlush() 106 { 107 if (NeedPercents()) 108 _percent.ClosePrint(true); 109 if (_so) 110 _so->Flush(); 111 } 112 113 public: 114 MY_QUERYINTERFACE_BEGIN2(IFolderArchiveExtractCallback) 115 // MY_QUERYINTERFACE_ENTRY(IArchiveExtractCallbackMessage) 116 MY_QUERYINTERFACE_ENTRY(IFolderArchiveExtractCallback2) 117 #ifndef _NO_CRYPTO 118 MY_QUERYINTERFACE_ENTRY(ICryptoGetTextPassword) 119 #endif 120 MY_QUERYINTERFACE_END 121 MY_ADDREF_RELEASE 122 123 STDMETHOD(SetTotal)(UInt64 total); 124 STDMETHOD(SetCompleted)(const UInt64 *completeValue); 125 126 INTERFACE_IFolderArchiveExtractCallback(;) 127 128 INTERFACE_IExtractCallbackUI(;) 129 // INTERFACE_IArchiveExtractCallbackMessage(;) 130 INTERFACE_IFolderArchiveExtractCallback2(;) 131 132 #ifndef _NO_CRYPTO 133 134 STDMETHOD(CryptoGetTextPassword)(BSTR *password); 135 136 #endif 137 138 UInt64 NumTryArcs; 139 140 bool ThereIsError_in_Current; 141 bool ThereIsWarning_in_Current; 142 143 UInt64 NumOkArcs; 144 UInt64 NumCantOpenArcs; 145 UInt64 NumArcsWithError; 146 UInt64 NumArcsWithWarnings; 147 148 UInt64 NumOpenArcErrors; 149 UInt64 NumOpenArcWarnings; 150 151 UInt64 NumFileErrors; 152 UInt64 NumFileErrors_in_Current; 153 154 bool NeedFlush; 155 unsigned PercentsNameLevel; 156 unsigned LogLevel; 157 CExtractCallbackConsole()158 CExtractCallbackConsole(): 159 NeedFlush(false), 160 PercentsNameLevel(1), 161 LogLevel(0) 162 {} 163 SetWindowWidth(unsigned width)164 void SetWindowWidth(unsigned width) { _percent.MaxLen = width - 1; } 165 Init(CStdOutStream * outStream,CStdOutStream * errorStream,CStdOutStream * percentStream)166 void Init(CStdOutStream *outStream, CStdOutStream *errorStream, CStdOutStream *percentStream) 167 { 168 COpenCallbackConsole::Init(outStream, errorStream, percentStream); 169 170 NumTryArcs = 0; 171 172 ThereIsError_in_Current = false; 173 ThereIsWarning_in_Current = false; 174 175 NumOkArcs = 0; 176 NumCantOpenArcs = 0; 177 NumArcsWithError = 0; 178 NumArcsWithWarnings = 0; 179 180 NumOpenArcErrors = 0; 181 NumOpenArcWarnings = 0; 182 183 NumFileErrors = 0; 184 NumFileErrors_in_Current = 0; 185 } 186 }; 187 188 #endif 189