summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjacobkeeler <jacob.keeler@livioradio.com>2019-03-07 17:20:16 -0500
committerjacobkeeler <jacob.keeler@livioradio.com>2019-03-07 17:20:16 -0500
commitb49f662b54b5be8a67140fca1e8f55f87bef13d2 (patch)
tree8ed93cbfe6cb6c19f7fe4c09d19fb570c923e876
parent0849c4b4de0fa54408a2d353afb4d4de242ef544 (diff)
downloadsdl_core-feature/cloud_app_hybrid_preference.tar.gz
Also fix bug where an app name could coincide with several apps vr synonyms
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/mobile/register_app_interface_request.h6
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/register_app_interface_request.cc25
2 files changed, 19 insertions, 12 deletions
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/mobile/register_app_interface_request.h b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/mobile/register_app_interface_request.h
index a6bfdec209..91ee8ea813 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/mobile/register_app_interface_request.h
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/mobile/register_app_interface_request.h
@@ -144,12 +144,14 @@ class RegisterAppInterfaceRequest
/*
* @brief Check new application parameters (name, tts, vr) for
* coincidence with already known parameters of registered applications
+ * @param out_duplicate_apps In the case other apps was found with duplicate
+ * names, this field will be filled with a list of said apps
*
* return SUCCESS if there is no coincidence of app.name/TTS/VR synonyms,
* otherwise appropriate error code returns
- */
+ */
mobile_apis::Result::eType CheckCoincidence(
- app_mngr::ApplicationSharedPtr& app);
+ std::vector<app_mngr::ApplicationSharedPtr>& out_duplicate_apps);
/*
* @brief Predicate for using with CheckCoincidence method to compare with VR
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/register_app_interface_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/register_app_interface_request.cc
index e4540fe888..924705f82b 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/register_app_interface_request.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/register_app_interface_request.cc
@@ -281,11 +281,13 @@ void RegisterAppInterfaceRequest::Run() {
return;
}
- ApplicationSharedPtr duplicate_app;
+ std::vector<ApplicationSharedPtr> duplicate_apps;
mobile_apis::Result::eType coincidence_result =
- CheckCoincidence(duplicate_app);
+ CheckCoincidence(duplicate_apps);
- if (mobile_apis::Result::DUPLICATE_NAME == coincidence_result) {
+ if (mobile_apis::Result::DUPLICATE_NAME == coincidence_result &&
+ duplicate_apps.size() == 1) {
+ ApplicationSharedPtr duplicate_app = duplicate_apps.front();
bool error_response = true;
if (duplicate_app->is_cloud_app()) {
if (duplicate_app->hybrid_app_preference() ==
@@ -955,7 +957,7 @@ void RegisterAppInterfaceRequest::SendOnAppRegisteredNotificationToHMI(
}
mobile_apis::Result::eType RegisterAppInterfaceRequest::CheckCoincidence(
- ApplicationSharedPtr& out_app) {
+ std::vector<ApplicationSharedPtr>& out_duplicate_apps) {
LOG4CXX_AUTO_TRACE(logger_);
const smart_objects::SmartObject& msg_params =
(*message_)[strings::msg_params];
@@ -971,8 +973,8 @@ mobile_apis::Result::eType RegisterAppInterfaceRequest::CheckCoincidence(
const custom_str::CustomString& cur_name = (*it)->name();
if (app_name.CompareIgnoreCase(cur_name)) {
LOG4CXX_ERROR(logger_, "Application name is known already.");
- out_app = *it;
- return mobile_apis::Result::DUPLICATE_NAME;
+ out_duplicate_apps.push_back(*it);
+ continue;
}
const smart_objects::SmartObject* vr = (*it)->vr_synonyms();
@@ -983,8 +985,8 @@ mobile_apis::Result::eType RegisterAppInterfaceRequest::CheckCoincidence(
if (0 != std::count_if(curr_vr->begin(), curr_vr->end(), v)) {
LOG4CXX_ERROR(logger_, "Application name is known already.");
- out_app = *it;
- return mobile_apis::Result::DUPLICATE_NAME;
+ out_duplicate_apps.push_back(*it);
+ continue;
}
}
@@ -996,13 +998,16 @@ mobile_apis::Result::eType RegisterAppInterfaceRequest::CheckCoincidence(
CoincidencePredicateVR v(cur_name);
if (0 != std::count_if(new_vr->begin(), new_vr->end(), v)) {
LOG4CXX_ERROR(logger_, "vr_synonyms duplicated with app_name .");
- out_app = *it;
- return mobile_apis::Result::DUPLICATE_NAME;
+ out_duplicate_apps.push_back(*it);
+ continue;
}
} // end vr check
} // application for end
+ if (!out_duplicate_apps.empty()) {
+ return mobile_apis::Result::DUPLICATE_NAME;
+ }
return mobile_apis::Result::SUCCESS;
} // method end