#include "settings.h" #include #include #include #include "../utils/utils.h" #if __GNUC__ < 8 && __clang_major__ < 17 # include using namespace std::experimental; using namespace std::experimental::filesystem; #else # include using namespace std::filesystem; #endif Settings::Settings(std::string path) { this->settings_file_path = path; if (!exists(path)) { std::ofstream output(path); nlohmann::json settings = R"({ "ofds_modules_dir":".local/share/checks_parser/modules/ofd", "stores_modules_dir":".local/share/checks_parser/modules/stores", "ofds_modules_url":"https://foxarmy.org/checks-parser/modules/ofd/", "stores_modules_url":"https://foxarmy.org/checks-parser/modules/stores/", "print_header": true, "print_total": true, "output_order": { "goods_name": { "position":1, "name":"Goods name" }, "goods_price_per_unit": { "position":2, "name":"Goods price per unit" }, "goods_quantity": { "position":3, "name":"Goods quantity" }, "goods_net_weight": { "position":4, "name":"Goods net weight" }, "goods_total": { "position":5, "name":"Goods total" } } })"_json; output << settings.dump(4); output.flush(); output.close(); this->settings = settings; } else { std::ifstream input(path); nlohmann::json settings = nlohmann::json::parse(input); this->settings = settings; } create_directories(get_path_relative_to_home(this->settings["ofds_modules_dir"])); create_directories(get_path_relative_to_home(this->settings["stores_modules_dir"])); } void Settings::write_setting(std::string setting, std::string value) { std::ofstream output(this->settings_file_path, std::fstream::trunc); this->settings[setting] = value; output << this->settings.dump(4); } std::string Settings::get_setting(std::string setting) { return this->settings[setting]; } void Settings::set_settings_file_path(std::string path) { this->settings_file_path = path; } std::string Settings::get_settings_file_path() { return this->settings_file_path; } nlohmann::json& Settings::get_all_settings() { return this->settings; } void Settings::alter_setting(std::string setting, std::string value) { this->settings[setting] = value; } void Settings::flush() { std::ofstream output(this->settings_file_path, std::fstream::trunc); output << this->settings.dump(4); }