diff options
Diffstat (limited to 'oop2eindopdr/ZipExport.cpp')
-rw-r--r-- | oop2eindopdr/ZipExport.cpp | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/oop2eindopdr/ZipExport.cpp b/oop2eindopdr/ZipExport.cpp index e69de29..35c670f 100644 --- a/oop2eindopdr/ZipExport.cpp +++ b/oop2eindopdr/ZipExport.cpp @@ -0,0 +1,73 @@ +#include <csv2/reader.hpp> +#include <fstream> +#include <iostream> +#include <zip.h> + +#include "ZipExport.h" +#include "Pokedex.h" +#include "PokemonCard.h" + +ZipExport::ZipExport() { } +ZipExport::~ZipExport() { } + +ZipExport::ZipExport(Pokedex* pokedex, std::string input_csv, std::string output_zip) { + set_pokedex(pokedex); + import_csv(input_csv); + export_zip(output_zip); +} + +void ZipExport::set_pokedex(Pokedex* pokedex) { + this->pokedex = pokedex; +} + +void ZipExport::export_zip(std::string filename) { + this->zip_path = filename; + + std::vector<zip_source*> zip_srcs; + zip_t* zip = zip_open(this->zip_path.c_str(), ZIP_CREATE | ZIP_EXCL, nullptr); + + std::string csv_content = "id,value\n"; + + for (std::string card_id : this->id_list) { + PokemonCard* card = this->pokedex->get_card_by_id(card_id); + if (card == nullptr) { + csv_content.append(card->id + "," + "???" + "\n"); + continue; + } + card->fetch_market_value(); + + csv_content.append(card->id + "," + std::to_string(card->value) + "\n"); + + zip_source* image = zip_source_file(zip, card->image_location_hires().c_str(), 0, 0); + zip_file_add(zip, std::string(card->id + ".png").c_str(), image, 0); + zip_srcs.push_back(image); + } + + zip_source* csv_file = zip_source_buffer(zip, csv_content.data(), csv_content.size(), 0); + zip_file_add(zip, "cards.csv", csv_file, 0); + + zip_close(zip); +} + +void ZipExport::import_csv(std::string filename) { + this->csv_path = filename; + + csv2::Reader<csv2::delimiter<','>, + csv2::quote_character<'"'>, + csv2::first_row_is_header<true>, + csv2::trim_policy::trim_whitespace> csv; + + if (csv.mmap(this->csv_path)) { + for (const auto row: csv) { + for (const auto cell: row) { + std::string value; + cell.read_value(value); + this->id_list.push_back(value); + } + } + } else { + std::cout << "parsing csv failed!" << std::endl; + exit(EXIT_FAILURE); + } +} + |