[Config] Redesigned config dumper
This commit is contained in:
parent
a180813fcf
commit
7a1eca7265
|
@ -25,25 +25,12 @@ std::shared_ptr<cpptoml::table> ParseFile(
|
||||||
" could not be opened for parsing");
|
" could not be opened for parsing");
|
||||||
}
|
}
|
||||||
// since cpptoml can't parse files with a UTF-8 BOM we need to skip them
|
// since cpptoml can't parse files with a UTF-8 BOM we need to skip them
|
||||||
char bom[3]{};
|
char bom[3];
|
||||||
file.read(bom, sizeof(bom));
|
file.read(bom, sizeof(bom));
|
||||||
if (file.fail() || bom[0] != '\xEF' || bom[1] != '\xBB' || bom[2] != '\xBF') {
|
if (file.fail() || bom[0] != '\xEF' || bom[1] != '\xBB' || bom[2] != '\xBF') {
|
||||||
file.clear();
|
file.clear();
|
||||||
file.seekg(0);
|
file.seekg(0);
|
||||||
}
|
}
|
||||||
if (xe::utf8::ends_with(filename.string(), ".config.toml")) {
|
|
||||||
std::string config_content{};
|
|
||||||
std::string config_line{};
|
|
||||||
// dump contents of loaded config file
|
|
||||||
// content is expected to be utf8
|
|
||||||
while (std::getline(file, config_line)) {
|
|
||||||
config_content.append(fmt::format("{}\n", config_line));
|
|
||||||
}
|
|
||||||
XELOGI("Loading config: {}\n{}", xe::path_to_utf8(filename), config_content);
|
|
||||||
}
|
|
||||||
|
|
||||||
file.clear();
|
|
||||||
file.seekg(0);
|
|
||||||
|
|
||||||
cpptoml::parser p(file);
|
cpptoml::parser p(file);
|
||||||
return p.parse();
|
return p.parse();
|
||||||
|
@ -81,12 +68,48 @@ std::shared_ptr<cpptoml::table> ParseConfig(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PrintConfigToLog(const std::filesystem::path& file_path) {
|
||||||
|
std::ifstream file(file_path);
|
||||||
|
if (!file.is_open()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string config_dump = "----------- CONFIG DUMP -----------\n";
|
||||||
|
std::string config_line = "";
|
||||||
|
while (std::getline(file, config_line)) {
|
||||||
|
if (config_line.empty()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Find place where comment begins and cut that part.
|
||||||
|
const size_t comment_mark_position = config_line.find_first_of("#");
|
||||||
|
if (comment_mark_position != std::string::npos) {
|
||||||
|
config_line.erase(comment_mark_position, config_line.length());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if remaining part of line is empty.
|
||||||
|
if (std::all_of(config_line.cbegin(), config_line.cend(), isspace)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// Check if line is a category mark. If it is add new line on start for
|
||||||
|
// improved visibility.
|
||||||
|
const bool category_mark = config_line.at(0) == '[';
|
||||||
|
config_dump += (category_mark ? "\n" : "") + config_line + "\n";
|
||||||
|
}
|
||||||
|
config_dump += "----------- END OF CONFIG DUMP ----";
|
||||||
|
XELOGI("{}", config_dump);
|
||||||
|
|
||||||
|
file.close();
|
||||||
|
}
|
||||||
|
|
||||||
void ReadConfig(const std::filesystem::path& file_path,
|
void ReadConfig(const std::filesystem::path& file_path,
|
||||||
bool update_if_no_version_stored) {
|
bool update_if_no_version_stored) {
|
||||||
if (!cvar::ConfigVars) {
|
if (!cvar::ConfigVars) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const auto config = ParseConfig(file_path);
|
const auto config = ParseConfig(file_path);
|
||||||
|
|
||||||
|
PrintConfigToLog(file_path);
|
||||||
// Loading an actual global config file that exists - if there's no
|
// Loading an actual global config file that exists - if there's no
|
||||||
// defaults_date in it, it's very old (before updating was added at all, thus
|
// defaults_date in it, it's very old (before updating was added at all, thus
|
||||||
// all defaults need to be updated).
|
// all defaults need to be updated).
|
||||||
|
@ -105,6 +128,7 @@ void ReadConfig(const std::filesystem::path& file_path,
|
||||||
if (update_if_no_version_stored || config_defaults_date) {
|
if (update_if_no_version_stored || config_defaults_date) {
|
||||||
cvar::IConfigVarUpdate::ApplyUpdates(config_defaults_date);
|
cvar::IConfigVarUpdate::ApplyUpdates(config_defaults_date);
|
||||||
}
|
}
|
||||||
|
|
||||||
XELOGI("Loaded config: {}", xe::path_to_utf8(file_path));
|
XELOGI("Loaded config: {}", xe::path_to_utf8(file_path));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue