xref: /aosp_15_r20/external/lzma/CPP/7zip/UI/Console/ExtractCallbackConsole.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
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