Home | History | Annotate | Download | only in Console
      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 class CExtractScanConsole: public IDirItemsCallback
     19 {
     20   CStdOutStream *_so;
     21   CStdOutStream *_se;
     22   CPercentPrinter _percent;
     23 
     24   bool NeedPercents() const { return _percent._so != NULL; }
     25 
     26   void ClosePercentsAndFlush()
     27   {
     28     if (NeedPercents())
     29       _percent.ClosePrint(true);
     30     if (_so)
     31       _so->Flush();
     32   }
     33 
     34 public:
     35   void Init(CStdOutStream *outStream, CStdOutStream *errorStream, CStdOutStream *percentStream)
     36   {
     37     _so = outStream;
     38     _se = errorStream;
     39     _percent._so = percentStream;
     40   }
     41 
     42   void SetWindowWidth(unsigned width) { _percent.MaxLen = width - 1; }
     43 
     44   void StartScanning();
     45 
     46   INTERFACE_IDirItemsCallback(;)
     47 
     48   void CloseScanning()
     49   {
     50     if (NeedPercents())
     51       _percent.ClosePrint(true);
     52   }
     53 
     54   void PrintStat(const CDirItemsStat &st);
     55 };
     56 
     57 
     58 
     59 
     60 class CExtractCallbackConsole:
     61   public IExtractCallbackUI,
     62   // public IArchiveExtractCallbackMessage,
     63   public IFolderArchiveExtractCallback2,
     64   #ifndef _NO_CRYPTO
     65   public ICryptoGetTextPassword,
     66   #endif
     67   public COpenCallbackConsole,
     68   public CMyUnknownImp
     69 {
     70   AString _tempA;
     71   UString _tempU;
     72 
     73   UString _currentName;
     74 
     75   void ClosePercents_for_so()
     76   {
     77     if (NeedPercents() && _so == _percent._so)
     78       _percent.ClosePrint(false);
     79   }
     80 
     81   void ClosePercentsAndFlush()
     82   {
     83     if (NeedPercents())
     84       _percent.ClosePrint(true);
     85     if (_so)
     86       _so->Flush();
     87   }
     88 
     89 public:
     90   MY_QUERYINTERFACE_BEGIN2(IFolderArchiveExtractCallback)
     91   // MY_QUERYINTERFACE_ENTRY(IArchiveExtractCallbackMessage)
     92   MY_QUERYINTERFACE_ENTRY(IFolderArchiveExtractCallback2)
     93   #ifndef _NO_CRYPTO
     94   MY_QUERYINTERFACE_ENTRY(ICryptoGetTextPassword)
     95   #endif
     96   MY_QUERYINTERFACE_END
     97   MY_ADDREF_RELEASE
     98 
     99   STDMETHOD(SetTotal)(UInt64 total);
    100   STDMETHOD(SetCompleted)(const UInt64 *completeValue);
    101 
    102   INTERFACE_IFolderArchiveExtractCallback(;)
    103 
    104   INTERFACE_IExtractCallbackUI(;)
    105   // INTERFACE_IArchiveExtractCallbackMessage(;)
    106   INTERFACE_IFolderArchiveExtractCallback2(;)
    107 
    108   #ifndef _NO_CRYPTO
    109 
    110   STDMETHOD(CryptoGetTextPassword)(BSTR *password);
    111 
    112   #endif
    113 
    114   UInt64 NumTryArcs;
    115 
    116   bool ThereIsError_in_Current;
    117   bool ThereIsWarning_in_Current;
    118 
    119   UInt64 NumOkArcs;
    120   UInt64 NumCantOpenArcs;
    121   UInt64 NumArcsWithError;
    122   UInt64 NumArcsWithWarnings;
    123 
    124   UInt64 NumOpenArcErrors;
    125   UInt64 NumOpenArcWarnings;
    126 
    127   UInt64 NumFileErrors;
    128   UInt64 NumFileErrors_in_Current;
    129 
    130   bool NeedFlush;
    131   unsigned PercentsNameLevel;
    132   unsigned LogLevel;
    133 
    134   CExtractCallbackConsole():
    135       NeedFlush(false),
    136       PercentsNameLevel(1),
    137       LogLevel(0)
    138       {}
    139 
    140   void SetWindowWidth(unsigned width) { _percent.MaxLen = width - 1; }
    141 
    142   void Init(CStdOutStream *outStream, CStdOutStream *errorStream, CStdOutStream *percentStream)
    143   {
    144     COpenCallbackConsole::Init(outStream, errorStream, percentStream);
    145 
    146     NumTryArcs = 0;
    147 
    148     ThereIsError_in_Current = false;
    149     ThereIsWarning_in_Current = false;
    150 
    151     NumOkArcs = 0;
    152     NumCantOpenArcs = 0;
    153     NumArcsWithError = 0;
    154     NumArcsWithWarnings = 0;
    155 
    156     NumOpenArcErrors = 0;
    157     NumOpenArcWarnings = 0;
    158 
    159     NumFileErrors = 0;
    160     NumFileErrors_in_Current = 0;
    161   }
    162 };
    163 
    164 #endif
    165