diff --git a/iphone/Maps/Maps.xcodeproj/project.pbxproj b/iphone/Maps/Maps.xcodeproj/project.pbxproj index 04772e86f7..aa7f931710 100644 --- a/iphone/Maps/Maps.xcodeproj/project.pbxproj +++ b/iphone/Maps/Maps.xcodeproj/project.pbxproj @@ -2487,6 +2487,7 @@ "-losrm", "-lsuccinct", "-ObjC", + "-lopening_hours", ); PRODUCT_NAME = "maps.me drape rel"; SDKROOT = iphoneos; @@ -2599,6 +2600,7 @@ "-losrm", "-lsuccinct", "-ObjC", + "-lopening_hours", ); PRODUCT_NAME = "maps.me drape dbg"; SDKROOT = iphoneos; @@ -3105,6 +3107,7 @@ "-losrm", "-lsuccinct", "-ObjC", + "-lopening_hours", ); PRODUCT_NAME = "maps.me dbg"; SDKROOT = iphoneos; @@ -3213,6 +3216,7 @@ "-losrm", "-lsuccinct", "-ObjC", + "-lopening_hours", ); PRODUCT_NAME = "maps.me dbg"; SDKROOT = iphoneos; @@ -3324,6 +3328,7 @@ "-losrm", "-lsuccinct", "-ObjC", + "-lopening_hours", ); PRODUCT_NAME = "maps.me beta"; SDKROOT = iphoneos; @@ -3436,6 +3441,7 @@ "-losrm", "-lsuccinct", "-ObjC", + "-lopening_hours", ); PRODUCT_NAME = maps.me; SDKROOT = iphoneos; @@ -3547,6 +3553,7 @@ "-losrm", "-lsuccinct", "-ObjC", + "-lopening_hours", ); PRODUCT_NAME = "maps.me rel"; SDKROOT = iphoneos; @@ -3656,6 +3663,7 @@ "-losrm", "-lsuccinct", "-ObjC", + "-lopening_hours", ); PRODUCT_NAME = "maps.me rel"; SDKROOT = iphoneos; diff --git a/qt/qt.pro b/qt/qt.pro index 05f563c726..c100464782 100644 --- a/qt/qt.pro +++ b/qt/qt.pro @@ -1,7 +1,7 @@ # Main application in qt. ROOT_DIR = .. DEPENDENCIES = map render gui routing search storage indexer graphics platform anim geometry coding base \ - freetype expat fribidi tomcrypt jansson protobuf osrm stats_client minizip succinct + freetype expat fribidi tomcrypt jansson protobuf osrm stats_client minizip succinct opening_hours drape { DEPENDENCIES *= drape_frontend drape diff --git a/search/integration_tests/integration_tests.pro b/search/integration_tests/integration_tests.pro index f38c5145e1..59b636a317 100644 --- a/search/integration_tests/integration_tests.pro +++ b/search/integration_tests/integration_tests.pro @@ -6,7 +6,8 @@ CONFIG -= app_bundle TEMPLATE = app ROOT_DIR = ../.. -DEPENDENCIES = generator routing search storage stats_client jansson indexer platform geometry coding sgitess base protobuf tomcrypt +DEPENDENCIES = generator routing search storage stats_client jansson indexer platform geometry coding base \ + sgitess protobuf tomcrypt opening_hours include($$ROOT_DIR/common.pri) diff --git a/search/intermediate_result.cpp b/search/intermediate_result.cpp index 725413962b..2ad808fbb5 100644 --- a/search/intermediate_result.cpp +++ b/search/intermediate_result.cpp @@ -1,3 +1,5 @@ +#include "3party/opening_hours/osm_time_range.hpp" + #include "intermediate_result.hpp" #include "geometry_utils.hpp" @@ -124,6 +126,9 @@ PreResult2::PreResult2(FeatureType const & f, PreResult1 const * p, m2::PointD c m_region.SetParams(fileName, fCenter); CalcParams(pivot); + + f.ParseMetadata(); + ProcessMetadata(f.GetMetadata()); } PreResult2::PreResult2(double lat, double lon) @@ -141,6 +146,17 @@ PreResult2::PreResult2(m2::PointD const & pt, string const & str, uint32_t type) m_types.Assign(type); } +void PreResult2::ProcessMetadata(feature::Metadata const & meta) +{ + m_metadata.cuisine = meta.Get(feature::Metadata::FMD_CUISINE); + m_metadata.isClosed = + OSMTimeRange(meta.Get(feature::Metadata::FMD_OPEN_HOURS))(time(nullptr)).IsClosed(); + + m_metadata.stars = 0; + strings::to_int(meta.Get(feature::Metadata::FMD_STARS), m_metadata.stars); + m_metadata.stars = my::clamp(m_metadata.stars, 0, 5); +} + namespace { class SkipRegionInfo @@ -193,7 +209,7 @@ Result PreResult2::GenerateFinalResult( #ifdef DEBUG + ' ' + strings::to_string(int(m_rank)) #endif - , type); + , type, m_metadata); case RESULT_BUILDING: return Result(GetCenter(), m_str, info.m_name, ReadableFeatureType(pCat, pTypes, locale)); diff --git a/search/intermediate_result.hpp b/search/intermediate_result.hpp index 85987cd303..08a96988de 100644 --- a/search/intermediate_result.hpp +++ b/search/intermediate_result.hpp @@ -163,6 +163,10 @@ private: ResultType m_resultType; uint8_t m_rank; feature::EGeomType m_geomType; + + Result::Metadata m_metadata; + + void ProcessMetadata(feature::Metadata const & meta); }; inline string DebugPrint(PreResult2 const & t) diff --git a/search/result.cpp b/search/result.cpp index 2a66b3bdf0..6f9a9b79fa 100644 --- a/search/result.cpp +++ b/search/result.cpp @@ -2,15 +2,18 @@ #include "geometry_utils.hpp" #include "search_common.hpp" - namespace search { - -Result::Result(FeatureID const & id, m2::PointD const & pt, - string const & str, string const & region, - string const & type, uint32_t featureType) - : m_id(id), m_center(pt), m_str(str), m_region(region), - m_type(type), m_featureType(featureType) +Result::Result(FeatureID const & id, m2::PointD const & pt, string const & str, + string const & region, string const & type, uint32_t featureType, + Metadata const & meta) + : m_id(id) + , m_center(pt) + , m_str(str) + , m_region(region) + , m_type(type) + , m_featureType(featureType) + , m_metadata(meta) { // Features with empty names can be found after suggestion. if (m_str.empty()) diff --git a/search/result.hpp b/search/result.hpp index 94f8b12398..135c871b6f 100644 --- a/search/result.hpp +++ b/search/result.hpp @@ -25,10 +25,16 @@ public: RESULT_SUGGEST_FROM_FEATURE }; + struct Metadata + { + string cuisine; + bool isClosed; + int stars; + }; + /// For RESULT_FEATURE. - Result(FeatureID const & id, m2::PointD const & pt, - string const & str, string const & region, - string const & type, uint32_t featureType); + Result(FeatureID const & id, m2::PointD const & pt, string const & str, string const & region, + string const & type, uint32_t featureType, Metadata const & meta); /// Used for point-like results on the map. Result(m2::PointD const & pt, string const & str, string const & type); @@ -48,8 +54,12 @@ public: char const * GetString() const { return m_str.c_str(); } char const * GetRegionString() const { return m_region.c_str(); } char const * GetFeatureType() const { return m_type.c_str(); } + char const * GetCuisine() const { return m_metadata.cuisine.c_str(); } //@} + bool IsClosed() const { return m_metadata.isClosed; } + uint8_t GetStarsCount() const { return m_metadata.stars; } + bool IsSuggest() const; bool HasPoint() const; @@ -84,6 +94,8 @@ private: uint32_t m_featureType; string m_suggestionStr; buffer_vector, 4> m_hightlightRanges; + + Metadata m_metadata; }; class Results