1// UpdateCallbackConsole.h 2 3#ifndef ZIP7_INC_UPDATE_CALLBACK_CONSOLE_H 4#define ZIP7_INC_UPDATE_CALLBACK_CONSOLE_H 5 6#include "../../../Common/StdOutStream.h" 7 8#include "../Common/Update.h" 9 10#include "PercentPrinter.h" 11 12struct CErrorPathCodes 13{ 14 FStringVector Paths; 15 CRecordVector<DWORD> Codes; 16 17 void AddError(const FString &path, DWORD systemError) 18 { 19 Paths.Add(path); 20 Codes.Add(systemError); 21 } 22 void Clear() 23 { 24 Paths.Clear(); 25 Codes.Clear(); 26 } 27}; 28 29 30class CCallbackConsoleBase 31{ 32protected: 33 CPercentPrinter _percent; 34 35 CStdOutStream *_so; 36 CStdOutStream *_se; 37 38 void CommonError(const FString &path, DWORD systemError, bool isWarning); 39 // void CommonError(const char *message); 40 41 HRESULT ScanError_Base(const FString &path, DWORD systemError); 42 HRESULT OpenFileError_Base(const FString &name, DWORD systemError); 43 HRESULT ReadingFileError_Base(const FString &name, DWORD systemError); 44 45public: 46 bool NeedPercents() const { return _percent._so != NULL; } 47 48 bool StdOutMode; 49 50 bool NeedFlush; 51 unsigned PercentsNameLevel; 52 unsigned LogLevel; 53 54 AString _tempA; 55 UString _tempU; 56 57 CCallbackConsoleBase(): 58 StdOutMode(false), 59 NeedFlush(false), 60 PercentsNameLevel(1), 61 LogLevel(0), 62 NumNonOpenFiles(0) 63 {} 64 65 void SetWindowWidth(unsigned width) { _percent.MaxLen = width - 1; } 66 67 void Init(CStdOutStream *outStream, CStdOutStream *errorStream, CStdOutStream *percentStream) 68 { 69 FailedFiles.Clear(); 70 71 _so = outStream; 72 _se = errorStream; 73 _percent._so = percentStream; 74 } 75 76 void ClosePercents2() 77 { 78 if (NeedPercents()) 79 _percent.ClosePrint(true); 80 } 81 82 void ClosePercents_for_so() 83 { 84 if (NeedPercents() && _so == _percent._so) 85 _percent.ClosePrint(false); 86 } 87 88 CErrorPathCodes FailedFiles; 89 CErrorPathCodes ScanErrors; 90 UInt64 NumNonOpenFiles; 91 92 HRESULT PrintProgress(const wchar_t *name, bool isDir, const char *command, bool showInLog); 93 94 // void PrintInfoLine(const UString &s); 95 // void PrintPropInfo(UString &s, PROPID propID, const PROPVARIANT *value); 96}; 97 98 99class CUpdateCallbackConsole Z7_final: 100 public IUpdateCallbackUI2, 101 public CCallbackConsoleBase 102{ 103 // void PrintPropPair(const char *name, const wchar_t *val); 104 Z7_IFACE_IMP(IUpdateCallbackUI) 105 Z7_IFACE_IMP(IDirItemsCallback) 106 Z7_IFACE_IMP(IUpdateCallbackUI2) 107public: 108 bool DeleteMessageWasShown; 109 110 #ifndef Z7_NO_CRYPTO 111 bool PasswordIsDefined; 112 bool AskPassword; 113 UString Password; 114 #endif 115 116 CUpdateCallbackConsole(): 117 DeleteMessageWasShown(false) 118 #ifndef Z7_NO_CRYPTO 119 , PasswordIsDefined(false) 120 , AskPassword(false) 121 #endif 122 {} 123 124 /* 125 void Init(CStdOutStream *outStream) 126 { 127 CCallbackConsoleBase::Init(outStream); 128 } 129 */ 130 // ~CUpdateCallbackConsole() { if (NeedPercents()) _percent.ClosePrint(); } 131}; 132 133#endif 134