diff --git a/map/discovery/discovery_manager.hpp b/map/discovery/discovery_manager.hpp index 38bb16b1b6..4b3b5a5483 100644 --- a/map/discovery/discovery_manager.hpp +++ b/map/discovery/discovery_manager.hpp @@ -113,11 +113,13 @@ public: } case ItemType::Promo: { - m_promoApi.GetCityGallery(params.m_viewportCenter, [this, requestId, onResult, onError, type](promo::CityGallery const & cityGallery) + m_promoApi.GetCityGallery( + params.m_viewportCenter, + [this, requestId, onResult, onError, type](promo::CityGallery const & cityGallery) { CHECK_THREAD_CHECKER(m_threadChecker, ()); - if (cityGallery.empty()) + if (cityGallery.m_items.empty()) onError(requestId, type); else onResult(requestId, cityGallery); diff --git a/partners_api/partners_api_tests/promo_tests.cpp b/partners_api/partners_api_tests/promo_tests.cpp index 39758eff8a..3ae44ac350 100644 --- a/partners_api/partners_api_tests/promo_tests.cpp +++ b/partners_api/partners_api_tests/promo_tests.cpp @@ -148,7 +148,7 @@ UNIT_CLASS_TEST(ScopedEyeWithAsyncGuiThread, Promo_GetCityGallery) }); testing::Wait(); - TEST_EQUAL(result.size(), 2, ()); + TEST_EQUAL(result.m_items.size(), 2, ()); } { promo::CityGallery result{}; @@ -160,6 +160,6 @@ UNIT_CLASS_TEST(ScopedEyeWithAsyncGuiThread, Promo_GetCityGallery) }); testing::Wait(); - TEST_EQUAL(result.size(), 2, ()); + TEST_EQUAL(result.m_items.size(), 2, ()); } } diff --git a/partners_api/promo_api.cpp b/partners_api/promo_api.cpp index 104617311b..859bdd4032 100644 --- a/partners_api/promo_api.cpp +++ b/partners_api/promo_api.cpp @@ -50,7 +50,7 @@ void ParseCityGallery(std::string const & src, promo::CityGallery & result) auto const size = json_array_size(dataArray); - result.reserve(size); + result.m_items.reserve(size); for (size_t i = 0; i < size; ++i) { promo::CityGalleryItem item; @@ -73,15 +73,20 @@ void ParseCityGallery(std::string const & src, promo::CityGallery & result) FromJSONObject(authorObj, "name", item.m_author.m_name); auto const luxCategoryObj = json_object_get(obj, "lux_category"); + if (!json_is_null(luxCategoryObj)) + { + auto const luxCategoryNameobj = json_object_get(luxCategoryObj, "name"); + if (!json_is_null(luxCategoryNameobj)) + FromJSON(luxCategoryNameobj, item.m_luxCategory.m_name); - auto const luxCategoryNameobj = json_object_get(luxCategoryObj, "name"); - if (!json_is_null(luxCategoryNameobj)) - FromJSON(luxCategoryNameobj, item.m_luxCategory.m_name); + FromJSONObject(luxCategoryObj, "color", item.m_luxCategory.m_color); + } - FromJSONObject(luxCategoryObj, "color", item.m_luxCategory.m_color); - - result.emplace_back(std::move(item)); + result.m_items.emplace_back(std::move(item)); } + + auto const meta = json_object_get(root.get(), "meta"); + FromJSONObject(meta, "more", result.m_moreUrl); } std::string MakeCityGalleryUrl(std::string const & baseUrl, std::string const & id, @@ -111,7 +116,7 @@ void GetPromoCityGalleryImpl(std::string const & baseUrl, std::string const & id catch (base::Json::Exception const & e) { LOG(LERROR, (e.Msg())); - result.clear(); + result.m_items.clear(); } cb(std::move(result)); diff --git a/partners_api/promo_api.hpp b/partners_api/promo_api.hpp index 61da4e17d0..f79c390296 100644 --- a/partners_api/promo_api.hpp +++ b/partners_api/promo_api.hpp @@ -34,7 +34,11 @@ struct CityGalleryItem LuxCategory m_luxCategory; }; -using CityGallery = std::vector; +struct CityGallery +{ + std::string m_moreUrl; + std::vector m_items; +}; class WebApi {