#include "settings-manager.hpp" #include using namespace std; SettingsManager::SettingsManager() { settings = list(); readAll(); } SettingsManager::~SettingsManager() { } void SettingsManager::Update(string key, string value) { for (auto entry : settings) { if (entry->key == key) { entry->value = value; return; } } settings.push_back(new SettingsEntry{ .key = key, .value = value, }); } void SettingsManager::UpdateBool(string key, bool value) { if (value) Update(key, "true"); else Update(key, "false"); } void SettingsManager::Save(string key, string value) { Update(key, value); SaveAll(); } void SettingsManager::SaveAll() { saveAll(); } string SettingsManager::Get(string key) { for (auto entry : settings) { if (entry->key == key) { return entry->value; } } return ""; } string SettingsManager::GetWithDefault(string key, string defaultValue) { auto value = Get(key); if (value == "") return defaultValue; return value; } bool SettingsManager::GetBool(string key) { if (Get(key) == "true") return true; return false; } bool SettingsManager::GetBoolWithDefault(string key, bool defaultValue) { auto value = Get(key); if (value == "true") return true; if (value == "false") return false; return defaultValue; } void SettingsManager::readAll() { settings.clear(); ifstream fin; string line; fin.open("./config.cfg", ios::in); while (getline(fin, line)) { if (line.find("=") != std::string::npos) { settings.push_back(new SettingsEntry{ .key = line.substr(0, line.find("=")), .value = line.substr(line.find("=")+1, line.length()), }); } } } void SettingsManager::saveAll() { ofstream fout; fout.open("./config.cfg", ios::trunc); for (auto entry : settings) { fout << entry->key << "=" << entry->value << endl; } }