• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 /*
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 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 
NeedPercents()47   bool NeedPercents() const { return _percent._so != NULL; }
48 
ClosePercentsAndFlush()49   void ClosePercentsAndFlush()
50   {
51     if (NeedPercents())
52       _percent.ClosePrint(true);
53     if (_so)
54       _so->Flush();
55   }
56 
57 public:
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 
CloseScanning()70   void CloseScanning()
71   {
72     if (NeedPercents())
73       _percent.ClosePrint(true);
74   }
75 
76   void PrintStat(const CDirItemsStat &st);
77 };
78 
79 
80 
81 
82 class 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  #ifndef Z7_SFX
91   public IArchiveRequestMemoryUseCallback,
92  #endif
93 
94   public COpenCallbackConsole,
95   public CMyUnknownImp
96 {
97   Z7_COM_QI_BEGIN2(IFolderArchiveExtractCallback)
98   // Z7_COM_QI_ENTRY(IArchiveExtractCallbackMessage)
99   Z7_COM_QI_ENTRY(IFolderArchiveExtractCallback2)
100  #ifndef Z7_NO_CRYPTO
101   Z7_COM_QI_ENTRY(ICryptoGetTextPassword)
102  #endif
103  #ifndef Z7_SFX
104   Z7_COM_QI_ENTRY(IArchiveRequestMemoryUseCallback)
105  #endif
106 
107   Z7_COM_QI_END
108   Z7_COM_ADDREF_RELEASE
109 
110   Z7_IFACE_COM7_IMP(IProgress)
111   Z7_IFACE_COM7_IMP(IFolderArchiveExtractCallback)
112   Z7_IFACE_IMP(IExtractCallbackUI)
113   // Z7_IFACE_COM7_IMP(IArchiveExtractCallbackMessage)
114   Z7_IFACE_COM7_IMP(IFolderArchiveExtractCallback2)
115  #ifndef Z7_NO_CRYPTO
116   Z7_IFACE_COM7_IMP(ICryptoGetTextPassword)
117  #endif
118  #ifndef Z7_SFX
119   Z7_IFACE_COM7_IMP(IArchiveRequestMemoryUseCallback)
120  #endif
121 
122   bool _needWriteArchivePath;
123 
124 public:
125   bool ThereIsError_in_Current;
126   bool ThereIsWarning_in_Current;
127   bool NeedFlush;
128 
129 private:
130   AString _tempA;
131   UString _tempU;
132 
133   UString _currentArchivePath;
134   UString _currentName;
135 
136 #ifndef Z7_SFX
137   void PrintTo_se_Path_WithTitle(const UString &path, const char *title);
138   void Add_ArchiveName_Error();
139 #endif
140 
ClosePercents_for_so()141   void ClosePercents_for_so()
142   {
143     if (NeedPercents() && _so == _percent._so)
144       _percent.ClosePrint(false);
145   }
146 
ClosePercentsAndFlush()147   void ClosePercentsAndFlush()
148   {
149     if (NeedPercents())
150       _percent.ClosePrint(true);
151     if (_so)
152       _so->Flush();
153   }
154 public:
155   UInt64 NumTryArcs;
156 
157   UInt64 NumOkArcs;
158   UInt64 NumCantOpenArcs;
159   UInt64 NumArcsWithError;
160   UInt64 NumArcsWithWarnings;
161 
162   UInt64 NumOpenArcErrors;
163   UInt64 NumOpenArcWarnings;
164 
165   UInt64 NumFileErrors;
166   UInt64 NumFileErrors_in_Current;
167 
168   unsigned PercentsNameLevel;
169   unsigned LogLevel;
170 
CExtractCallbackConsole()171   CExtractCallbackConsole():
172       _needWriteArchivePath(true),
173       NeedFlush(false),
174       PercentsNameLevel(1),
175       LogLevel(0)
176       {}
177 
SetWindowWidth(unsigned width)178   void SetWindowWidth(unsigned width) { _percent.MaxLen = width - 1; }
179 
Init(CStdOutStream * outStream,CStdOutStream * errorStream,CStdOutStream * percentStream)180   void Init(CStdOutStream *outStream, CStdOutStream *errorStream, CStdOutStream *percentStream)
181   {
182     COpenCallbackConsole::Init(outStream, errorStream, percentStream);
183 
184     NumTryArcs = 0;
185 
186     ThereIsError_in_Current = false;
187     ThereIsWarning_in_Current = false;
188 
189     NumOkArcs = 0;
190     NumCantOpenArcs = 0;
191     NumArcsWithError = 0;
192     NumArcsWithWarnings = 0;
193 
194     NumOpenArcErrors = 0;
195     NumOpenArcWarnings = 0;
196 
197     NumFileErrors = 0;
198     NumFileErrors_in_Current = 0;
199   }
200 };
201 
202 #endif
203