/* * Copyright (C) 2022 Riyyi * * SPDX-License-Identifier: MIT */ #include // assert #include // raise #include // fprintf #include // current_path, recursive_directory #include // ifstream #include #include #include "config.h" #include "util/json/value.h" Config::Config(s) : m_workingDirectory(std::filesystem::current_path()) , m_workingDirectorySize(m_workingDirectory.string().size()) { findConfigFile(); parseConfigFile(); } Config::~Config() { } // ----------------------------------------- void Config::findConfigFile() { std::string configFileName = "manafiles.json"; for (const auto& path : std::filesystem::recursive_directory_iterator { m_workingDirectory }) { const auto& file = path.path().string(); if (file.find(configFileName) + configFileName.size() == file.size()) { m_config = file; } } #ifndef NDEBUG printf("Found config file @ %s\n", m_config.c_str() + m_workingDirectorySize + 1); #endif } void Config::parseConfigFile() { if (m_config.empty()) { return; } Json::Value json; std::ifstream file(m_config); if (!file.is_open()) { return; } try { file >> json; } catch (...) { fprintf(stderr, "\033[31;1mConfig:\033[0m json syntax error\n"); raise(SIGABRT); return; } m_settings = json.get(); } // ----------------------------------------- void toJson(Json::Value& json, const Settings& settings) { json = Json::Value { { "ignorePatterns", settings.ignorePatterns }, { "systemPatterns", settings.systemPatterns } }; } void fromJson(const Json::Value& json, Settings& settings) { assert(json.type() == Json::Value::Type::Object); if (json.exists("ignorePatterns")) { json.at("ignorePatterns").getTo(settings.ignorePatterns); } if (json.exists("systemPatterns")) { json.at("systemPatterns").getTo(settings.systemPatterns); } }