From 8dcb02460fe20964065f298a4f92973c97d25b4d Mon Sep 17 00:00:00 2001 From: Arsentiy Milchakov Date: Wed, 19 Apr 2017 18:20:15 +0300 Subject: [PATCH] review fixes --- indexer/ftypes_mapping.hpp | 17 +-- map/CMakeLists.txt | 1 + map/framework.cpp | 15 ++- map/local_ads_manager.cpp | 24 +++- map/local_ads_manager.hpp | 7 +- map/local_ads_supported_types.cpp | 170 ++++++++++++++++++++++++ map/map.pro | 1 + map/place_page_info.hpp | 4 +- partners_api/ads_base.cpp | 13 +- partners_api/ads_base.hpp | 13 +- partners_api/rb_ads.cpp | 2 +- xcode/map/map.xcodeproj/project.pbxproj | 4 + 12 files changed, 236 insertions(+), 35 deletions(-) create mode 100644 map/local_ads_supported_types.cpp diff --git a/indexer/ftypes_mapping.hpp b/indexer/ftypes_mapping.hpp index 715afc8e9d..32dfb36008 100644 --- a/indexer/ftypes_mapping.hpp +++ b/indexer/ftypes_mapping.hpp @@ -15,8 +15,9 @@ template class Matcher { public: - typename Container::const_iterator - Find(feature::TypesHolder const & types) const + using ConstIterator = typename Container::const_iterator; + + ConstIterator Find(feature::TypesHolder const & types) const { for (auto const t : types) { @@ -34,7 +35,7 @@ public: return m_mapping.cend(); } - bool IsValid(typename Container::const_iterator it) const + bool IsValid(ConstIterator it) const { return it != m_mapping.cend(); } @@ -44,8 +45,8 @@ public: return IsValid(Find(types)); } - template - void Append(std::vector> const & types, Args ... args) + template + void Append(TypesPaths const & types, Args const & ... args) { for (auto const & type : types) { @@ -54,7 +55,7 @@ public: holder.Assign(classif().GetTypeByPath(type)); ASSERT(Find(holder) == m_mapping.cend(), ("This type already exists", type)); #endif - m_mapping.emplace(classif().GetTypeByPath(type), std::forward(args)...); + m_mapping.emplace(classif().GetTypeByPath(type), args...); } } @@ -63,8 +64,8 @@ private: }; template -using HashMap = Matcher>; +using HashMapMatcher = Matcher>; template -using HashSet = Matcher>; +using HashSetMatcher = Matcher>; } // namespace ftypes diff --git a/map/CMakeLists.txt b/map/CMakeLists.txt index 0d1b3f62c0..47a7e2eb54 100644 --- a/map/CMakeLists.txt +++ b/map/CMakeLists.txt @@ -45,6 +45,7 @@ set( gps_tracker.hpp local_ads_manager.cpp local_ads_manager.hpp + local_ads_supported_types.cpp mwm_tree.cpp mwm_tree.hpp mwm_url.cpp diff --git a/map/framework.cpp b/map/framework.cpp index 5b427920e2..fa70941677 100644 --- a/map/framework.cpp +++ b/map/framework.cpp @@ -935,13 +935,20 @@ void Framework::FillInfoFromFeatureType(FeatureType const & ft, place_page::Info if (m_localAdsManager.IsSupportedType(info.GetTypes())) { - info.m_localAdsStatus = m_localAdsManager.Contains(ft.GetID()) - ? place_page::LocalAdsStatus::Customer - : place_page::LocalAdsStatus::Candidate; + if (m_localAdsManager.Contains(ft.GetID())) + { + info.m_localAdsStatus = place_page::LocalAdsStatus::Customer; + info.m_localAdsUrl = m_localAdsManager.GetShowStatisticUrl(); + } + else + { + info.m_localAdsStatus = place_page::LocalAdsStatus::Candidate; + info.m_localAdsUrl = m_localAdsManager.GetStartCompanyUrl(); + } } else { - info.m_localAdsStatus = place_page::LocalAdsStatus::Unavailable; + info.m_localAdsStatus = place_page::LocalAdsStatus::NotAvailable; } } diff --git a/map/local_ads_manager.cpp b/map/local_ads_manager.cpp index 801fca7c63..d9c157dc07 100644 --- a/map/local_ads_manager.cpp +++ b/map/local_ads_manager.cpp @@ -36,6 +36,10 @@ std::string const kServerUrl = LOCAL_ADS_SERVER_URL; std::string const kCampaignFile = "local_ads_campaigns.dat"; std::string const kLocalAdsSymbolsFile = "local_ads_symbols.txt"; auto constexpr kWWanUpdateTimeout = std::chrono::hours(12); +// Dummy +std::string const kStartCompanyUrl = "https://maps.me"; +// Dummy +std::string const kShowStatisticUrl = "https://github.com/mapsme/omim/graphs/commit-activity"; void SerializeCampaign(FileWriter & writer, std::string const & countryName, LocalAdsManager::Timestamp const & ts, @@ -142,11 +146,6 @@ std::vector SerializeLocalAdsToJSON(std::list const & return result; } #endif - -void FillExcludeTypes(ftypes::HashSet & excludeTypes) -{ - excludeTypes.Append({{"amenity", "bench"}}); -} } // namespace LocalAdsManager::LocalAdsManager(GetMwmsByRectFn const & getMwmsByRectFn, @@ -179,10 +178,11 @@ void LocalAdsManager::Startup() return; m_isRunning = true; } + FillSupportedTypes(); + m_thread = threads::SimpleThread(&LocalAdsManager::ThreadRoutine, this); m_statistics.Startup(); - FillExcludeTypes(m_excludeTypes); } void LocalAdsManager::Teardown() @@ -459,5 +459,15 @@ bool LocalAdsManager::Contains(FeatureID const & featureId) const bool LocalAdsManager::IsSupportedType(feature::TypesHolder const & types) const { - return !m_excludeTypes.Contains(types); + return m_supportedTypes.Contains(types); +} + +std::string const & LocalAdsManager::GetStartCompanyUrl() const +{ + return kStartCompanyUrl; +} + +std::string const & LocalAdsManager::GetShowStatisticUrl() const +{ + return kShowStatisticUrl; } diff --git a/map/local_ads_manager.hpp b/map/local_ads_manager.hpp index cf6f801c9a..565b2f3aa0 100644 --- a/map/local_ads_manager.hpp +++ b/map/local_ads_manager.hpp @@ -59,6 +59,9 @@ public: bool Contains(FeatureID const & featureId) const; bool IsSupportedType(feature::TypesHolder const & types) const; + std::string const & GetStartCompanyUrl() const; + std::string const & GetShowStatisticUrl() const; + private: enum class RequestType { @@ -78,6 +81,8 @@ private: void UpdateFeaturesCache(df::CustomSymbols const & symbols); + void FillSupportedTypes(); + GetMwmsByRectFn m_getMwmsByRectFn; GetMwmIdByName m_getMwmIdByNameFn; @@ -105,5 +110,5 @@ private: std::set m_featuresCache; mutable std::mutex m_featuresCacheMutex; - ftypes::HashSet m_excludeTypes; + ftypes::HashSetMatcher m_supportedTypes; }; diff --git a/map/local_ads_supported_types.cpp b/map/local_ads_supported_types.cpp new file mode 100644 index 0000000000..18eb30e1df --- /dev/null +++ b/map/local_ads_supported_types.cpp @@ -0,0 +1,170 @@ +#include "map/local_ads_manager.hpp" + +#include + +void LocalAdsManager::FillSupportedTypes() +{ + m_supportedTypes.Append>>( + {{"amenity", "atm"}, + {"amenity", "bank"}, + {"amenity", "bar"}, + {"amenity", "bbq"}, + {"amenity", "bicycle_parking"}, + {"amenity", "bicycle_rental"}, + {"amenity", "brothel"}, + {"amenity", "bureau_de_change"}, + {"amenity", "cafe"}, + {"amenity", "car_rental"}, + {"amenity", "car_sharing"}, + {"amenity", "car_wash"}, + {"amenity", "casino"}, + {"amenity", "charging_station"}, + {"amenity", "childcare"}, + {"amenity", "cinema"}, + {"amenity", "clinic"}, + {"amenity", "college"}, + {"amenity", "community_centre"}, + {"amenity", "courthouse"}, + {"amenity", "dentist"}, + {"amenity", "doctors"}, + {"amenity", "fast_food"}, + {"amenity", "fuel"}, + {"amenity", "grave_yard"}, + {"amenity", "hospital"}, + {"amenity", "hunting_stand"}, + {"amenity", "kindergarten"}, + {"amenity", "library"}, + {"amenity", "marketplace"}, + {"amenity", "nightclub"}, + {"amenity", "parking"}, + {"amenity", "pharmacy"}, + {"amenity", "post_office"}, + {"amenity", "pub"}, + {"amenity", "public_bookcase"}, + {"amenity", "recycling"}, + {"amenity", "restaurant"}, + {"amenity", "school"}, + {"amenity", "shelter"}, + {"amenity", "taxi"}, + {"amenity", "telephone"}, + {"amenity", "theatre"}, + {"amenity", "toilets"}, + {"amenity", "townhall"}, + {"amenity", "university"}, + {"amenity", "vending_machine"}, + {"amenity", "veterinary"}, + {"amenity", "waste_disposal"}, + + {"craft", "brewery"}, + {"craft", "carpenter"}, + {"craft", "electrician"}, + {"craft", "gardener"}, + {"craft", "hvac"}, + {"craft", "metal_construction"}, + {"craft", "painter"}, + {"craft", "photographer"}, + {"craft", "plumber"}, + {"craft", "shoemaker"}, + {"craft", "tailor"}, + + {"historic", "castle"}, + {"historic", "museum"}, + {"historic", "ship"}, + + {"office", "company"}, + {"office", "estate_agent"}, + {"office", "government"}, + {"office", "lawyer"}, + {"office", "telecommunication"}, + + {"shop", "alcohol"}, + {"shop", "bakery"}, + {"shop", "beauty"}, + {"shop", "beverages"}, + {"shop", "bicycle"}, + {"shop", "bookmaker"}, + {"shop", "books"}, + {"shop", "butcher"}, + {"shop", "car"}, + {"shop", "car_parts"}, + {"shop", "car_repair"}, + {"shop", "chemist"}, + {"shop", "clothes"}, + {"shop", "computer"}, + {"shop", "confectionery"}, + {"shop", "convenience"}, + {"shop", "copyshop"}, + {"shop", "cosmetics"}, + {"shop", "department_store"}, + {"shop", "doityourself"}, + {"shop", "dry_cleaning"}, + {"shop", "electronics"}, + {"shop", "florist"}, + {"shop", "furniture"}, + {"shop", "garden_centre"}, + {"shop", "gift"}, + {"shop", "greengrocer"}, + {"shop", "hairdresser"}, + {"shop", "hardware"}, + {"shop", "jewelry"}, + {"shop", "kiosk"}, + {"shop", "laundry"}, + {"shop", "mall"}, + {"shop", "mobile_phone"}, + {"shop", "optician"}, + {"shop", "outdoor"}, + {"shop", "pet"}, + {"shop", "photo"}, + {"shop", "seafood"}, + {"shop", "shoes"}, + {"shop", "sports"}, + {"shop", "supermarket"}, + {"shop", "ticket"}, + {"shop", "toys"}, + {"shop", "travel_agency"}, + {"shop", "tyres"}, + {"shop", "wine"}, + + {"sponsored", "booking"}, + + {"sport", "american_football"}, + {"sport", "archery"}, + {"sport", "athletics"}, + {"sport", "australian_football"}, + {"sport", "baseball"}, + {"sport", "basketball"}, + {"sport", "bowls"}, + {"sport", "cricket"}, + {"sport", "curling"}, + {"sport", "diving"}, + {"sport", "equestrian"}, + {"sport", "football"}, + {"sport", "golf"}, + {"sport", "gymnastics"}, + {"sport", "handball"}, + {"sport", "multi"}, + {"sport", "scuba_diving"}, + {"sport", "shooting"}, + {"sport", "skiing"}, + {"sport", "soccer"}, + {"sport", "swimming"}, + {"sport", "tennis"}, + + {"tourism", "alpine_hut"}, + {"tourism", "apartment"}, + {"tourism", "artwork"}, + {"tourism", "attraction"}, + {"tourism", "camp_site"}, + {"tourism", "caravan_site"}, + {"tourism", "chalet"}, + {"tourism", "guest_house"}, + {"tourism", "hostel"}, + {"tourism", "hotel"}, + {"tourism", "information", "office"}, + {"tourism", "motel"}, + {"tourism", "museum"}, + {"tourism", "picnic_site"}, + {"tourism", "resort"}, + {"tourism", "viewpoint"}, + {"tourism", "zoo"}}); +} diff --git a/map/map.pro b/map/map.pro index a2f5626dbb..9254108a8f 100644 --- a/map/map.pro +++ b/map/map.pro @@ -56,6 +56,7 @@ SOURCES += \ gps_track_storage.cpp \ gps_tracker.cpp \ local_ads_manager.cpp \ + local_ads_supported_types.cpp \ mwm_tree.cpp \ mwm_url.cpp \ place_page_info.cpp \ diff --git a/map/place_page_info.hpp b/map/place_page_info.hpp index 6681303a6d..40f9d87dec 100644 --- a/map/place_page_info.hpp +++ b/map/place_page_info.hpp @@ -34,7 +34,7 @@ enum class SponsoredType enum class LocalAdsStatus { - Unavailable, + NotAvailable, Candidate, Customer }; @@ -160,7 +160,7 @@ public: /// Ads source. ads::Engine * m_adsEngine = nullptr; - LocalAdsStatus m_localAdsStatus = LocalAdsStatus::Unavailable; + LocalAdsStatus m_localAdsStatus = LocalAdsStatus::NotAvailable; string m_localAdsUrl; }; } // namespace place_page diff --git a/partners_api/ads_base.cpp b/partners_api/ads_base.cpp index 0f8633b9b3..7ed510c415 100644 --- a/partners_api/ads_base.cpp +++ b/partners_api/ads_base.cpp @@ -9,18 +9,20 @@ namespace ads { Container::Container() { AppendExcludedTypes({{"sponsored", "booking"}}); } -void Container::AppendEntry(std::vector> const & types, +void Container::AppendEntry(std::initializer_list> && types, std::string const & id) { - m_typesToBanners.Append(types, id); + m_typesToBanners.Append(std::move(types), id); } -void Container::AppendExcludedTypes(std::vector> const & types) +void Container::AppendExcludedTypes( + std::initializer_list> && types) { - m_excludedTypes.Append(types); + m_excludedTypes.Append(std::move(types)); } -void Container::AppendSupportedCountries(std::vector const & countries) +void Container::AppendSupportedCountries( + std::initializer_list const & countries) { m_supportedCountries.insert(countries.begin(), countries.end()); } @@ -33,7 +35,6 @@ bool Container::HasBanner(feature::TypesHolder const & types, { return false; } - return !m_excludedTypes.Contains(types); } diff --git a/partners_api/ads_base.hpp b/partners_api/ads_base.hpp index 023439b43e..d1e9b563ad 100644 --- a/partners_api/ads_base.hpp +++ b/partners_api/ads_base.hpp @@ -7,9 +7,9 @@ #include "base/macros.hpp" #include +#include #include #include -#include namespace feature { @@ -47,13 +47,14 @@ public: std::string GetSearchBannerId() const override; protected: - void AppendEntry(std::vector> const & types, std::string const & id); - void AppendExcludedTypes(std::vector> const & types); - void AppendSupportedCountries(std::vector const & countries); + void AppendEntry(std::initializer_list> && types, + std::string const & id); + void AppendExcludedTypes(std::initializer_list> && types); + void AppendSupportedCountries(std::initializer_list const & countries); private: - ftypes::HashMap m_typesToBanners; - ftypes::HashSet m_excludedTypes; + ftypes::HashMapMatcher m_typesToBanners; + ftypes::HashSetMatcher m_excludedTypes; // All countries are supported when empty. std::unordered_set m_supportedCountries; diff --git a/partners_api/rb_ads.cpp b/partners_api/rb_ads.cpp index 9d6b49948a..d2f358ae19 100644 --- a/partners_api/rb_ads.cpp +++ b/partners_api/rb_ads.cpp @@ -15,7 +15,7 @@ auto const kEntertainmentPlacementId = "9"; auto const kBuildingPlacementId = "11"; auto const kBannerIdForOtherTypes = "14"; -std::vector const kSupportedCountries = +std::initializer_list const kSupportedCountries = { "Azerbaijan Region", "Armenia", diff --git a/xcode/map/map.xcodeproj/project.pbxproj b/xcode/map/map.xcodeproj/project.pbxproj index 84124563e7..23a84f1636 100644 --- a/xcode/map/map.xcodeproj/project.pbxproj +++ b/xcode/map/map.xcodeproj/project.pbxproj @@ -20,6 +20,7 @@ 34921F661BFA0A6900737D6E /* api_mark_point.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 34921F611BFA0A6900737D6E /* api_mark_point.hpp */; }; 34DDA1811DBE5DF40088A609 /* libpartners_api.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 34DDA17F1DBE5DF40088A609 /* libpartners_api.a */; }; 34DDA1821DBE5DF40088A609 /* libtracking.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 34DDA1801DBE5DF40088A609 /* libtracking.a */; }; + 3D74ABBE1EA76F1D0063A898 /* local_ads_supported_types.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3D74ABBD1EA76F1D0063A898 /* local_ads_supported_types.cpp */; }; 45201E931CE4AC90008A4842 /* api_mark_point.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 45201E921CE4AC90008A4842 /* api_mark_point.cpp */; }; 45580ABE1E2CBD5E00CD535D /* benchmark_tools.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 45580ABC1E2CBD5E00CD535D /* benchmark_tools.cpp */; }; 45580ABF1E2CBD5E00CD535D /* benchmark_tools.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 45580ABD1E2CBD5E00CD535D /* benchmark_tools.hpp */; }; @@ -139,6 +140,7 @@ 34AF87EA1DBE5AD000E5E7DC /* common-release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "common-release.xcconfig"; path = "../common-release.xcconfig"; sourceTree = ""; }; 34DDA17F1DBE5DF40088A609 /* libpartners_api.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libpartners_api.a; path = "/Users/igrechuhin/Repo/omim/xcode/partners_api/../../../omim-xcode-build/Debug/libpartners_api.a"; sourceTree = ""; }; 34DDA1801DBE5DF40088A609 /* libtracking.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libtracking.a; path = "/Users/igrechuhin/Repo/omim/xcode/tracking/../../../omim-xcode-build/Debug/libtracking.a"; sourceTree = ""; }; + 3D74ABBD1EA76F1D0063A898 /* local_ads_supported_types.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = local_ads_supported_types.cpp; sourceTree = ""; }; 45201E921CE4AC90008A4842 /* api_mark_point.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = api_mark_point.cpp; sourceTree = ""; }; 45580ABC1E2CBD5E00CD535D /* benchmark_tools.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = benchmark_tools.cpp; sourceTree = ""; }; 45580ABD1E2CBD5E00CD535D /* benchmark_tools.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = benchmark_tools.hpp; sourceTree = ""; }; @@ -413,6 +415,7 @@ 675345BD1A4054AD00A0A8C3 /* map */ = { isa = PBXGroup; children = ( + 3D74ABBD1EA76F1D0063A898 /* local_ads_supported_types.cpp */, 56B6EAF61EA4BAF00037D963 /* mwm_tree.cpp */, 56B6EAF71EA4BAF00037D963 /* mwm_tree.hpp */, 45580ABD1E2CBD5E00CD535D /* benchmark_tools.hpp */, @@ -620,6 +623,7 @@ 342D833A1D5233E8000D8AEA /* displacement_mode_manager.cpp in Sources */, 45201E931CE4AC90008A4842 /* api_mark_point.cpp in Sources */, 675346661A4054E800A0A8C3 /* ge0_parser.cpp in Sources */, + 3D74ABBE1EA76F1D0063A898 /* local_ads_supported_types.cpp in Sources */, 0C2B73DE1E92AB9900530BB8 /* local_ads_manager.cpp in Sources */, F6B283071C1B03320081957A /* gps_track_storage.cpp in Sources */, 6753463A1A4054E800A0A8C3 /* address_finder.cpp in Sources */,