mame/3rdparty/lzma/CPP/7zip/UI/Console/UpdateCallbackConsole.h
2023-12-06 07:58:49 +11:00

134 lines
2.8 KiB
C++

// UpdateCallbackConsole.h
#ifndef ZIP7_INC_UPDATE_CALLBACK_CONSOLE_H
#define ZIP7_INC_UPDATE_CALLBACK_CONSOLE_H
#include "../../../Common/StdOutStream.h"
#include "../Common/Update.h"
#include "PercentPrinter.h"
struct CErrorPathCodes
{
FStringVector Paths;
CRecordVector<DWORD> Codes;
void AddError(const FString &path, DWORD systemError)
{
Paths.Add(path);
Codes.Add(systemError);
}
void Clear()
{
Paths.Clear();
Codes.Clear();
}
};
class CCallbackConsoleBase
{
protected:
CPercentPrinter _percent;
CStdOutStream *_so;
CStdOutStream *_se;
void CommonError(const FString &path, DWORD systemError, bool isWarning);
// void CommonError(const char *message);
HRESULT ScanError_Base(const FString &path, DWORD systemError);
HRESULT OpenFileError_Base(const FString &name, DWORD systemError);
HRESULT ReadingFileError_Base(const FString &name, DWORD systemError);
public:
bool NeedPercents() const { return _percent._so != NULL; }
bool StdOutMode;
bool NeedFlush;
unsigned PercentsNameLevel;
unsigned LogLevel;
AString _tempA;
UString _tempU;
CCallbackConsoleBase():
StdOutMode(false),
NeedFlush(false),
PercentsNameLevel(1),
LogLevel(0),
NumNonOpenFiles(0)
{}
void SetWindowWidth(unsigned width) { _percent.MaxLen = width - 1; }
void Init(CStdOutStream *outStream, CStdOutStream *errorStream, CStdOutStream *percentStream)
{
FailedFiles.Clear();
_so = outStream;
_se = errorStream;
_percent._so = percentStream;
}
void ClosePercents2()
{
if (NeedPercents())
_percent.ClosePrint(true);
}
void ClosePercents_for_so()
{
if (NeedPercents() && _so == _percent._so)
_percent.ClosePrint(false);
}
CErrorPathCodes FailedFiles;
CErrorPathCodes ScanErrors;
UInt64 NumNonOpenFiles;
HRESULT PrintProgress(const wchar_t *name, bool isDir, const char *command, bool showInLog);
// void PrintInfoLine(const UString &s);
// void PrintPropInfo(UString &s, PROPID propID, const PROPVARIANT *value);
};
class CUpdateCallbackConsole Z7_final:
public IUpdateCallbackUI2,
public CCallbackConsoleBase
{
// void PrintPropPair(const char *name, const wchar_t *val);
Z7_IFACE_IMP(IUpdateCallbackUI)
Z7_IFACE_IMP(IDirItemsCallback)
Z7_IFACE_IMP(IUpdateCallbackUI2)
public:
bool DeleteMessageWasShown;
#ifndef Z7_NO_CRYPTO
bool PasswordIsDefined;
bool AskPassword;
UString Password;
#endif
CUpdateCallbackConsole():
DeleteMessageWasShown(false)
#ifndef Z7_NO_CRYPTO
, PasswordIsDefined(false)
, AskPassword(false)
#endif
{}
/*
void Init(CStdOutStream *outStream)
{
CCallbackConsoleBase::Init(outStream);
}
*/
// ~CUpdateCallbackConsole() { if (NeedPercents()) _percent.ClosePrint(); }
};
#endif