13 class ZipFileIteratorItem :
public FilesIteratorItem
16 const mz_zip_archive *zip;
20 ZipFileIteratorItem(mz_zip_archive *zip,
int num, std::string name) : FilesIteratorItem(name), zip(zip), num(num) {}
21 ~ZipFileIteratorItem() {}
23 std::vector<uint8_t> getPayload()
26 void *file_ptr = mz_zip_reader_extract_to_heap((mz_zip_archive *)zip, num, &filesize, 0);
27 std::vector<uint8_t> vec((uint8_t *)file_ptr, (uint8_t *)file_ptr + filesize);
41 ZipFilesIterator(std::string zipfile)
43 if (!mz_zip_reader_init_file(&zip, zipfile.c_str(), 0))
44 throw satdump_exception(
"Invalid zip file! " + zipfile);
45 numfiles = mz_zip_reader_get_num_files(&zip);
49 ~ZipFilesIterator() { mz_zip_reader_end(&zip); }
51 bool getNext(std::shared_ptr<FilesIteratorItem> &v)
53 bool vv = file_index < numfiles;
59 if (mz_zip_reader_is_file_supported(&zip, file_index))
62 if (mz_zip_reader_get_filename(&zip, file_index, filename, 2000))
63 v = std::make_unique<ZipFileIteratorItem>(&zip, file_index, std::filesystem::path(filename).stem().
string() + std::filesystem::path(filename).extension().
string());
72 void reset() { file_index = 0; }