aboutsummaryrefslogtreecommitdiff
path: root/oop2eindopdr/ZipExport.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'oop2eindopdr/ZipExport.cpp')
-rw-r--r--oop2eindopdr/ZipExport.cpp73
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);
+ }
+}
+