Update implementation to use 7zip 23.01

Mostly changes in macros
This commit is contained in:
Luis Ángel San Martín 2023-07-17 10:36:33 +02:00
parent 7e70cf2d70
commit 27b7176e41
3 changed files with 15 additions and 48 deletions

View File

@ -123,10 +123,8 @@ CompressedArchive::CompressedArchive(const QString &filePath, QObject *parent)
CMyComPtr<IInStream> file = fileSpec; CMyComPtr<IInStream> file = fileSpec;
YCArchiveOpenCallback *openCallbackSpec = new YCArchiveOpenCallback; YCArchiveOpenCallback *openCallbackSpec = new YCArchiveOpenCallback;
CMyComPtr<IArchiveOpenCallback> openCallback = openCallbackSpec; CMyComPtr<IArchiveOpenCallback> openCallback(openCallbackSpec);
openCallbackSpec->PasswordIsDefined = false; openCallbackSpec->PasswordIsDefined = false;
// openCallbackSpec->PasswordIsDefined = true;
// openCallbackSpec->Password = L"1";
// get file type from suffix // get file type from suffix
int i = -1; int i = -1;
@ -136,10 +134,6 @@ CompressedArchive::CompressedArchive(const QString &filePath, QObject *parent)
return; return;
QByteArray magicNumber = filex.read(8); // read first 8 bytes QByteArray magicNumber = filex.read(8); // read first 8 bytes
// if (memcmp(magicNumber,rar5,8)==0)
// return; //rar5 is not supported
// qDebug() << memcmp(magicNumber,rar,7);
// TODO: this suffix matching is rather primitive - better approach?
#ifdef Q_OS_UNIX #ifdef Q_OS_UNIX
if (memcmp(magicNumber, rar, 6) != 0) { if (memcmp(magicNumber, rar, 6) != 0) {
// match suffix to GUID list // match suffix to GUID list

View File

@ -44,26 +44,8 @@ class YCArchiveExtractCallback : public IArchiveExtractCallback,
public ICryptoGetTextPassword, public ICryptoGetTextPassword,
public CMyUnknownImp public CMyUnknownImp
{ {
public: Z7_IFACES_IMP_UNK_2(IArchiveExtractCallback, ICryptoGetTextPassword)
MY_UNKNOWN_IMP1(ICryptoGetTextPassword) Z7_IFACE_COM7_IMP(IProgress)
// IProgress
STDMETHOD(SetTotal)
(UInt64 size);
STDMETHOD(SetCompleted)
(const UInt64 *completeValue);
// IArchiveExtractCallback
STDMETHOD(GetStream)
(UInt32 index, ISequentialOutStream **outStream, Int32 askExtractMode);
STDMETHOD(PrepareOperation)
(Int32 askExtractMode);
STDMETHOD(SetOperationResult)
(Int32 resultEOperationResult);
// ICryptoGetTextPassword
STDMETHOD(CryptoGetTextPassword)
(BSTR *aPassword);
private: private:
CMyComPtr<IInArchive> _archiveHandler; CMyComPtr<IInArchive> _archiveHandler;
@ -108,18 +90,18 @@ void YCArchiveExtractCallback::Init(IInArchive *archiveHandler, const UString &d
directoryPath; // unused directoryPath; // unused
} }
STDMETHODIMP YCArchiveExtractCallback::SetTotal(UInt64 /* size */) Z7_COM7F_IMF(YCArchiveExtractCallback::SetTotal(UInt64 /* size */))
{ {
return S_OK; return S_OK;
} }
STDMETHODIMP YCArchiveExtractCallback::SetCompleted(const UInt64 * /* completeValue */) Z7_COM7F_IMF(YCArchiveExtractCallback::SetCompleted(const UInt64 * /* completeValue */))
{ {
return S_OK; return S_OK;
} }
STDMETHODIMP YCArchiveExtractCallback::GetStream(UInt32 index, Z7_COM7F_IMF(YCArchiveExtractCallback::GetStream(UInt32 index,
ISequentialOutStream **outStream, Int32 askExtractMode) ISequentialOutStream **outStream, Int32 askExtractMode))
{ {
*outStream = 0; *outStream = 0;
_outFileStream.Release(); _outFileStream.Release();
@ -220,7 +202,7 @@ STDMETHODIMP YCArchiveExtractCallback::GetStream(UInt32 index,
}*/ }*/
if (newFileSizeDefined) { if (newFileSizeDefined) {
CBufPtrSeqOutStream *outStreamSpec = new CBufPtrSeqOutStream; CBufPtrSeqOutStream *outStreamSpec = new CBufPtrSeqOutStream;
CMyComPtr<CBufPtrSeqOutStream> outStreamLocal(outStreamSpec); CMyComPtr<ISequentialOutStream> outStreamLocal(outStreamSpec);
data = (Byte *)MidAlloc(newFileSize); data = (Byte *)MidAlloc(newFileSize);
outStreamSpec->Init(data, newFileSize); outStreamSpec->Init(data, newFileSize);
*outStream = outStreamLocal.Detach(); *outStream = outStreamLocal.Detach();
@ -230,7 +212,7 @@ STDMETHODIMP YCArchiveExtractCallback::GetStream(UInt32 index,
return S_OK; return S_OK;
} }
STDMETHODIMP YCArchiveExtractCallback::PrepareOperation(Int32 askExtractMode) Z7_COM7F_IMF(YCArchiveExtractCallback::PrepareOperation(Int32 askExtractMode))
{ {
_extractMode = false; _extractMode = false;
switch (askExtractMode) { switch (askExtractMode) {
@ -248,7 +230,7 @@ STDMETHODIMP YCArchiveExtractCallback::PrepareOperation(Int32 askExtractMode)
return S_OK; return S_OK;
} }
STDMETHODIMP YCArchiveExtractCallback::SetOperationResult(Int32 operationResult) Z7_COM7F_IMF(YCArchiveExtractCallback::SetOperationResult(Int32 operationResult))
{ {
switch (operationResult) { switch (operationResult) {
case NArchive::NExtract::NOperationResult::kOK: case NArchive::NExtract::NOperationResult::kOK:
@ -303,7 +285,7 @@ STDMETHODIMP YCArchiveExtractCallback::SetOperationResult(Int32 operationResult)
return S_OK; return S_OK;
} }
STDMETHODIMP YCArchiveExtractCallback::CryptoGetTextPassword(BSTR *password) Z7_COM7F_IMF(YCArchiveExtractCallback::CryptoGetTextPassword(BSTR *password))
{ {
if (!PasswordIsDefined) { if (!PasswordIsDefined) {
// You can ask real password here from user // You can ask real password here from user

View File

@ -10,17 +10,8 @@ class YCArchiveOpenCallback : public IArchiveOpenCallback,
public ICryptoGetTextPassword, public ICryptoGetTextPassword,
public CMyUnknownImp public CMyUnknownImp
{ {
Z7_IFACES_IMP_UNK_2(IArchiveOpenCallback, ICryptoGetTextPassword)
public: public:
MY_UNKNOWN_IMP1(ICryptoGetTextPassword)
STDMETHOD(SetTotal)
(const UInt64 *files, const UInt64 *bytes);
STDMETHOD(SetCompleted)
(const UInt64 *files, const UInt64 *bytes);
STDMETHOD(CryptoGetTextPassword)
(BSTR *password);
bool PasswordIsDefined; bool PasswordIsDefined;
UString Password; UString Password;
@ -28,17 +19,17 @@ public:
: PasswordIsDefined(false) { } : PasswordIsDefined(false) { }
}; };
STDMETHODIMP YCArchiveOpenCallback::SetTotal(const UInt64 * /* files */, const UInt64 * /* bytes */) Z7_COM7F_IMF(YCArchiveOpenCallback::SetTotal(const UInt64 * /* files */, const UInt64 * /* bytes */))
{ {
return S_OK; return S_OK;
} }
STDMETHODIMP YCArchiveOpenCallback::SetCompleted(const UInt64 * /* files */, const UInt64 * /* bytes */) Z7_COM7F_IMF(YCArchiveOpenCallback::SetCompleted(const UInt64 * /* files */, const UInt64 * /* bytes */))
{ {
return S_OK; return S_OK;
} }
STDMETHODIMP YCArchiveOpenCallback::CryptoGetTextPassword(BSTR *password) Z7_COM7F_IMF(YCArchiveOpenCallback::CryptoGetTextPassword(BSTR *password))
{ {
if (!PasswordIsDefined) { if (!PasswordIsDefined) {
// You can ask real password here from user // You can ask real password here from user