98 lines
2.9 KiB
C++
98 lines
2.9 KiB
C++
#include "settings.h"
|
|
#include <fstream>
|
|
#include <nlohmann/json.hpp>
|
|
#include <string>
|
|
#include "../utils/utils.h"
|
|
|
|
#if __GNUC__ < 8 && __clang_major__ < 17
|
|
# include <experimental/filesystem>
|
|
using namespace std::experimental;
|
|
using namespace std::experimental::filesystem;
|
|
#else
|
|
# include <filesystem>
|
|
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);
|
|
}
|