From 48635d9780f8803a2d8ad788802a588a78fd6b2d Mon Sep 17 00:00:00 2001 From: "r.kuznetsov" Date: Tue, 3 Apr 2018 16:16:57 +0300 Subject: [PATCH] Added support of FC2018 category in the core --- map/displayed_categories_modifiers.cpp | 40 ++++++++++++++++++-------- map/displayed_categories_modifiers.hpp | 29 +++++++++++++++++-- map/framework.cpp | 8 ++++-- 3 files changed, 60 insertions(+), 17 deletions(-) diff --git a/map/displayed_categories_modifiers.cpp b/map/displayed_categories_modifiers.cpp index 64f1c99764..3722fcf7f1 100644 --- a/map/displayed_categories_modifiers.cpp +++ b/map/displayed_categories_modifiers.cpp @@ -3,29 +3,45 @@ #include "base/macros.hpp" #include -#include namespace { std::unordered_set const kLuggageHeroesSupportedCities{"London", "New York", "Copenhagen"}; + +std::unordered_set const kFc2018SupportedCities{ + "Moscow", "Saint Petersburg", "Kazan", "Yekaterinburg", "Saransk", "Samara", + "Sochi", "Volgograd", "Rostov-on-Don", "Kaliningrad", "Nizhny Novgorod"}; } // namespace -LuggageHeroModifier::LuggageHeroModifier(std::string const & city) : m_city(city) {} +SponsoredCategoryModifier::SponsoredCategoryModifier(std::string const & currentCity, + SupportedCities const & supportedCities, + std::string const & categoryName, + uint32_t position) + : m_currentCity(currentCity) + , m_supportedCities(supportedCities) + , m_categoryName(categoryName) + , m_position(position) +{} -void LuggageHeroModifier::Modify(search::DisplayedCategories::Keys & keys) +void SponsoredCategoryModifier::Modify(search::DisplayedCategories::Keys & keys) { - static int const kPos = 4; - static std::string const kCategoryName = "luggagehero"; + auto const supported = m_supportedCities.find(m_currentCity) != m_supportedCities.cend(); + auto const contains = std::find(keys.cbegin(), keys.cend(), m_categoryName) != keys.cend(); - auto const supported = - kLuggageHeroesSupportedCities.find(m_city) != kLuggageHeroesSupportedCities.cend(); - auto const contains = std::find(keys.cbegin(), keys.cend(), kCategoryName) != keys.cend(); - - ASSERT_LESS(kPos, keys.size(), ()); + ASSERT_LESS(m_position, keys.size(), ()); if (supported && !contains) - keys.insert(keys.cbegin() + kPos, kCategoryName); + keys.insert(keys.cbegin() + m_position, m_categoryName); else if (!supported && contains) - keys.erase(std::remove(keys.begin(), keys.end(), kCategoryName), keys.end()); + keys.erase(std::remove(keys.begin(), keys.end(), m_categoryName), keys.end()); } + +LuggageHeroModifier::LuggageHeroModifier(std::string const & currentCity) + : SponsoredCategoryModifier(currentCity, kLuggageHeroesSupportedCities, "luggagehero", + 4 /* position */) +{} + +Fc2018Modifier::Fc2018Modifier(std::string const & currentCity) + : SponsoredCategoryModifier(currentCity, kFc2018SupportedCities, "fc2018", 3 /* position */) +{} diff --git a/map/displayed_categories_modifiers.hpp b/map/displayed_categories_modifiers.hpp index 5e6a3e6ebc..155d132c81 100644 --- a/map/displayed_categories_modifiers.hpp +++ b/map/displayed_categories_modifiers.hpp @@ -2,14 +2,37 @@ #include "search/displayed_categories.hpp" -class LuggageHeroModifier : public search::CategoriesModifier +#include +#include + +class SponsoredCategoryModifier : public search::CategoriesModifier { public: - explicit LuggageHeroModifier(std::string const & city); + using SupportedCities = std::unordered_set; + + SponsoredCategoryModifier(std::string const & currentCity, + SupportedCities const & supportedCities, + std::string const & categoryName, + uint32_t position); // CategoriesModifier overrides: void Modify(search::DisplayedCategories::Keys & keys) override; private: - std::string m_city; + std::string const m_currentCity; + SupportedCities const m_supportedCities; + std::string const m_categoryName; + uint32_t const m_position; +}; + +class LuggageHeroModifier : public SponsoredCategoryModifier +{ +public: + explicit LuggageHeroModifier(std::string const & currentCity); +}; + +class Fc2018Modifier : public SponsoredCategoryModifier +{ +public: + explicit Fc2018Modifier(std::string const & currentCity); }; diff --git a/map/framework.cpp b/map/framework.cpp index 5c7c8fd384..fb5f3a28d9 100644 --- a/map/framework.cpp +++ b/map/framework.cpp @@ -1441,8 +1441,12 @@ search::DisplayedCategories const & Framework::GetDisplayedCategories() if (auto const position = GetCurrentPosition()) city = m_cityFinder->GetCityName(*position, StringUtf8Multilang::kEnglishCode); - LuggageHeroModifier modifier(city); - m_displayedCategories->Modify(modifier); + // Apply sponsored modifiers. + std::vector> modifiers; + modifiers.push_back(std::make_unique(city)); + modifiers.push_back(std::make_unique(city)); + for (auto & modifier : modifiers) + m_displayedCategories->Modify(*modifier); return *m_displayedCategories; }