#ifndef COMPRESSED_ARCHIVE_H #define COMPRESSED_ARCHIVE_H #include #ifdef Q_OS_UNIX #include "libp7zip/CPP/7zip/ICoder.h" #include "libp7zip/CPP/Common/MyCom.h" #endif class ExtractDelegate; class QLibrary; #include #include #include 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 getAllData(const QVector &indexes, ExtractDelegate *delegate = 0); QByteArray getRawDataAtIndex(int index); QList getFileNames(); bool isValid(); bool toolsLoaded(); private: SevenZipInterface *szInterface; QLibrary *sevenzLib; #ifdef Q_OS_UNIX QLibrary *rarLib; #endif bool loadFunctions(); bool tools; bool valid; QList files; QList offsets; QMap indexesToPages; void setupFilesNames(); QVector translateIndexes(const QVector &indexes); friend class MyCodecs; }; #endif // COMPRESSED_ARCHIVE_H