/* Copyright (C) 2024 BeamMP Ltd., BeamMP team and contributors. Licensed under AGPL-3.0 (or later), see . SPDX-License-Identifier: AGPL-3.0-or-later */ #include "Logger.h" #include "Network/network.hpp" #include #include #include #include #include "Options.h" namespace fs = std::filesystem; std::string Branch; std::string CachingDirectory = "./Resources"; bool deleteDuplicateMods = false; void ParseConfig(const nlohmann::json& d) { if (d["Port"].is_number()) { options.port = d["Port"].get(); } // Default -1 // Release 1 // EA 2 // Dev 3 // Custom 3 if (d["Build"].is_string()) { Branch = d["Build"].get(); for (char& c : Branch) c = char(tolower(c)); } if (d.contains("CachingDirectory") && d["CachingDirectory"].is_string()) { CachingDirectory = d["CachingDirectory"].get(); info("Mod caching directory: " + CachingDirectory); } if (d.contains("Dev") && d["Dev"].is_boolean()) { bool dev = d["Dev"].get(); options.verbose = dev; options.no_download = dev; options.no_launch = dev; options.no_update = dev; } if (d.contains(("DeleteDuplicateMods")) && d["DeleteDuplicateMods"].is_boolean()) { deleteDuplicateMods = d["DeleteDuplicateMods"].get(); } } void ConfigInit() { if (fs::exists("Launcher.cfg")) { std::ifstream cfg("Launcher.cfg"); if (cfg.is_open()) { auto Size = fs::file_size("Launcher.cfg"); std::string Buffer(Size, 0); cfg.read(&Buffer[0], Size); cfg.close(); nlohmann::json d = nlohmann::json::parse(Buffer, nullptr, false); if (d.is_discarded()) { fatal("Config failed to parse make sure it's valid JSON!"); } ParseConfig(d); } else fatal("Failed to open Launcher.cfg!"); } else { std::ofstream cfg("Launcher.cfg"); if (cfg.is_open()) { cfg << R"({ "Port": 4444, "Build": "Default", "CachingDirectory": "./Resources" })"; cfg.close(); } else { fatal("Failed to write config on disk!"); } } }