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