From 42646fc776ff938a4440af5d1cc7be41160a3dbb Mon Sep 17 00:00:00 2001 From: Gluzskiy Alexandr Date: Sun, 29 Mar 2015 00:06:35 +0300 Subject: work in progress --- server/src/modules_handler.cpp | 43 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 38 insertions(+), 5 deletions(-) (limited to 'server/src/modules_handler.cpp') diff --git a/server/src/modules_handler.cpp b/server/src/modules_handler.cpp index a6dbcef..1626d91 100644 --- a/server/src/modules_handler.cpp +++ b/server/src/modules_handler.cpp @@ -19,14 +19,23 @@ */ #include "modules_handler.h" +#include "main.h" #include #include #include #include +#include + + + -#include + +namespace bpt = boost::property_tree; + +extern runtime_config_s runtime_config; + extern core_api *module_api; @@ -55,6 +64,7 @@ void modules_handler::load_metadata_modules(const std::string &path) //TODO: aditional sanity checks module_metadata_storage *m = static_cast(f()); m->load(module_api); + sync_module_settings(m); metadata_modules.push_back(m); } } @@ -84,6 +94,7 @@ void modules_handler::load_downloader_modules(const std::string &path) //TODO: aditional sanity checks module_metadata_storage *m = static_cast(f()); m->load(module_api); + sync_module_settings(m); metadata_modules.push_back(m); } } @@ -98,16 +109,27 @@ std::string modules_handler::get_self_path() return s; } -std::string modules_handler::list_modules() +std::string modules_handler::list_modules(short verbose_level) { std::string buf; buf += "Installed metadata modules:\n"; for(auto i = metadata_modules.begin(), end = metadata_modules.end(); i != end; ++i) { - buf += "\t"; + buf += "\tName: "; buf += (*i)->get_module_info().name; - buf += " (" + (*i)->get_module_info().description + ") "; - buf += "v" + (*i)->get_module_info().version; + buf += "\n\tDescription: " +(*i)->get_module_info().description; + buf += "\n\tVersion: " + (*i)->get_module_info().version; + if(runtime_config.verbosity >= 1) + { + buf += "\n\tAvailable options:"; + for(auto i1 = (*i)->get_module_info().default_settings.begin(), end = (*i)->get_module_info().default_settings.end(); i1 != end; ++i1) + { + buf += "\n\t\t"; + buf += i1->first; + buf += " = "; + buf += i1->second; + } + } buf += "\n"; } buf += "Installed downloader modules:\n"; @@ -122,6 +144,17 @@ std::string modules_handler::list_modules() return buf; } +void modules_handler::sync_module_settings(module_base *m) +{ + for(auto i = m->get_module_info().default_settings.begin(), end = m->get_module_info().default_settings.end(); i != end; ++i) + { + std::string setting = "modules." + m->get_module_info().name + "." + i->first; + std::string current_val = runtime_config.config_file.get(setting, "not set"), default_val = i->second; + if(current_val == "not set" || current_val != default_val) + runtime_config.config_file.put(setting, i->second); + } +} + modules_handler::modules_handler() { -- cgit v1.2.3