#include "thirdparty/toml.hpp" #include "util.hpp" #include #include #ifdef __ANDROID__ #include #endif #include "web_functions.hpp" using namespace std::filesystem; namespace Looper::Options { toml::table *options; toml::table opts_value; std::string get_options_path() { #ifdef __EMSCRIPTEN__ return "config_toml"; #else path prefs_path(get_prefs_path()); prefs_path /= path("looper"); create_directories(prefs_path); path config_file = prefs_path / path("config.toml"); return config_file.string(); #endif } void load_options() { std::string config_path = get_options_path(); #ifdef __EMSCRIPTEN__ const char *value = nullptr; read_storage(config_path.c_str(), &value, nullptr); if (value != nullptr) { auto res = toml::parse(value); opts_value = res; options = &opts_value; if (options == nullptr) { options = new toml::table(); } } else { options = new toml::table(); } #else if (exists(config_path)) { auto res = toml::parse_file(config_path); opts_value = res; options = &opts_value; if (options == nullptr) { options = new toml::table(); } } else { options = new toml::table(); } #endif } void save_options() { #ifdef __EMSCRIPTEN__ std::ostringstream output; #else std::ofstream output(get_options_path()); #endif output << *options; #ifdef __EMSCRIPTEN__ std::string str = output.str(); write_storage(get_options_path().c_str(), str.c_str(), str.length() + 1); #else output.close(); #endif } }