diff options
Diffstat (limited to 'server')
-rw-r--r-- | server/include/api_module_downloader.h | 6 | ||||
-rw-r--r-- | server/src/server_session.cpp | 183 |
2 files changed, 163 insertions, 26 deletions
diff --git a/server/include/api_module_downloader.h b/server/include/api_module_downloader.h index dc31811..33a3fce 100644 --- a/server/include/api_module_downloader.h +++ b/server/include/api_module_downloader.h @@ -38,14 +38,16 @@ enum MODULE_UI_ELEMENT_TYPE_e { struct module_download_ui_element_info_s { MODULE_UI_ELEMENT_TYPE_e type = UI_EMPTY_; std::list<module_download_ui_element_info_s> children; - std::string name; // name can be non unique + std::string name, description; // name can be non unique, description is optional + bool data_required = false; //set to true if ui element require data from client (used in download creation ui) int id; //internal element id used to get element value (should be unique for every loaded module) }; //TODO: some mechanism for module to tell it's abilities, for example if it can provide download content, e.t.c. struct module_download_menu_element_info_s { - std::string id, name, description; //internal element id used to get element value (should be unique for every loaded module), name can be non unique, description is optional + std::string name, description; // name can be non unique, description is optional + int id; //internal element id used to get element value (should be unique for every loaded module) bool data_required = false; //set to true if menu element require data from client std::list<module_download_menu_element_info_s> children; //element with children cannot be executed, it's just container }; diff --git a/server/src/server_session.cpp b/server/src/server_session.cpp index d0ff26c..ca4df5a 100644 --- a/server/src/server_session.cpp +++ b/server/src/server_session.cpp @@ -118,6 +118,147 @@ void server_session::handle_read(const boost::system::error_code& error, size_t } } +void add_runtime_module_setting(const std::pair<std::string, setting_s> &s, module_info *mi) +{ + setting *msi = mi->add_settings(); + msi->set_name(s.first); + msi->set_value(s.second.value); + for(auto di : s.second.info.dependencies) + msi->mutable_info()->add_dependencies(di); + for(auto bi : s.second.info.blockers) + msi->mutable_info()->add_blockers(bi); + msi->mutable_info()->set_default_value(s.second.info.default_value); + msi->mutable_info()->set_minimal_value(s.second.info.minimal_value); + msi->mutable_info()->set_maximal_value(s.second.info.maximal_value); + msi->mutable_info()->set_description(s.second.info.description); + +} + + +void add_download_info_ui_element(module_download_ui_element_info_s& element, module_download_ui_element_info *mi) +{ + module_download_ui_element_info *e = mi->add_children(); + e->set_description(element.description); + e->set_name(element.name); + e->set_id(element.id); + switch(element.type) + { + case MODULE_UI_ELEMENT_TYPE_e::UI_EMPTY_: + e->set_type(MODULE_UI_ELEMENT_TYPE::UI_EMPTY); + break; + case MODULE_UI_ELEMENT_TYPE_e::UI_GROUP_: + e->set_type(MODULE_UI_ELEMENT_TYPE::UI_GROUP); + break; + case MODULE_UI_ELEMENT_TYPE_e::UI_INTEGER_: + e->set_type(MODULE_UI_ELEMENT_TYPE::UI_INTEGER); + break; + case MODULE_UI_ELEMENT_TYPE_e::UI_PROGRESS_BAR_: + e->set_type(MODULE_UI_ELEMENT_TYPE::UI_PROGRESS_BAR); + break; + case MODULE_UI_ELEMENT_TYPE_e::UI_STR_: + e->set_type(MODULE_UI_ELEMENT_TYPE::UI_STR); + break; + default: + e->set_type(MODULE_UI_ELEMENT_TYPE::UI_EMPTY); + break; + } + for(auto ui_element: element.children) + add_download_info_ui_element(ui_element, e); +} + +void add_download_info_ui_element(module_download_ui_element_info_s& element, module_info *mi) +{ + module_download_ui_element_info *e = mi->add_download_info_ui(); + e->set_description(element.description); + e->set_name(element.name); + e->set_id(element.id); + switch(element.type) + { + case MODULE_UI_ELEMENT_TYPE_e::UI_EMPTY_: + e->set_type(MODULE_UI_ELEMENT_TYPE::UI_EMPTY); + break; + case MODULE_UI_ELEMENT_TYPE_e::UI_GROUP_: + e->set_type(MODULE_UI_ELEMENT_TYPE::UI_GROUP); + break; + case MODULE_UI_ELEMENT_TYPE_e::UI_INTEGER_: + e->set_type(MODULE_UI_ELEMENT_TYPE::UI_INTEGER); + break; + case MODULE_UI_ELEMENT_TYPE_e::UI_PROGRESS_BAR_: + e->set_type(MODULE_UI_ELEMENT_TYPE::UI_PROGRESS_BAR); + break; + case MODULE_UI_ELEMENT_TYPE_e::UI_STR_: + e->set_type(MODULE_UI_ELEMENT_TYPE::UI_STR); + break; + default: + e->set_type(MODULE_UI_ELEMENT_TYPE::UI_EMPTY); + break; + } + for(auto ui_element: element.children) + add_download_info_ui_element(ui_element, e); +} + +void add_download_create_ui_element(module_download_ui_element_info_s& element, module_info *mi) +{ + module_download_ui_element_info *e = mi->add_download_creation_ui(); + e->set_description(element.description); + e->set_name(element.name); + e->set_id(element.id); + switch(element.type) + { + case MODULE_UI_ELEMENT_TYPE_e::UI_EMPTY_: + e->set_type(MODULE_UI_ELEMENT_TYPE::UI_EMPTY); + break; + case MODULE_UI_ELEMENT_TYPE_e::UI_GROUP_: + e->set_type(MODULE_UI_ELEMENT_TYPE::UI_GROUP); + break; + case MODULE_UI_ELEMENT_TYPE_e::UI_INTEGER_: + e->set_type(MODULE_UI_ELEMENT_TYPE::UI_INTEGER); + break; + case MODULE_UI_ELEMENT_TYPE_e::UI_PROGRESS_BAR_: + e->set_type(MODULE_UI_ELEMENT_TYPE::UI_PROGRESS_BAR); + break; + case MODULE_UI_ELEMENT_TYPE_e::UI_STR_: + e->set_type(MODULE_UI_ELEMENT_TYPE::UI_STR); + break; + default: + e->set_type(MODULE_UI_ELEMENT_TYPE::UI_EMPTY); + break; + } + for(auto ui_element: element.children) + add_download_info_ui_element(ui_element, e); +} + +void add_download_menu_element(module_download_menu_element_info_s &element, module_download_menu_element_info *mi) +{ + module_download_menu_element_info *e = mi->add_children(); + e->set_description(element.description); + e->set_id(element.id); + e->set_name(element.name); + for(auto menu_element: element.children) + add_download_menu_element(menu_element, e); +} + +void add_download_menu_element(module_download_menu_element_info_s &element, module_info *mi) +{ + module_download_menu_element_info *e = mi->add_download_menu(); + e->set_description(element.description); + e->set_id(element.id); + e->set_name(element.name); + for(auto menu_element: element.children) + add_download_menu_element(menu_element, e); +} + +void add_download_content_menu_element(module_download_menu_element_info_s &element, module_info *mi) +{ + module_download_menu_element_info *e = mi->add_download_content_menu(); + e->set_description(element.description); + e->set_id(element.id); + e->set_name(element.name); + for(auto menu_element: element.children) + add_download_menu_element(menu_element, e); +} + + void server_session::handle_command(client_msg *msg) { if(msg->type() != CLIENT_MSG_TYPE::CLIENT_AUTH_REQUEST && clients.find(msg->auth_token()) == clients.end()) @@ -208,19 +349,25 @@ void server_session::handle_command(client_msg *msg) mi->set_description(i->get_module_info().description); mi->set_version(i->get_module_info().version); for(auto ms : i->get_runtime_module_settings()) + add_runtime_module_setting(ms, mi); + const downloader_module_info &dmi = static_cast<const downloader_module_info&>(i->get_module_info()); + for(auto ui_element : dmi.download_info_ui) + add_download_info_ui_element(ui_element, mi); + for(auto ui_element : dmi.download_creation_ui) + add_download_create_ui_element(ui_element, mi); + for(auto menu_entry : dmi.download_root_menu) + add_download_menu_element(menu_entry, mi); + for(auto menu_entry : dmi.download_content_menu) + add_download_content_menu_element(menu_entry, mi); + for(auto si : dmi.get_downloads_parameters_info) { - 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); + string_pair *p = mi->add_get_downloads_parameters_info(); + p->set_name(si.first); + p->set_value(si.second); } + + + } for(auto i : modules->get_metadata_modules()) { @@ -230,19 +377,7 @@ void server_session::handle_command(client_msg *msg) 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); - } + add_runtime_module_setting(ms, mi); } send_message(&msg); } |