CheatMenuSA/src/datastore.cpp
2022-06-17 00:44:33 +06:00

83 lines
1.6 KiB
C++

#include "datastore.h"
#include "pch.h"
DataStore::DataStore(const char* fileName, bool isPathPredefined) noexcept
{
if (isPathPredefined)
{
path = std::string(fileName) + fileExt;
}
else
{
path = PLUGIN_PATH((char*)FILE_NAME "/data/") + std::string(fileName) + fileExt;
}
if (std::filesystem::exists(path))
{
toml::parse_result result = toml::parse_file(path);
if (result)
{
pTable = std::make_unique<toml::table>(std::move(result));
return;
}
}
if (pTable == nullptr)
{
pTable = std::make_unique<toml::table>();
if (fileName == FILE_NAME)
{
Log::Print<eLogLevel::Info>("Creating {}{}", fileName, fileExt);
}
else
{
Log::Print<eLogLevel::Warn>("Error parsing {}{}", fileName, fileExt);
}
}
}
bool DataStore::Contains(const char* ele) noexcept
{
if (pTable)
{
return pTable->contains(ele);
}
return false;
}
DataStore::Table& DataStore::Items() noexcept
{
return pTable->as_table()->ref<DataStore::Table>();
}
void DataStore::RemoveTable(const char* key) noexcept
{
if (pTable)
{
pTable->erase(key);
}
}
void DataStore::RemoveKey(const char* key, const char* entry) noexcept
{
if (pTable)
{
(*pTable).at_path(key).as_table()->erase(entry);
}
}
void DataStore::Save() noexcept
{
if (pTable)
{
std::ofstream file(path);
if (file.good())
{
file << *pTable << std::endl;
file.close();
}
}
}