#pragma once #include #include #include #include #include #include namespace MMCZip { class ArchiveReader { public: using ArchivePtr = std::unique_ptr; ArchiveReader(QString fileName) : m_archivePath(fileName) {} virtual ~ArchiveReader() = default; QStringList getFiles(); QString getZipName(); bool collectFiles(bool onlyFiles = true); bool exists(const QString& filePath) const; class File { public: File() : m_archive(ArchivePtr(archive_read_new(), archive_read_free)) {} virtual ~File() {} QString filename(); bool isFile(); QDateTime dateTime(); const char* error(); QByteArray readAll(int* outStatus = nullptr); bool skip(); bool writeFile(archive* out, QString targetFileName = "", bool notBlock = false); private: int readNextHeader(); private: friend ArchiveReader; ArchivePtr m_archive; archive_entry* m_entry; }; std::unique_ptr goToFile(QString filename); bool parse(std::function); bool parse(std::function); private: QString m_archivePath; QStringList m_fileNames = {}; }; } // namespace MMCZip