diff --git a/android/jni/com/mapswithme/maps/Framework.cpp b/android/jni/com/mapswithme/maps/Framework.cpp index 630876fc4f..19590821aa 100644 --- a/android/jni/com/mapswithme/maps/Framework.cpp +++ b/android/jni/com/mapswithme/maps/Framework.cpp @@ -814,6 +814,23 @@ void Framework::GetPromoCityGallery(JNIEnv * env, jobject policy, api->GetCityGallery(point, languages::GetCurrentNorm(), utm, onSuccess, onError); } +void Framework::GetPromoPoiGallery(JNIEnv * env, jobject policy, + m2::PointD const & point, promo::Tags const & tags, + bool useCoordinates, UTM utm, + promo::CityGalleryCallback const & onSuccess, + promo::OnError const & onError) +{ + auto api = NativeFramework()->GetPromoApi(ToNativeNetworkPolicy(env, policy)); + if (api == nullptr) + { + onError(); + return; + } + + api->GetPoiGallery(point, languages::GetCurrentNorm(), tags, useCoordinates, utm, onSuccess, + onError); +} + promo::AfterBooking Framework::GetPromoAfterBooking(JNIEnv * env, jobject policy) { auto api = NativeFramework()->GetPromoApi(ToNativeNetworkPolicy(env, policy)); diff --git a/android/jni/com/mapswithme/maps/Framework.hpp b/android/jni/com/mapswithme/maps/Framework.hpp index b8d7eda5d6..48a5227a6f 100644 --- a/android/jni/com/mapswithme/maps/Framework.hpp +++ b/android/jni/com/mapswithme/maps/Framework.hpp @@ -220,10 +220,13 @@ namespace android uint64_t GetLocals(JNIEnv * env, jobject policy, double lat, double lon, locals::LocalsSuccessCallback const & successFn, locals::LocalsErrorCallback const & errorFn); - void GetPromoCityGallery(JNIEnv * env, jobject policy, - m2::PointD const & point, UTM utm, + void GetPromoCityGallery(JNIEnv * env, jobject policy, m2::PointD const & point, UTM utm, promo::CityGalleryCallback const & onSuccess, promo::OnError const & onError); + void GetPromoPoiGallery(JNIEnv * env, jobject policy, m2::PointD const & point, + promo::Tags const & tags, bool useCoordinates, UTM utm, + promo::CityGalleryCallback const & onSuccess, + promo::OnError const & onError); promo::AfterBooking GetPromoAfterBooking(JNIEnv * env, jobject policy); std::string GetPromoCityUrl(JNIEnv * env, jobject policy, jdouble lat, jdouble lon); diff --git a/android/jni/com/mapswithme/maps/promo/Promo.cpp b/android/jni/com/mapswithme/maps/promo/Promo.cpp index c315d4e532..b2e58ee76b 100644 --- a/android/jni/com/mapswithme/maps/promo/Promo.cpp +++ b/android/jni/com/mapswithme/maps/promo/Promo.cpp @@ -143,6 +143,29 @@ Java_com_mapswithme_maps_promo_Promo_nativeRequestCityGallery(JNIEnv * env, jcla std::bind(OnError, g_lastRequestId)); } +JNIEXPORT void JNICALL +Java_com_mapswithme_maps_promo_Promo_nativeRequestPoiGallery(JNIEnv * env, jclass, + jobject policy, jdouble lat, + jdouble lon, jobjectArray tags, + jint utm) +{ + PrepareClassRefs(env); + auto const point = MercatorBounds::FromLatLon(static_cast(lat), static_cast(lon)); + int const size = env->GetArrayLength(tags); + promo::Tags nativeTags; + for (size_t i = 0; i < size; ++i) + { + auto tag = jni::ToNativeString(env, static_cast(env->GetObjectArrayElement(tags, i))); + nativeTags.emplace_back(std::move(tag)); + } + bool useCoordinates = + GetPlatform().ConnectionStatus() == Platform::EConnectionType::CONNECTION_WIFI; + ++g_lastRequestId; + g_framework->GetPromoPoiGallery(env, policy, point, nativeTags, useCoordinates, + static_cast(utm), std::bind(OnSuccess, g_lastRequestId, _1), + std::bind(OnError, g_lastRequestId)); +} + JNIEXPORT jobject JNICALL Java_com_mapswithme_maps_promo_Promo_nativeGetPromoAfterBooking(JNIEnv * env, jclass, jobject policy) diff --git a/android/src/com/mapswithme/maps/promo/Promo.java b/android/src/com/mapswithme/maps/promo/Promo.java index da85c583eb..529f019dc8 100644 --- a/android/src/com/mapswithme/maps/promo/Promo.java +++ b/android/src/com/mapswithme/maps/promo/Promo.java @@ -52,6 +52,9 @@ public enum Promo public native void nativeRequestCityGallery(@NonNull NetworkPolicy policy, double lat, double lon, @UTM.UTMType int utm); + public native void nativeRequestPoiGallery(@NonNull NetworkPolicy policy, + double lat, double lon, @NonNull String[] tags, + @UTM.UTMType int utm); @Nullable public static native PromoAfterBooking nativeGetPromoAfterBooking(@NonNull NetworkPolicy policy); diff --git a/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java b/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java index e59dce1437..53956f3bcb 100644 --- a/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java +++ b/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java @@ -1271,7 +1271,7 @@ public class PlacePageView extends NestedScrollView private void updateCatalogPromoGallery(@NonNull NetworkPolicy policy) { - boolean hasPromoGallery = mSponsored != null && mSponsored.getType() == Sponsored.TYPE_PROMO_CATALOG; + boolean hasPromoGallery = mSponsored != null && mSponsored.getType() == Sponsored.TYPE_PROMO_CATALOG_CITY; toggleCatalogPromoGallery(hasPromoGallery); if (mSponsored == null || mMapObject == null) diff --git a/android/src/com/mapswithme/maps/widget/placepage/Sponsored.java b/android/src/com/mapswithme/maps/widget/placepage/Sponsored.java index b7bd9754a8..44c6e1ad44 100644 --- a/android/src/com/mapswithme/maps/widget/placepage/Sponsored.java +++ b/android/src/com/mapswithme/maps/widget/placepage/Sponsored.java @@ -28,10 +28,12 @@ public final class Sponsored public static final int TYPE_OPENTABLE = 2; public static final int TYPE_PARTNER = 3; public static final int TYPE_HOLIDAY = 4; - public static final int TYPE_PROMO_CATALOG = 5; + public static final int TYPE_PROMO_CATALOG_CITY = 5; + public static final int TYPE_PROMO_CATALOG_POI = 6; @Retention(RetentionPolicy.SOURCE) - @IntDef({ TYPE_NONE, TYPE_BOOKING, TYPE_OPENTABLE, TYPE_PARTNER, TYPE_HOLIDAY, TYPE_PROMO_CATALOG }) + @IntDef({ TYPE_NONE, TYPE_BOOKING, TYPE_OPENTABLE, TYPE_PARTNER, TYPE_HOLIDAY, + TYPE_PROMO_CATALOG_CITY, TYPE_PROMO_CATALOG_POI }) public @interface SponsoredType {} static class FacilityType diff --git a/android/src/com/mapswithme/util/statistics/Statistics.java b/android/src/com/mapswithme/util/statistics/Statistics.java index 4beeb39b9a..d5306f761b 100644 --- a/android/src/com/mapswithme/util/statistics/Statistics.java +++ b/android/src/com/mapswithme/util/statistics/Statistics.java @@ -1178,7 +1178,10 @@ public enum Statistics return HOLIDAY; case Sponsored.TYPE_PARTNER: return PARTNER; - case Sponsored.TYPE_PROMO_CATALOG: + case Sponsored.TYPE_PROMO_CATALOG_CITY: + return MAPSME_GUIDES; + case Sponsored.TYPE_PROMO_CATALOG_POI: + // Dummy, fix with correct value when documentation will be done. return MAPSME_GUIDES; case Sponsored.TYPE_NONE: return "N/A"; diff --git a/iphone/Maps/UI/PlacePage/MWMPlacePageData.mm b/iphone/Maps/UI/PlacePage/MWMPlacePageData.mm index 73eb060939..14c9610bbf 100644 --- a/iphone/Maps/UI/PlacePage/MWMPlacePageData.mm +++ b/iphone/Maps/UI/PlacePage/MWMPlacePageData.mm @@ -831,7 +831,7 @@ NSString * const kUserDefaultsLatLonAsDMSKey = @"UserDefaultsLatLonAsDMS"; - (BOOL)isOpentable { return m_info.GetSponsoredType() == SponsoredType::Opentable; } - (BOOL)isPartner { return m_info.GetSponsoredType() == SponsoredType::Partner; } - (BOOL)isHolidayObject { return m_info.GetSponsoredType() == SponsoredType::Holiday; } -- (BOOL)isPromoCatalog { return m_info.GetSponsoredType() == SponsoredType::PromoCatalog; } +- (BOOL)isPromoCatalog { return m_info.GetSponsoredType() == SponsoredType::PromoCatalogCity; } - (BOOL)isBookingSearch { return !m_info.GetBookingSearchUrl().empty(); } - (BOOL)isMyPosition { return m_info.IsMyPosition(); } - (BOOL)isHTMLDescription { return strings::IsHTML(GetPreferredBookmarkStr(m_info.GetBookmarkData().m_description)); } diff --git a/map/CMakeLists.txt b/map/CMakeLists.txt index 028d9d76c6..6b7b6109f9 100644 --- a/map/CMakeLists.txt +++ b/map/CMakeLists.txt @@ -95,6 +95,7 @@ set( power_management/power_manager.hpp power_management/power_management_schemas.cpp power_management/power_management_schemas.hpp + promo_catalog_poi_checker.hpp promo_delegate.cpp promo_delegate.hpp purchase.cpp diff --git a/map/framework.cpp b/map/framework.cpp index e3bc50dedc..8a6dd699b1 100644 --- a/map/framework.cpp +++ b/map/framework.cpp @@ -8,6 +8,7 @@ #include "map/gps_tracker.hpp" #include "map/notifications/notification_manager_delegate.hpp" #include "map/notifications/notification_queue.hpp" +#include "map/promo_catalog_poi_checker.hpp" #include "map/promo_delegate.hpp" #include "map/taxi_delegate.hpp" #include "map/user_mark.hpp" @@ -995,7 +996,14 @@ void Framework::FillInfoFromFeatureType(FeatureType & ft, place_page::Info & inf info.SetOpeningMode(m_routingManager.IsRoutingActive() ? place_page::OpeningMode::Preview : place_page::OpeningMode::PreviewPlus); - info.SetSponsoredType(SponsoredType::PromoCatalog); + info.SetSponsoredType(SponsoredType::PromoCatalogCity); + } + else if (ftypes::IsPromoCatalogPoiChecker::Instance()(ft)) + { + info.SetOpeningMode(m_routingManager.IsRoutingActive() + ? place_page::OpeningMode::Preview + : place_page::OpeningMode::PreviewPlus); + info.SetSponsoredType(SponsoredType::PromoCatalogPoi); } FillLocalExperts(ft, info); diff --git a/map/place_page_info.hpp b/map/place_page_info.hpp index f80dfaa669..c90729ad11 100644 --- a/map/place_page_info.hpp +++ b/map/place_page_info.hpp @@ -45,7 +45,8 @@ enum class SponsoredType Opentable, Partner, Holiday, - PromoCatalog, + PromoCatalogCity, + PromoCatalogPoi, }; enum class LocalAdsStatus diff --git a/map/promo_catalog_poi_checker.hpp b/map/promo_catalog_poi_checker.hpp new file mode 100644 index 0000000000..11b3f66a70 --- /dev/null +++ b/map/promo_catalog_poi_checker.hpp @@ -0,0 +1,26 @@ +#pragma once + +#include "partners_api/promo_catalog_types.hpp" + +#include "indexer/ftypes_matcher.hpp" + +#include + +namespace ftypes +{ +class IsPromoCatalogPoiChecker : public BaseChecker +{ +public: + DECLARE_CHECKER_INSTANCE(IsPromoCatalogPoiChecker); + +private: + IsPromoCatalogPoiChecker() + { + auto const & types = promo::GetPromoCatalogPoiTypes(); + for (auto const & type : types) + { + m_types.push_back(classif().GetTypeByPath(type)); + } + } +}; +} // namespace ftypes diff --git a/partners_api/CMakeLists.txt b/partners_api/CMakeLists.txt index c32397c1d7..b39f2c9f24 100644 --- a/partners_api/CMakeLists.txt +++ b/partners_api/CMakeLists.txt @@ -36,6 +36,8 @@ set( partners.hpp promo_api.cpp promo_api.hpp + promo_catalog_types.cpp + promo_catalog_types.hpp rb_ads.cpp rb_ads.hpp rutaxi_api.cpp diff --git a/partners_api/ads_base.cpp b/partners_api/ads_base.cpp index 7b3f2402cc..e6cd5d83af 100644 --- a/partners_api/ads_base.cpp +++ b/partners_api/ads_base.cpp @@ -1,6 +1,7 @@ #include "partners_api/ads_base.hpp" -#include "indexer/classificator.hpp" +#include "partners_api/promo_catalog_types.hpp" + #include "indexer/feature_data.hpp" #include "coding/string_utf8_multilang.hpp" @@ -21,6 +22,8 @@ Container::Container() {"tourism", "motel"}, {"tourism", "resort"}, {"sponsored", "promo_catalog"}}); + + m_excludedTypes.Append(promo::GetPromoCatalogPoiTypes()); } void Container::AppendEntry(std::initializer_list> && types, diff --git a/partners_api/promo_api.cpp b/partners_api/promo_api.cpp index 34b46d298c..00a9ce85a7 100644 --- a/partners_api/promo_api.cpp +++ b/partners_api/promo_api.cpp @@ -20,6 +20,8 @@ #include "3party/jansson/myjansson.hpp" +using namespace base; + using namespace std::chrono; namespace promo @@ -49,7 +51,7 @@ bool NeedToShowImpl(std::string const & bookingPromoAwaitingForId, eye::Eye::Inf void ParseCityGallery(std::string const & src, UTM utm, promo::CityGallery & result) { - base::Json root(src.c_str()); + Json root(src.c_str()); auto const dataArray = json_object_get(root.get(), "data"); auto const size = json_array_size(dataArray); @@ -61,8 +63,9 @@ void ParseCityGallery(std::string const & src, UTM utm, promo::CityGallery & res auto const obj = json_array_get(dataArray, i); FromJSONObject(obj, "name", item.m_name); FromJSONObject(obj, "url", item.m_url); - item.m_url = InjectUTM(base::url::Join(BOOKMARKS_CATALOG_FRONT_URL, item.m_url), utm); + item.m_url = InjectUTM(url::Join(BOOKMARKS_CATALOG_FRONT_URL, item.m_url), utm); FromJSONObject(obj, "access", item.m_access); + FromJSONObjectOptionalField(obj, "description", item.m_description); FromJSONObjectOptionalField(obj, "image_url", item.m_imageUrl); FromJSONObjectOptionalField(obj, "tier", item.m_tier); @@ -81,8 +84,11 @@ void ParseCityGallery(std::string const & src, UTM utm, promo::CityGallery & res } auto const meta = json_object_get(root.get(), "meta"); - FromJSONObject(meta, "more", result.m_moreUrl); - result.m_moreUrl = InjectUTM(base::url::Join(BOOKMARKS_CATALOG_FRONT_URL, result.m_moreUrl), utm); + // Workaround, should be changed to optional field when server will be done. + auto const more = json_object_get(meta, "more"); + if (json_is_string(more)) + FromJSON(more, result.m_moreUrl); + result.m_moreUrl = InjectUTM(url::Join(BOOKMARKS_CATALOG_FRONT_URL, result.m_moreUrl), utm); } std::string ToSignedId(std::string const & id) @@ -97,10 +103,38 @@ std::string ToSignedId(std::string const & id) std::string MakeCityGalleryUrl(std::string const & baseUrl, std::string const & id, std::string const & lang) { + if (id.empty()) + return ""; + + ASSERT(!id.empty(), ()); ASSERT(!baseUrl.empty(), ()); ASSERT_EQUAL(baseUrl.back(), '/', ()); - return baseUrl + "gallery/v1/city/" + ToSignedId(id) + "/?lang=" + lang; + url::Params params = {{"city_id", ToSignedId(id)}, {"lang", lang}}; + return url::Make(url::Join(baseUrl, "gallery/v1/search/"), params); +} + +std::string MakePoiGalleryUrl(std::string const & baseUrl, std::string const & id, + m2::PointD const & point, std::string const & lang, + std::vector const & tags, bool useCoordinates) +{ + auto cityUrl = MakeCityGalleryUrl(baseUrl, id, lang); + if (cityUrl.empty()) + return ""; + + url::Params params; + + if (useCoordinates) + { + auto const latLon = MercatorBounds::ToLatLon(point); + std::ostringstream os; + os << std::fixed << std::setprecision(6) << latLon.m_lat << "," << latLon.m_lon; + params.emplace_back("lat_lon", os.str()); + } + + params.emplace_back("tags", strings::JoinStrings(tags, ",")); + + return url::Make(cityUrl, params); } std::string GetPictureUrl(std::string const & baseUrl, std::string const & id) @@ -120,27 +154,21 @@ std::string GetCityCatalogueUrl(std::string const & baseUrl, std::string const & } -void GetPromoCityGalleryImpl(std::string const & baseUrl, std::string const & id, - std::string const & lang, UTM utm, - CityGalleryCallback const & onSuccess, - OnError const & onError) +void GetPromoCityGalleryImpl(std::string const & url, UTM utm, + CityGalleryCallback const & onSuccess, OnError const & onError) { - ASSERT(!baseUrl.empty(), ()); - ASSERT_EQUAL(baseUrl.back(), '/', ()); - - if (id.empty()) + if (url.empty()) { onSuccess({}); return; } - GetPlatform().RunTask(Platform::Thread::Network, [baseUrl, id, lang, utm, onSuccess, onError]() + GetPlatform().RunTask(Platform::Thread::Network, [url, utm, onSuccess, onError]() { - ASSERT(!id.empty(), ()); - CityGallery result; std::string httpResult; - if (!WebApi::GetCityGalleryById(baseUrl, id, lang, httpResult)) + platform::HttpClient request(url); + if (!request.RunHttpRequest(httpResult)) { onError(); return; @@ -150,14 +178,14 @@ void GetPromoCityGalleryImpl(std::string const & baseUrl, std::string const & id { ParseCityGallery(httpResult, utm, result); } - catch (base::Json::Exception const & e) + catch (Json::Exception const & e) { LOG(LERROR, (e.Msg(), httpResult)); onError(); return; } - onSuccess(std::move(result)); + onSuccess(result.IsEmpty() ? CityGallery{} : std::move(result)); }); } @@ -235,8 +263,18 @@ void Api::GetCityGallery(m2::PointD const & point, std::string const & lang, UTM CityGalleryCallback const & onSuccess, OnError const & onError) const { CHECK(m_delegate, ()); + auto const url = MakeCityGalleryUrl(m_baseUrl, m_delegate->GetCityId(point), lang); + GetPromoCityGalleryImpl(url, utm, onSuccess, onError); +} - GetPromoCityGalleryImpl(m_baseUrl, m_delegate->GetCityId(point), lang, utm, onSuccess, onError); +void Api::GetPoiGallery(m2::PointD const & point, std::string const & lang, Tags const & tags, + bool useCoordinates, UTM utm, CityGalleryCallback const & onSuccess, + OnError const & onError) const +{ + CHECK(m_delegate, ()); + auto const url = + MakePoiGalleryUrl(m_baseUrl, m_delegate->GetCityId(point), point, lang, tags, useCoordinates); + GetPromoCityGalleryImpl(url, utm, onSuccess, onError); } void Api::OnTransitionToBooking(m2::PointD const & hotelPos) diff --git a/partners_api/promo_api.hpp b/partners_api/promo_api.hpp index d6be515525..57cf0467b5 100644 --- a/partners_api/promo_api.hpp +++ b/partners_api/promo_api.hpp @@ -33,6 +33,7 @@ struct CityGallery { std::string m_name; std::string m_url; + std::string m_description; std::string m_imageUrl; std::string m_access; std::string m_tier; @@ -40,6 +41,11 @@ struct CityGallery LuxCategory m_luxCategory; }; + bool IsEmpty() const + { + return m_items.empty() || (m_items.size() == 1 && m_items.back().m_description.empty()); + } + std::string m_moreUrl; std::vector m_items; }; @@ -67,6 +73,7 @@ public: using CityGalleryCallback = platform::SafeCallback; using OnError = platform::SafeCallback; +using Tags = std::vector; class Api : public eye::Subscriber { @@ -79,7 +86,6 @@ public: virtual std::string GetCityId(m2::PointD const & point) = 0; }; - Api(std::string const & baseUrl = BOOKMARKS_CATALOG_FRONT_URL, std::string const & basePicturesUrl = PICTURES_URL); @@ -89,6 +95,9 @@ public: std::string GetCityUrl(m2::PointD const & point) const; void GetCityGallery(m2::PointD const & point, std::string const & lang, UTM utm, CityGalleryCallback const & onSuccess, OnError const & onError) const; + void GetPoiGallery(m2::PointD const & point, std::string const & lang, Tags const & tags, + bool useCoordinates, UTM utm, CityGalleryCallback const & onSuccess, + OnError const & onError) const; // eye::Subscriber overrides: void OnTransitionToBooking(m2::PointD const & hotelPos) override; diff --git a/partners_api/promo_catalog_types.cpp b/partners_api/promo_catalog_types.cpp new file mode 100644 index 0000000000..28af9920c5 --- /dev/null +++ b/partners_api/promo_catalog_types.cpp @@ -0,0 +1,33 @@ +#include "partners_api/promo_catalog_types.hpp" + +namespace +{ +promo::TypesList kTypes = { + {"tourism", "gallery"}, + {"tourism", "museum"}, + {"amenity", "arts_centre"}, + {"historic", "monument"}, + {"historic", "memorial"}, + {"tourism", "attraction"}, + {"historic", "fort"}, + {"historic", "castle"}, + {"tourism", "artwork"}, + {"historic", "ruins"}, + {"leisure", "park"}, + {"leisure", "garden"}, + {"tourism", "theme_park"}, + {"leisure", "water_park"}, + {"amenity", "nightclub"}, + {"amenity", "cinema"}, + {"amenity", "theatre"}, + {"tourism", "viewpoint"} +}; +} // namespace + +namespace promo +{ +TypesList const & GetPromoCatalogPoiTypes() +{ + return kTypes; +} +} // namespace promo diff --git a/partners_api/promo_catalog_types.hpp b/partners_api/promo_catalog_types.hpp new file mode 100644 index 0000000000..740b905742 --- /dev/null +++ b/partners_api/promo_catalog_types.hpp @@ -0,0 +1,9 @@ +#pragma once + +#include + +namespace promo +{ +using TypesList = std::initializer_list>; +TypesList const & GetPromoCatalogPoiTypes(); +} // namespace promo diff --git a/xcode/map/map.xcodeproj/project.pbxproj b/xcode/map/map.xcodeproj/project.pbxproj index b90b8016e8..9fa924770a 100644 --- a/xcode/map/map.xcodeproj/project.pbxproj +++ b/xcode/map/map.xcodeproj/project.pbxproj @@ -23,6 +23,7 @@ 34DDA1821DBE5DF40088A609 /* libtracking.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 34DDA1801DBE5DF40088A609 /* libtracking.a */; }; 3D0AEAFC1FBB0FF400AD042B /* libgenerator_tests_support.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3D0AEAFF1FBB0FF400AD042B /* libgenerator_tests_support.a */; }; 3D0AEAFE1FBB0FF400AD042B /* libsearch_tests_support.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3D0AEB011FBB0FF400AD042B /* libsearch_tests_support.a */; }; + 3D1775A42317E2FD00F8889C /* promo_catalog_poi_checker.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3D1775A22317E2FD00F8889C /* promo_catalog_poi_checker.hpp */; }; 3D18DC3C22956DD100A583A6 /* framework_light_delegate.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3D18DC3922956DD100A583A6 /* framework_light_delegate.hpp */; }; 3D18DC3D22956DD100A583A6 /* promo_delegate.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3D18DC3A22956DD100A583A6 /* promo_delegate.hpp */; }; 3D18DC3E22956DD100A583A6 /* promo_delegate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3D18DC3B22956DD100A583A6 /* promo_delegate.cpp */; }; @@ -269,6 +270,7 @@ 3D0AEAFF1FBB0FF400AD042B /* libgenerator_tests_support.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libgenerator_tests_support.a; sourceTree = BUILT_PRODUCTS_DIR; }; 3D0AEB001FBB0FF400AD042B /* libindexer_tests_support.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libindexer_tests_support.a; sourceTree = BUILT_PRODUCTS_DIR; }; 3D0AEB011FBB0FF400AD042B /* libsearch_tests_support.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libsearch_tests_support.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 3D1775A22317E2FD00F8889C /* promo_catalog_poi_checker.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = promo_catalog_poi_checker.hpp; sourceTree = ""; }; 3D18DC3922956DD100A583A6 /* framework_light_delegate.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = framework_light_delegate.hpp; sourceTree = ""; }; 3D18DC3A22956DD100A583A6 /* promo_delegate.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = promo_delegate.hpp; sourceTree = ""; }; 3D18DC3B22956DD100A583A6 /* promo_delegate.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = promo_delegate.cpp; sourceTree = ""; }; @@ -799,6 +801,7 @@ 675345BD1A4054AD00A0A8C3 /* map */ = { isa = PBXGroup; children = ( + 3D1775A22317E2FD00F8889C /* promo_catalog_poi_checker.hpp */, 3D18DC3922956DD100A583A6 /* framework_light_delegate.hpp */, 3D18DC3B22956DD100A583A6 /* promo_delegate.cpp */, 3D18DC3A22956DD100A583A6 /* promo_delegate.hpp */, @@ -955,6 +958,7 @@ BBA014AE2073C784007402E4 /* bookmark_helpers.hpp in Headers */, F6B283061C1B03320081957A /* gps_track_filter.hpp in Headers */, 3DD1166821888AAC007A2ED4 /* notification_queue_storage.hpp in Headers */, + 3D1775A42317E2FD00F8889C /* promo_catalog_poi_checker.hpp in Headers */, 3D18DC3D22956DD100A583A6 /* promo_delegate.hpp in Headers */, 3D62CBCC20F4DFD600E7BB6E /* search_product_info.hpp in Headers */, F69687C8201B4A3600457650 /* discovery_search_params.hpp in Headers */, diff --git a/xcode/partners_api/partners_api.xcodeproj/project.pbxproj b/xcode/partners_api/partners_api.xcodeproj/project.pbxproj index 1791f9eda9..af0be8b05c 100644 --- a/xcode/partners_api/partners_api.xcodeproj/project.pbxproj +++ b/xcode/partners_api/partners_api.xcodeproj/project.pbxproj @@ -32,6 +32,8 @@ 3D15ACE6214AA1B000F725D5 /* taxi_delegate.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3D15ACE3214AA1AF00F725D5 /* taxi_delegate.hpp */; }; 3D15ACE7214AA1B000F725D5 /* rutaxi_api.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3D15ACE4214AA1B000F725D5 /* rutaxi_api.hpp */; }; 3D15ACE8214AA1B000F725D5 /* rutaxi_api.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3D15ACE5214AA1B000F725D5 /* rutaxi_api.cpp */; }; + 3D1775A72318198700F8889C /* promo_catalog_types.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3D1775A52318198600F8889C /* promo_catalog_types.cpp */; }; + 3D1775A82318198700F8889C /* promo_catalog_types.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3D1775A62318198700F8889C /* promo_catalog_types.hpp */; }; 3D18DC3422953FF600A583A6 /* rutaxi_tests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3D18DC3222953FF600A583A6 /* rutaxi_tests.cpp */; }; 3D18DC4122956DFA00A583A6 /* promo_api.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3D18DC3F22956DFA00A583A6 /* promo_api.hpp */; }; 3D18DC4222956DFA00A583A6 /* promo_api.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3D18DC4022956DFA00A583A6 /* promo_api.cpp */; }; @@ -121,6 +123,8 @@ 3D15ACE3214AA1AF00F725D5 /* taxi_delegate.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = taxi_delegate.hpp; sourceTree = ""; }; 3D15ACE4214AA1B000F725D5 /* rutaxi_api.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = rutaxi_api.hpp; sourceTree = ""; }; 3D15ACE5214AA1B000F725D5 /* rutaxi_api.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = rutaxi_api.cpp; sourceTree = ""; }; + 3D1775A52318198600F8889C /* promo_catalog_types.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = promo_catalog_types.cpp; sourceTree = ""; }; + 3D1775A62318198700F8889C /* promo_catalog_types.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = promo_catalog_types.hpp; sourceTree = ""; }; 3D18DC3222953FF600A583A6 /* rutaxi_tests.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = rutaxi_tests.cpp; sourceTree = ""; }; 3D18DC3F22956DFA00A583A6 /* promo_api.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = promo_api.hpp; sourceTree = ""; }; 3D18DC4022956DFA00A583A6 /* promo_api.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = promo_api.cpp; sourceTree = ""; }; @@ -247,6 +251,8 @@ F6B5363B1DA520B20067EEA5 /* partners_api */ = { isa = PBXGroup; children = ( + 3D1775A52318198600F8889C /* promo_catalog_types.cpp */, + 3D1775A62318198700F8889C /* promo_catalog_types.hpp */, 346E888F1E9D087400D4CE9B /* ads_base.cpp */, 346E88901E9D087400D4CE9B /* ads_base.hpp */, 346E88911E9D087400D4CE9B /* ads_engine.cpp */, @@ -371,6 +377,7 @@ files = ( 3DA5713420B57358007BDE27 /* booking_params_base.hpp in Headers */, 3D18DC4122956DFA00A583A6 /* promo_api.hpp in Headers */, + 3D1775A82318198700F8889C /* promo_catalog_types.hpp in Headers */, 346E88971E9D087400D4CE9B /* ads_base.hpp in Headers */, 3DCD415420DAB33700143533 /* booking_block_params.hpp in Headers */, F67E75261DB8F06F00D6741F /* opentable_api.hpp in Headers */, @@ -495,6 +502,7 @@ 3D18DC4222956DFA00A583A6 /* promo_api.cpp in Sources */, 349CFD0B2045720000569949 /* maxim_api.cpp in Sources */, 3DFEBFA41EFBFC2300317D5C /* yandex_tests.cpp in Sources */, + 3D1775A72318198700F8889C /* promo_catalog_types.cpp in Sources */, 3D452AEF1EE6D202009EAB9B /* google_tests.cpp in Sources */, 3D452AF01EE6D202009EAB9B /* mopub_tests.cpp in Sources */, 3D18DC3422953FF600A583A6 /* rutaxi_tests.cpp in Sources */,