From 3ee7c10470e8b107f92ff6ce487b88140b099295 Mon Sep 17 00:00:00 2001 From: VladiMihaylenko Date: Thu, 30 Nov 2017 13:04:01 +0300 Subject: [PATCH] Discovery manager fixes and additionals. --- map/discovery/discovery_manager.cpp | 2 +- map/discovery/discovery_manager.hpp | 28 ++++++++++++++++++++++++++-- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/map/discovery/discovery_manager.cpp b/map/discovery/discovery_manager.cpp index 400a4c30c7..358e1c5ac6 100644 --- a/map/discovery/discovery_manager.cpp +++ b/map/discovery/discovery_manager.cpp @@ -31,7 +31,7 @@ search::SearchParams Manager::GetSearchParams(Manager::Params const & params, It { search::SearchParams p; p.m_query = GetQuery(type); - p.m_inputLocale = params.m_lang; + p.m_inputLocale = "en"; p.m_viewport = params.m_viewport; p.m_position = params.m_viewportCenter; p.m_maxNumResults = params.m_itemsCount; diff --git a/map/discovery/discovery_manager.hpp b/map/discovery/discovery_manager.hpp index dc4278e0c0..f7232a4e22 100644 --- a/map/discovery/discovery_manager.hpp +++ b/map/discovery/discovery_manager.hpp @@ -20,6 +20,7 @@ #include #include +#include #include namespace discovery @@ -70,17 +71,36 @@ public: std::string const sponsoredId = GetCityViatorId(params.m_viewportCenter); if (sponsoredId.empty()) { - onError(requestId, type); + GetPlatform().RunTask(Platform::Thread::Gui, + [requestId, onResult, type] { + onResult(requestId, std::vector()); + }); + break; + } + + if (m_cachedViator.first == sponsoredId) + { + GetPlatform().RunTask(Platform::Thread::Gui, [this, requestId, onResult] { + onResult(requestId, m_cachedViator.second); + }); break; } m_viatorApi.GetTop5Products( sponsoredId, params.m_curency, - [this, requestId, sponsoredId, onResult](std::string const & destId, + [this, requestId, sponsoredId, onResult, onError](std::string const & destId, std::vector const & products) { ASSERT_THREAD_CHECKER(m_threadChecker, ()); if (destId == sponsoredId) + { + if (products.empty()) + { + onError(requestId, ItemType::Viator); + return; + } + m_cachedViator = std::make_pair(sponsoredId, products); onResult(requestId, products); + } }); break; } @@ -142,5 +162,9 @@ private: locals::Api & m_localsApi; uint32_t m_requestCounter = 0; ThreadChecker m_threadChecker; + + // We save last succeed viator result for the nearest city and rewrite it when the nearest city + // was changed. + std::pair> m_cachedViator; }; } // namespace discovery