yacreader/compressed_archive/compressed_archive.h
2019-05-30 19:46:37 +02:00

80 lines
1.7 KiB
C++

#ifndef COMPRESSED_ARCHIVE_H
#define COMPRESSED_ARCHIVE_H
#include <QObject>
#ifdef Q_OS_UNIX
#include "libp7zip/CPP/7zip/ICoder.h"
#include "libp7zip/CPP/Common/MyCom.h"
#endif
class ExtractDelegate;
class QLibrary;
#include <QString>
#include <QList>
#include <QMap>
struct SevenZipInterface;
class MyCodecs;
#ifdef Q_OS_UNIX
class CompressedArchive : public QObject, public ICompressCodecsInfo, public CMyUnknownImp
#else
class CompressedArchive : public QObject
#endif
{
Q_OBJECT
public:
explicit CompressedArchive(const QString &filePath, QObject *parent = 0);
~CompressedArchive();
#ifdef Q_OS_UNIX
MY_UNKNOWN_IMP
STDMETHOD(GetNumMethods)
(UInt32 *numMethods);
STDMETHOD(GetProperty)
(UInt32 index, PROPID propID, PROPVARIANT *value);
STDMETHOD(CreateDecoder)
(UInt32 index, const GUID *iid, void **coder);
STDMETHOD(CreateEncoder)
(UInt32 index, const GUID *iid, void **coder);
bool isRar;
#endif
signals:
public slots:
int getNumFiles();
int getNumEntries();
QList<QByteArray> getAllData(const QVector<quint32> &indexes, ExtractDelegate *delegate = 0);
QByteArray getRawDataAtIndex(int index);
QList<QString> getFileNames();
bool isValid();
bool toolsLoaded();
private:
SevenZipInterface *szInterface;
QLibrary *sevenzLib;
#ifdef Q_OS_UNIX
QLibrary *rarLib;
#endif
bool loadFunctions();
bool tools;
bool valid;
QList<QString> files;
QList<qint32> offsets;
QMap<qint32, qint32> indexesToPages;
void setupFilesNames();
QVector<quint32> translateIndexes(const QVector<quint32> &indexes);
friend class MyCodecs;
};
#endif // COMPRESSED_ARCHIVE_H