#include #include #include #include fs::path &data::get_data_path() { static fs::path p(""); if (p.native().length() != 0) { return p; } const int uid = getuid(); if (uid == 0) { p = fs::path("/") / "var" / "lib" / "store"; } else if (const auto ptr = std::getenv("HOME")) { p = fs::path(ptr) / ".local" / "lib" / "store"; } return p; } data::data() : json(json::object()) { if (!fs::exists(get_data_path())) { create_data_directory(); } const auto data_file = get_store_path(); if (!fs::exists(data_file)) { try { std::ofstream f(data_file); f << json::object(); } catch (const std::exception &e) { std::cerr << "Could not create config file:\n" << e.what() << std::endl; } } } void data::create_data_directory() { std::error_code ec; fs::create_directories(get_data_path(), ec); if (ec) { std::cerr << "Unable to create configuration directory:\n" << ec.message(); } } fs::path data::get_store_path() { return get_data_path() / "store.json"; }