From 0d005a09d0500328bafb1057766963f2f1ad19a7 Mon Sep 17 00:00:00 2001 From: Arsentiy Milchakov Date: Thu, 23 May 2019 15:13:21 +0300 Subject: [PATCH] [promo_api] inject promo api into discovery manager --- map/discovery/discovery_client_params.hpp | 3 ++- map/discovery/discovery_manager.cpp | 2 ++ map/discovery/discovery_manager.hpp | 20 ++++++++++++++++++-- partners_api/promo_api.cpp | 12 +++--------- partners_api/promo_api.hpp | 5 +++-- 5 files changed, 28 insertions(+), 14 deletions(-) diff --git a/map/discovery/discovery_client_params.hpp b/map/discovery/discovery_client_params.hpp index 86dd677d26..e476fadfda 100644 --- a/map/discovery/discovery_client_params.hpp +++ b/map/discovery/discovery_client_params.hpp @@ -12,7 +12,8 @@ enum class ItemType Attractions, Cafes, Hotels, - LocalExperts + LocalExperts, + Promo }; using ItemTypes = std::vector; diff --git a/map/discovery/discovery_manager.cpp b/map/discovery/discovery_manager.cpp index d4d10678dc..546a2fc69e 100644 --- a/map/discovery/discovery_manager.cpp +++ b/map/discovery/discovery_manager.cpp @@ -16,6 +16,7 @@ std::string GetQuery(discovery::ItemType const type) case discovery::ItemType::Attractions: return "attractions "; case discovery::ItemType::Cafes: return "cafe "; case discovery::ItemType::LocalExperts: return ""; + case discovery::ItemType::Promo: return ""; } UNREACHABLE(); @@ -27,6 +28,7 @@ namespace discovery Manager::Manager(DataSource const & dataSource, APIs const & apis) : m_dataSource(dataSource) , m_searchApi(apis.m_search) + , m_promoApi(apis.m_promo) , m_localsApi(apis.m_locals) { } diff --git a/map/discovery/discovery_manager.hpp b/map/discovery/discovery_manager.hpp index a94808d761..38bb16b1b6 100644 --- a/map/discovery/discovery_manager.hpp +++ b/map/discovery/discovery_manager.hpp @@ -8,6 +8,7 @@ #include "partners_api/booking_api.hpp" #include "partners_api/locals_api.hpp" +#include "partners_api/promo_api.hpp" #include "platform/marketing_service.hpp" #include "platform/platform.hpp" @@ -32,12 +33,13 @@ class Manager final public: struct APIs { - APIs(SearchAPI & search, locals::Api & locals) - : m_search(search), m_locals(locals) + APIs(SearchAPI & search, promo::Api & promo, locals::Api & locals) + : m_search(search), m_promo(promo), m_locals(locals) { } SearchAPI & m_search; + promo::Api & m_promo; locals::Api & m_locals; }; @@ -109,6 +111,19 @@ public: }); break; } + case ItemType::Promo: + { + m_promoApi.GetCityGallery(params.m_viewportCenter, [this, requestId, onResult, onError, type](promo::CityGallery const & cityGallery) + { + CHECK_THREAD_CHECKER(m_threadChecker, ()); + + if (cityGallery.empty()) + onError(requestId, type); + else + onResult(requestId, cityGallery); + }); + break; + } } } return requestId; @@ -121,6 +136,7 @@ private: DataSource const & m_dataSource; SearchAPI & m_searchApi; + promo::Api & m_promoApi; locals::Api & m_localsApi; uint32_t m_requestCounter = 0; ThreadChecker m_threadChecker; diff --git a/partners_api/promo_api.cpp b/partners_api/promo_api.cpp index 27bde9762d..104617311b 100644 --- a/partners_api/promo_api.cpp +++ b/partners_api/promo_api.cpp @@ -96,17 +96,11 @@ void GetPromoCityGalleryImpl(std::string const & baseUrl, std::string const & id ASSERT(!baseUrl.empty(), ()); ASSERT_EQUAL(baseUrl.back(), '/', ()); - if (id.empty()) - { - GetPlatform().RunTask(Platform::Thread::Gui, [cb]() { cb({}); }); - return; - } - CityGallery result; std::string httpResult; - if (!WebApi::GetCityGalleryById(baseUrl, id, languages::GetCurrentNorm(), httpResult)) + if (id.empty() || !WebApi::GetCityGalleryById(baseUrl, id, languages::GetCurrentNorm(), httpResult)) { - GetPlatform().RunTask(Platform::Thread::Gui, [cb]() { cb({}); }); + cb({}); return; } @@ -120,7 +114,7 @@ void GetPromoCityGalleryImpl(std::string const & baseUrl, std::string const & id result.clear(); } - GetPlatform().RunTask(Platform::Thread::Gui, [ cb, result = move(result) ]() { cb(result); }); + cb(std::move(result)); } } // namespace diff --git a/partners_api/promo_api.hpp b/partners_api/promo_api.hpp index c75aac7b6f..61da4e17d0 100644 --- a/partners_api/promo_api.hpp +++ b/partners_api/promo_api.hpp @@ -2,9 +2,10 @@ #include "metrics/eye.hpp" +#include "platform/safe_callback.hpp" + #include "geometry/point2d.hpp" -#include #include #include #include @@ -42,7 +43,7 @@ public: std::string const & lang, std::string & result); }; -using CityGalleryCallback = std::function; +using CityGalleryCallback = platform::SafeCallback; class Api : public eye::Subscriber {