• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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