forked from Green-Sky/tomato
fix config tox profile path relative to config and load plugins from
config and skip setup screen option
This commit is contained in:
parent
b133c5f79f
commit
f9c9eefb40
@ -15,15 +15,21 @@
|
|||||||
#include <fstream>
|
#include <fstream>
|
||||||
|
|
||||||
StartScreen::StartScreen(const std::vector<std::string_view>& args, SDL_Renderer* renderer, Theme& theme) : _renderer(renderer), _theme(theme) {
|
StartScreen::StartScreen(const std::vector<std::string_view>& args, SDL_Renderer* renderer, Theme& theme) : _renderer(renderer), _theme(theme) {
|
||||||
|
bool config_loaded {false};
|
||||||
|
std::string config_path;
|
||||||
for (size_t ai = 1; ai < args.size(); ai++) {
|
for (size_t ai = 1; ai < args.size(); ai++) {
|
||||||
if (args.at(ai) == "--config" || args.at(ai) == "-c") {
|
if (args.at(ai) == "--config" || args.at(ai) == "-c") {
|
||||||
|
if (config_loaded) {
|
||||||
|
std::cerr << "TOMATO error: config specified more than once!\n";
|
||||||
|
break;
|
||||||
|
}
|
||||||
if (args.size() == ai+1) {
|
if (args.size() == ai+1) {
|
||||||
std::cerr << "TOMATO error: argument '" << args.at(ai) << "' missing parameter!\n";
|
std::cerr << "TOMATO error: argument '" << args.at(ai) << "' missing parameter!\n";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
ai++;
|
ai++;
|
||||||
|
|
||||||
const auto& config_path = args.at(ai);
|
config_path = args.at(ai);
|
||||||
auto config_file = std::ifstream(static_cast<std::string>(config_path));
|
auto config_file = std::ifstream(static_cast<std::string>(config_path));
|
||||||
if (!config_file.is_open()) {
|
if (!config_file.is_open()) {
|
||||||
std::cerr << "TOMATO error: failed to open config file '" << config_path << "'\n";
|
std::cerr << "TOMATO error: failed to open config file '" << config_path << "'\n";
|
||||||
@ -35,6 +41,7 @@ StartScreen::StartScreen(const std::vector<std::string_view>& args, SDL_Renderer
|
|||||||
std::cerr << "TOMATO error in config json, exiting...\n";
|
std::cerr << "TOMATO error in config json, exiting...\n";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
config_loaded = true;
|
||||||
} else if (args.at(ai) == "--plugin" || args.at(ai) == "-p") {
|
} else if (args.at(ai) == "--plugin" || args.at(ai) == "-p") {
|
||||||
if (args.size() == ai+1) {
|
if (args.size() == ai+1) {
|
||||||
std::cerr << "TOMATO error: argument '" << args.at(ai) << "' missing parameter!\n";
|
std::cerr << "TOMATO error: argument '" << args.at(ai) << "' missing parameter!\n";
|
||||||
@ -50,10 +57,14 @@ StartScreen::StartScreen(const std::vector<std::string_view>& args, SDL_Renderer
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
{ // seed tox save path
|
// seed tox save path
|
||||||
if (_conf.has_string("tox", "save_file_path")) {
|
if (_conf.has_string("tox", "save_file_path")) {
|
||||||
_tox_profile_path = _conf.get_string("tox", "save_file_path").value();
|
const auto config_path_base = std::filesystem::path{config_path}.parent_path();
|
||||||
|
std::filesystem::path real_tox_profile_path = static_cast<std::string>(_conf.get_string("tox", "save_file_path").value());
|
||||||
|
if (real_tox_profile_path.is_relative()) {
|
||||||
|
real_tox_profile_path = config_path_base / real_tox_profile_path;
|
||||||
}
|
}
|
||||||
|
_tox_profile_path = real_tox_profile_path.u8string();
|
||||||
}
|
}
|
||||||
|
|
||||||
float display_scale = SDL_GetWindowDisplayScale(SDL_GetRenderWindow(renderer));
|
float display_scale = SDL_GetWindowDisplayScale(SDL_GetRenderWindow(renderer));
|
||||||
@ -137,6 +148,23 @@ StartScreen::StartScreen(const std::vector<std::string_view>& args, SDL_Renderer
|
|||||||
|
|
||||||
font_atlas->Build();
|
font_atlas->Build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (config_loaded) { // pull plugins from config
|
||||||
|
const auto config_path_base = std::filesystem::path{config_path}.parent_path();
|
||||||
|
|
||||||
|
for (const auto& [plugin_path, autoload] : _conf.entries_bool("PluginManager", "autoload")) {
|
||||||
|
if (!autoload) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::filesystem::path real_plugin_path = plugin_path;
|
||||||
|
if (real_plugin_path.is_relative()) {
|
||||||
|
real_plugin_path = config_path_base / real_plugin_path;
|
||||||
|
}
|
||||||
|
|
||||||
|
queued_plugin_paths.push_back(real_plugin_path.u8string());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Screen* StartScreen::render(float, bool&) {
|
Screen* StartScreen::render(float, bool&) {
|
||||||
@ -281,8 +309,15 @@ Screen* StartScreen::render(float, bool&) {
|
|||||||
|
|
||||||
_fss.render();
|
_fss.render();
|
||||||
|
|
||||||
|
// TODO: dont check every frame
|
||||||
|
// do in tick instead?
|
||||||
|
if (_conf.get_bool("tomato", "skip_setup_and_load").value_or(false)) {
|
||||||
|
auto new_screen = std::make_unique<MainScreen>(std::move(_conf), _renderer, _theme, _tox_profile_path, _password, _user_name, queued_plugin_paths);
|
||||||
|
return new_screen.release();
|
||||||
|
} else {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Screen* StartScreen::tick(float, bool&) {
|
Screen* StartScreen::tick(float, bool&) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
Loading…
Reference in New Issue
Block a user