#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; #ifdef Q_OS_WIN #include "7z_includes.h" #define _MY_WINAPI WINAPI #else #define _MY_WINAPI #endif typedef quint32 (_MY_WINAPI * CreateObjectFunc)(const GUID *clsID,const GUID *interfaceID,void **outObject); typedef quint32 (_MY_WINAPI *GetMethodPropertyFunc)(quint32 index, PROPID propID, PROPVARIANT *value); typedef quint32 (_MY_WINAPI *GetNumberOfMethodsFunc)(quint32 *numMethods); typedef quint32 (_MY_WINAPI *GetNumberOfFormatsFunc)(quint32 *numFormats); typedef quint32 (_MY_WINAPI *GetHandlerPropertyFunc)(PROPID propID, PROPVARIANT *value); typedef quint32 (_MY_WINAPI *GetHandlerPropertyFunc2)(quint32 index, PROPID propID, PROPVARIANT *value); typedef quint32 (_MY_WINAPI *SetLargePageModeFunc)(); 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(GetNumberOfMethods)(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