165 lines
3.3 KiB
C++
165 lines
3.3 KiB
C++
// ExtractCallbackConsole.h
|
|
|
|
#ifndef __EXTRACT_CALLBACK_CONSOLE_H
|
|
#define __EXTRACT_CALLBACK_CONSOLE_H
|
|
|
|
#include "../../../Common/StdOutStream.h"
|
|
|
|
#include "../../IPassword.h"
|
|
|
|
#include "../../Archive/IArchive.h"
|
|
|
|
#include "../Common/ArchiveExtractCallback.h"
|
|
|
|
#include "PercentPrinter.h"
|
|
|
|
#include "OpenCallbackConsole.h"
|
|
|
|
class CExtractScanConsole: public IDirItemsCallback
|
|
{
|
|
CStdOutStream *_so;
|
|
CStdOutStream *_se;
|
|
CPercentPrinter _percent;
|
|
|
|
bool NeedPercents() const { return _percent._so != NULL; }
|
|
|
|
void ClosePercentsAndFlush()
|
|
{
|
|
if (NeedPercents())
|
|
_percent.ClosePrint(true);
|
|
if (_so)
|
|
_so->Flush();
|
|
}
|
|
|
|
public:
|
|
void Init(CStdOutStream *outStream, CStdOutStream *errorStream, CStdOutStream *percentStream)
|
|
{
|
|
_so = outStream;
|
|
_se = errorStream;
|
|
_percent._so = percentStream;
|
|
}
|
|
|
|
void SetWindowWidth(unsigned width) { _percent.MaxLen = width - 1; }
|
|
|
|
void StartScanning();
|
|
|
|
INTERFACE_IDirItemsCallback(;)
|
|
|
|
void CloseScanning()
|
|
{
|
|
if (NeedPercents())
|
|
_percent.ClosePrint(true);
|
|
}
|
|
|
|
void PrintStat(const CDirItemsStat &st);
|
|
};
|
|
|
|
|
|
|
|
|
|
class CExtractCallbackConsole:
|
|
public IExtractCallbackUI,
|
|
// public IArchiveExtractCallbackMessage,
|
|
public IFolderArchiveExtractCallback2,
|
|
#ifndef _NO_CRYPTO
|
|
public ICryptoGetTextPassword,
|
|
#endif
|
|
public COpenCallbackConsole,
|
|
public CMyUnknownImp
|
|
{
|
|
AString _tempA;
|
|
UString _tempU;
|
|
|
|
UString _currentName;
|
|
|
|
void ClosePercents_for_so()
|
|
{
|
|
if (NeedPercents() && _so == _percent._so)
|
|
_percent.ClosePrint(false);
|
|
}
|
|
|
|
void ClosePercentsAndFlush()
|
|
{
|
|
if (NeedPercents())
|
|
_percent.ClosePrint(true);
|
|
if (_so)
|
|
_so->Flush();
|
|
}
|
|
|
|
public:
|
|
MY_QUERYINTERFACE_BEGIN2(IFolderArchiveExtractCallback)
|
|
// MY_QUERYINTERFACE_ENTRY(IArchiveExtractCallbackMessage)
|
|
MY_QUERYINTERFACE_ENTRY(IFolderArchiveExtractCallback2)
|
|
#ifndef _NO_CRYPTO
|
|
MY_QUERYINTERFACE_ENTRY(ICryptoGetTextPassword)
|
|
#endif
|
|
MY_QUERYINTERFACE_END
|
|
MY_ADDREF_RELEASE
|
|
|
|
STDMETHOD(SetTotal)(UInt64 total);
|
|
STDMETHOD(SetCompleted)(const UInt64 *completeValue);
|
|
|
|
INTERFACE_IFolderArchiveExtractCallback(;)
|
|
|
|
INTERFACE_IExtractCallbackUI(;)
|
|
// INTERFACE_IArchiveExtractCallbackMessage(;)
|
|
INTERFACE_IFolderArchiveExtractCallback2(;)
|
|
|
|
#ifndef _NO_CRYPTO
|
|
|
|
STDMETHOD(CryptoGetTextPassword)(BSTR *password);
|
|
|
|
#endif
|
|
|
|
UInt64 NumTryArcs;
|
|
|
|
bool ThereIsError_in_Current;
|
|
bool ThereIsWarning_in_Current;
|
|
|
|
UInt64 NumOkArcs;
|
|
UInt64 NumCantOpenArcs;
|
|
UInt64 NumArcsWithError;
|
|
UInt64 NumArcsWithWarnings;
|
|
|
|
UInt64 NumOpenArcErrors;
|
|
UInt64 NumOpenArcWarnings;
|
|
|
|
UInt64 NumFileErrors;
|
|
UInt64 NumFileErrors_in_Current;
|
|
|
|
bool NeedFlush;
|
|
unsigned PercentsNameLevel;
|
|
unsigned LogLevel;
|
|
|
|
CExtractCallbackConsole():
|
|
NeedFlush(false),
|
|
PercentsNameLevel(1),
|
|
LogLevel(0)
|
|
{}
|
|
|
|
void SetWindowWidth(unsigned width) { _percent.MaxLen = width - 1; }
|
|
|
|
void Init(CStdOutStream *outStream, CStdOutStream *errorStream, CStdOutStream *percentStream)
|
|
{
|
|
COpenCallbackConsole::Init(outStream, errorStream, percentStream);
|
|
|
|
NumTryArcs = 0;
|
|
|
|
ThereIsError_in_Current = false;
|
|
ThereIsWarning_in_Current = false;
|
|
|
|
NumOkArcs = 0;
|
|
NumCantOpenArcs = 0;
|
|
NumArcsWithError = 0;
|
|
NumArcsWithWarnings = 0;
|
|
|
|
NumOpenArcErrors = 0;
|
|
NumOpenArcWarnings = 0;
|
|
|
|
NumFileErrors = 0;
|
|
NumFileErrors_in_Current = 0;
|
|
}
|
|
};
|
|
|
|
#endif
|