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