diff options
author | Jacob Keeler <jacob.keeler@livioradio.com> | 2017-09-07 13:46:34 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-09-07 13:46:34 -0400 |
commit | 36a45c9310b920e361a464545bc102eb1f0ebfc4 (patch) | |
tree | 5f3234dc7a3e6d5059d5b92edb75789ef5d7a33b /src/components/application_manager/src | |
parent | 6b5c69d658022613154a7555e26a4d15a1d114da (diff) | |
parent | feeec44f77aeca1ae4fa438d62d9b534cb2e9f6a (diff) | |
download | sdl_core-36a45c9310b920e361a464545bc102eb1f0ebfc4.tar.gz |
Merge pull request #1746 from ChrisB-Elektrobit/feature/metadata_tagging
Feature/metadata tagging
Diffstat (limited to 'src/components/application_manager/src')
-rw-r--r-- | src/components/application_manager/src/commands/mobile/show_request.cc | 62 | ||||
-rw-r--r-- | src/components/application_manager/src/smart_object_keys.cc | 2 |
2 files changed, 62 insertions, 2 deletions
diff --git a/src/components/application_manager/src/commands/mobile/show_request.cc b/src/components/application_manager/src/commands/mobile/show_request.cc index cf2509cdb9..5b8e98d7ea 100644 --- a/src/components/application_manager/src/commands/mobile/show_request.cc +++ b/src/components/application_manager/src/commands/mobile/show_request.cc @@ -45,10 +45,46 @@ namespace commands { ShowRequest::ShowRequest(const MessageSharedPtr& message, ApplicationManager& application_manager) - : CommandRequestImpl(message, application_manager) {} + : CommandRequestImpl(message, application_manager) + , core_result_code_(mobile_apis::Result::INVALID_ENUM) {} ShowRequest::~ShowRequest() {} +void ShowRequest::HandleMetadata(const char* field_id, + int32_t field_index, + smart_objects::SmartObject& msg_params) { + smart_objects::SmartObject& metadata_tags = + (*message_)[strings::msg_params][strings::metadata_tags]; + + if (metadata_tags.keyExists(field_id)) { + if (field_index != -1) { + msg_params[hmi_request::show_strings][field_index] + [hmi_request::field_types] = + smart_objects::SmartObject(smart_objects::SmartType_Array); + + const size_t num_tags = metadata_tags[field_id].length(); + for (size_t i = 0; i < num_tags; ++i) { + const int32_t current_tag = metadata_tags[field_id][i].asInt(); + msg_params[hmi_request::show_strings][field_index] + [hmi_request::field_types][i] = current_tag; + } + } else { + LOG4CXX_INFO(logger_, + "metadata tag provided with no item for " + << field_id << ", ignoring with warning"); + // tag provided with no item, ignore with warning + if (mobile_apis::Result::INVALID_ENUM == core_result_code_) { + core_result_code_ = mobile_apis::Result::WARNINGS; + core_response_info_ = + "Metadata tag was provided for a field with no data."; + } + } + } else { + LOG4CXX_INFO(logger_, + "No metadata tagging provided for field: " << field_id); + } +} + void ShowRequest::Run() { LOG4CXX_AUTO_TRACE(logger_); @@ -125,38 +161,53 @@ void ShowRequest::Run() { smart_objects::SmartObject(smart_objects::SmartType_Array); int32_t index = 0; + int32_t main_field_1_index = -1; if ((*message_)[strings::msg_params].keyExists(strings::main_field_1)) { msg_params[hmi_request::show_strings][index][hmi_request::field_name] = static_cast<int32_t>(hmi_apis::Common_TextFieldName::mainField1); msg_params[hmi_request::show_strings][index][hmi_request::field_text] = (*message_)[strings::msg_params][strings::main_field_1]; + main_field_1_index = index; ++index; } + int32_t main_field_2_index = -1; if ((*message_)[strings::msg_params].keyExists(strings::main_field_2)) { msg_params[hmi_request::show_strings][index][hmi_request::field_name] = static_cast<int32_t>(hmi_apis::Common_TextFieldName::mainField2); msg_params[hmi_request::show_strings][index][hmi_request::field_text] = (*message_)[strings::msg_params][strings::main_field_2]; + main_field_2_index = index; ++index; } + int32_t main_field_3_index = -1; if ((*message_)[strings::msg_params].keyExists(strings::main_field_3)) { msg_params[hmi_request::show_strings][index][hmi_request::field_name] = static_cast<int32_t>(hmi_apis::Common_TextFieldName::mainField3); msg_params[hmi_request::show_strings][index][hmi_request::field_text] = (*message_)[strings::msg_params][strings::main_field_3]; + main_field_3_index = index; ++index; } + int32_t main_field_4_index = -1; if ((*message_)[strings::msg_params].keyExists(strings::main_field_4)) { msg_params[hmi_request::show_strings][index][hmi_request::field_name] = static_cast<int32_t>(hmi_apis::Common_TextFieldName::mainField4); msg_params[hmi_request::show_strings][index][hmi_request::field_text] = (*message_)[strings::msg_params][strings::main_field_4]; + main_field_4_index = index; ++index; } + if ((*message_)[strings::msg_params].keyExists(strings::metadata_tags)) { + HandleMetadata(strings::main_field_1, main_field_1_index, msg_params); + HandleMetadata(strings::main_field_2, main_field_2_index, msg_params); + HandleMetadata(strings::main_field_3, main_field_3_index, msg_params); + HandleMetadata(strings::main_field_4, main_field_4_index, msg_params); + } + if ((*message_)[strings::msg_params].keyExists(strings::media_clock)) { msg_params[hmi_request::show_strings][index][hmi_request::field_name] = static_cast<int32_t>(hmi_apis::Common_TextFieldName::mediaClock); @@ -239,8 +290,15 @@ void ShowRequest::on_event(const event_engine::Event& event) { response_info = message[strings::params][hmi_response::message].asString(); } + mobile_apis::Result::eType converted_result_code = + MessageHelper::HMIToMobileResult(result_code); + if (mobile_apis::Result::SUCCESS == converted_result_code && + mobile_apis::Result::INVALID_ENUM != core_result_code_) { + converted_result_code = core_result_code_; + response_info = core_response_info_; + } SendResponse(result, - MessageHelper::HMIToMobileResult(result_code), + converted_result_code, response_info.empty() ? NULL : response_info.c_str(), &(message[strings::msg_params])); break; diff --git a/src/components/application_manager/src/smart_object_keys.cc b/src/components/application_manager/src/smart_object_keys.cc index d5041ef836..45bab026b4 100644 --- a/src/components/application_manager/src/smart_object_keys.cc +++ b/src/components/application_manager/src/smart_object_keys.cc @@ -57,6 +57,7 @@ const char* main_field_1 = "mainField1"; const char* main_field_2 = "mainField2"; const char* main_field_3 = "mainField3"; const char* main_field_4 = "mainField4"; +const char* metadata_tags = "metadataTags"; const char* eta = "eta"; const char* time_to_destination = "timeToDestination"; const char* total_distance = "totalDistance"; @@ -368,6 +369,7 @@ namespace hmi_request { const char* parent_id = "parentID"; const char* field_name = "fieldName"; const char* field_text = "fieldText"; +const char* field_types = "fieldTypes"; const char* alert_strings = "alertStrings"; const char* duration = "duration"; const char* soft_buttons = "softButtons"; |