3 changed files with 59 additions and 0 deletions
@ -0,0 +1,14 @@
|
||||
#pragma once |
||||
#include <experimental/filesystem> |
||||
#include <json.hpp> |
||||
|
||||
namespace fs = std::experimental::filesystem; |
||||
|
||||
class data : public json { |
||||
fs::path &get_data_path(); |
||||
void create_data_directory(); |
||||
fs::path get_store_path(); |
||||
|
||||
public: |
||||
data(); |
||||
}; |
||||
@ -0,0 +1,43 @@
|
||||
#include <data.hpp> |
||||
#include <fstream> |
||||
#include <iostream> |
||||
#include <unistd.h> |
||||
|
||||
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"; } |
||||
Loading…
Reference in new issue