diff options
Diffstat (limited to 'server/src')
-rw-r--r-- | server/src/api_core.cpp | 6 | ||||
-rw-r--r-- | server/src/modules_handler.cpp | 29 | ||||
-rw-r--r-- | server/src/server_session.cpp | 30 |
3 files changed, 45 insertions, 20 deletions
diff --git a/server/src/api_core.cpp b/server/src/api_core.cpp index b407928..f9fe772 100644 --- a/server/src/api_core.cpp +++ b/server/src/api_core.cpp @@ -53,15 +53,15 @@ bool core_api::metadata_remove(module_base *m, const std::string &setting_name) return true; } -std::map<std::string, std::string> core_api::get_module_settings(module_base *m) +std::map<std::string, setting_s> core_api::get_module_settings(module_base *m) { - std::map<std::string, std::string> settings; + std::map<std::string, setting_s> settings; std::string module = "modules."; module += m->get_module_info().name; try{ for(auto i : runtime_config.config_file.get_child(module)) { - settings[i.first] = i.second.get_value<std::string>(""); + settings[i.first].value = i.second.get_value<std::string>(""); } } catch(...) diff --git a/server/src/modules_handler.cpp b/server/src/modules_handler.cpp index 32c3b9f..6d351bb 100644 --- a/server/src/modules_handler.cpp +++ b/server/src/modules_handler.cpp @@ -137,7 +137,7 @@ std::string modules_handler::list_modules_single_type_internal(const std::list<m buf += "\n\t\t"; buf += i1.first; buf += " = "; - buf += i1.second; + buf += i1.second.value; } } buf += "\n\n"; @@ -147,12 +147,13 @@ std::string modules_handler::list_modules_single_type_internal(const std::list<m void modules_handler::sync_module_settings(module_base *m) { + //update config file with available modules settings for(auto i : m->get_module_info().default_settings) { std::string setting = "modules." + m->get_module_info().name + "." + i.first; - std::string current_val = runtime_config.config_file.get<std::string>(setting, "not set"), default_val = i.second; - if(current_val == "not set" || current_val != default_val) - runtime_config.config_file.put(setting, i.second); + std::string current_val = runtime_config.config_file.get<std::string>(setting, "not set"); + if(current_val == "not set") + runtime_config.config_file.put(setting, i.second.value); } } @@ -177,24 +178,24 @@ void modules_handler::load_modules() void modules_handler::on_modules_loaded() { - for(auto i = metadata_modules.begin(), end = metadata_modules.end(); i != end; ++i) + for(auto i : metadata_modules) { - if(!(*i)->get_module_info().on_modules_loaded.empty()) - (*i)->get_module_info().on_modules_loaded(); + if(!i->get_module_info().on_modules_loaded.empty()) + i->get_module_info().on_modules_loaded(); } - for(auto i = downloader_modules.begin(), end = downloader_modules.end(); i != end; ++i) + for(auto i : downloader_modules) { - if(!(*i)->get_module_info().on_modules_loaded.empty()) - (*i)->get_module_info().on_modules_loaded(); + if(!i->get_module_info().on_modules_loaded.empty()) + i->get_module_info().on_modules_loaded(); } } void modules_handler::load_modules_settings() { - for(auto i = metadata_modules.begin(), end = metadata_modules.end(); i != end; ++i) - (*i)->set_module_settings(module_api->get_module_settings(*i)); - for(auto i = downloader_modules.begin(), end = downloader_modules.end(); i != end; ++i) - (*i)->set_module_settings(module_api->get_module_settings(*i)); + for(auto i : metadata_modules) + i->set_module_settings(module_api->get_module_settings(i)); + for(auto i : downloader_modules) + i->set_module_settings(module_api->get_module_settings(i)); } std::list<module_base*> &modules_handler::get_metadata_modules() diff --git a/server/src/server_session.cpp b/server/src/server_session.cpp index 64f2cfe..3affc5f 100644 --- a/server/src/server_session.cpp +++ b/server/src/server_session.cpp @@ -26,8 +26,10 @@ #include "utilities.h" #include "socket_wraper.h" #include "client.h" +#include "modules_handler.h" extern std::map<std::string, client> clients; +extern modules_handler *modules; @@ -183,8 +185,6 @@ void server_session::handle_command(client_msg *msg) } else client_ = i->second; - - //set auth token } send_message(&m); @@ -192,11 +192,35 @@ void server_session::handle_command(client_msg *msg) break; case CLIENT_MSG_TYPE::CLIENT_MODULES_REQUEST: { - //TODO: + server_msg msg; + msg.set_type(SERVER_MSG_TYPE::SERVER_MODULES_REPLY); + for(auto i : modules->get_downloader_modules()) + { + module_info *mi = msg.add_server_modules_reply(); + mi->set_name(i->get_module_info().name); + mi->set_description(i->get_module_info().description); + mi->set_version(i->get_module_info().version); + for(auto ms : i->get_runtime_module_settings()) + { + setting *msi = mi->add_settings(); + msi->set_name(ms.first); + msi->set_value(ms.second.value); + for(auto di : ms.second.info.dependencies) + msi->mutable_info()->add_dependencies(di); + for(auto bi : ms.second.info.blockers) + msi->mutable_info()->add_blockers(bi); + msi->mutable_info()->set_default_value(ms.second.info.default_value); + msi->mutable_info()->set_minimal_value(ms.second.info.minimal_value); + msi->mutable_info()->set_maximal_value(ms.second.info.maximal_value); + msi->mutable_info()->set_description(ms.second.info.description); + } + } + send_message(&msg); } break; case CLIENT_MSG_TYPE::CLIENT_CORE_INFO_REQUEST: { + //TODO: settings values here server_msg msg; msg.set_type(SERVER_MSG_TYPE::SERVER_CORE_INFO_REPLY); msg.mutable_server_core_info_reply()->set_version(1); |