Home | History | Annotate | Download | only in Console
      1 // UpdateCallbackConsole.h
      2 
      3 #ifndef __UPDATE_CALLBACK_CONSOLE_H
      4 #define __UPDATE_CALLBACK_CONSOLE_H
      5 
      6 #include "../../../Common/StdOutStream.h"
      7 
      8 #include "../Common/Update.h"
      9 
     10 #include "PercentPrinter.h"
     11 
     12 struct CErrorPathCodes
     13 {
     14   FStringVector Paths;
     15   CRecordVector<DWORD> Codes;
     16 
     17   void AddError(const FString &path, DWORD systemError)
     18   {
     19     Paths.Add(path);
     20     Codes.Add(systemError);
     21   }
     22   void Clear()
     23   {
     24     Paths.Clear();
     25     Codes.Clear();
     26   }
     27 };
     28 
     29 class CCallbackConsoleBase
     30 {
     31 protected:
     32   CPercentPrinter _percent;
     33 
     34   CStdOutStream *_so;
     35   CStdOutStream *_se;
     36 
     37   void CommonError(const FString &path, DWORD systemError, bool isWarning);
     38 
     39   HRESULT ScanError_Base(const FString &path, DWORD systemError);
     40   HRESULT OpenFileError_Base(const FString &name, DWORD systemError);
     41   HRESULT ReadingFileError_Base(const FString &name, DWORD systemError);
     42 
     43 public:
     44   bool NeedPercents() const { return _percent._so != NULL; };
     45 
     46   bool StdOutMode;
     47 
     48   bool NeedFlush;
     49   unsigned PercentsNameLevel;
     50   unsigned LogLevel;
     51 
     52   AString _tempA;
     53   UString _tempU;
     54 
     55   CCallbackConsoleBase():
     56       StdOutMode(false),
     57       NeedFlush(false),
     58       PercentsNameLevel(1),
     59       LogLevel(0)
     60       {}
     61 
     62   void SetWindowWidth(unsigned width) { _percent.MaxLen = width - 1; }
     63 
     64   void Init(CStdOutStream *outStream, CStdOutStream *errorStream, CStdOutStream *percentStream)
     65   {
     66     FailedFiles.Clear();
     67 
     68     _so = outStream;
     69     _se = errorStream;
     70     _percent._so = percentStream;
     71   }
     72 
     73   void ClosePercents2()
     74   {
     75     if (NeedPercents())
     76       _percent.ClosePrint(true);
     77   }
     78 
     79   void ClosePercents_for_so()
     80   {
     81     if (NeedPercents() && _so == _percent._so)
     82       _percent.ClosePrint(false);
     83   }
     84 
     85 
     86   CErrorPathCodes FailedFiles;
     87   CErrorPathCodes ScanErrors;
     88 
     89   HRESULT PrintProgress(const wchar_t *name, const char *command, bool showInLog);
     90 
     91 };
     92 
     93 class CUpdateCallbackConsole: public IUpdateCallbackUI2, public CCallbackConsoleBase
     94 {
     95   // void PrintPropPair(const char *name, const wchar_t *val);
     96 
     97 public:
     98   #ifndef _NO_CRYPTO
     99   bool PasswordIsDefined;
    100   UString Password;
    101   bool AskPassword;
    102   #endif
    103 
    104   bool DeleteMessageWasShown;
    105 
    106   CUpdateCallbackConsole()
    107       : DeleteMessageWasShown(false)
    108       #ifndef _NO_CRYPTO
    109       , PasswordIsDefined(false)
    110       , AskPassword(false)
    111       #endif
    112       {}
    113 
    114   /*
    115   void Init(CStdOutStream *outStream)
    116   {
    117     CCallbackConsoleBase::Init(outStream);
    118   }
    119   */
    120   // ~CUpdateCallbackConsole() { if (NeedPercents()) _percent.ClosePrint(); }
    121   INTERFACE_IUpdateCallbackUI2(;)
    122 };
    123 
    124 #endif
    125