From 4d357ff99ed0593ab3eeaecf8a063ddca84a2282 Mon Sep 17 00:00:00 2001 From: eidheim Date: Thu, 17 Sep 2015 08:53:57 +0200 Subject: [PATCH] Now fallbacks to default config if error in ~/.juci/config/config.json. --- src/config.cc | 37 +++++++++++++++++++++++++------------ src/config.h | 1 + 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/src/config.cc b/src/config.cc index 76edf8a..f503c30 100644 --- a/src/config.cc +++ b/src/config.cc @@ -4,24 +4,25 @@ #include #include "files.h" #include "sourcefile.h" +#include "singletons.h" #include //TODO: remove using namespace std; //TODO: remove MainConfig::MainConfig() { find_or_create_config_files(); - boost::property_tree::json_parser::read_json(Singleton::config_dir() + "config.json", cfg); - update_config_file(); - - Singleton::Config::window()->keybindings = cfg.get_child("keybindings"); - GenerateSource(); - GenerateDirectoryFilter(); - - Singleton::Config::window()->theme_name=cfg.get("gtk_theme.name"); - Singleton::Config::window()->theme_variant=cfg.get("gtk_theme.variant"); - Singleton::Config::window()->version = cfg.get("version"); - Singleton::Config::terminal()->make_command=cfg.get("project.make_command"); - Singleton::Config::terminal()->cmake_command=cfg.get("project.cmake_command"); + try { + boost::property_tree::json_parser::read_json(Singleton::config_dir() + "config.json", cfg); + update_config_file(); + retrieve_config(); + } + catch(const std::exception &e) { + Singleton::terminal()->print("Error reading "+Singleton::config_dir() + "config.json: "+e.what()+"\n"); + std::stringstream ss; + ss << configjson; + boost::property_tree::read_json(ss, cfg); + retrieve_config(); + } } void MainConfig::find_or_create_config_files() { @@ -46,6 +47,18 @@ void MainConfig::find_or_create_config_files() { juci::filesystem::write(juci_style_path, juci_dark_style); } +void MainConfig::retrieve_config() { + Singleton::Config::window()->keybindings = cfg.get_child("keybindings"); + GenerateSource(); + GenerateDirectoryFilter(); + + Singleton::Config::window()->theme_name=cfg.get("gtk_theme.name"); + Singleton::Config::window()->theme_variant=cfg.get("gtk_theme.variant"); + Singleton::Config::window()->version = cfg.get("version"); + Singleton::Config::terminal()->make_command=cfg.get("project.make_command"); + Singleton::Config::terminal()->cmake_command=cfg.get("project.cmake_command"); +} + bool MainConfig::check_config_file(const boost::property_tree::ptree &default_cfg, std::string parent_path) { if(parent_path.size()>0) parent_path+="."; diff --git a/src/config.h b/src/config.h index bb7337b..7aae271 100644 --- a/src/config.h +++ b/src/config.h @@ -8,6 +8,7 @@ class MainConfig { public: MainConfig(); void find_or_create_config_files(); + void retrieve_config(); bool check_config_file(const boost::property_tree::ptree &default_cfg, std::string parent_path=""); void update_config_file(); void PrintMenu();