Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/map
diff options
context:
space:
mode:
authorArsentiy Milchakov <milcars@mapswithme.com>2019-04-15 18:28:54 +0300
committerTatiana Yan <tatiana.kondakova@gmail.com>2019-04-22 18:47:33 +0300
commit01c771fe7f945a53581a7badb0a6b840e98f572a (patch)
treea747713bde42905d1d99698a9fb59b2e7ccb2c21 /map
parent2397d5d659b53cd7d7f4787ba6ae5e24189302f2 (diff)
[booking][search] booking filter improvement. review fixes
Diffstat (limited to 'map')
-rw-r--r--map/everywhere_search_callback.cpp3
-rw-r--r--map/everywhere_search_callback.hpp3
-rw-r--r--map/framework.cpp16
-rw-r--r--map/framework.hpp1
-rw-r--r--map/map_integration_tests/interactive_search_test.cpp13
-rw-r--r--map/search_api.cpp32
-rw-r--r--map/search_api.hpp3
-rw-r--r--map/viewport_search_callback.cpp14
-rw-r--r--map/viewport_search_callback.hpp17
-rw-r--r--map/viewport_search_params.hpp4
10 files changed, 59 insertions, 47 deletions
diff --git a/map/everywhere_search_callback.cpp b/map/everywhere_search_callback.cpp
index fa524c8a85..c0d8b80f73 100644
--- a/map/everywhere_search_callback.cpp
+++ b/map/everywhere_search_callback.cpp
@@ -15,7 +15,8 @@ EverywhereSearchCallback::EverywhereSearchCallback(
{
}
-void EverywhereSearchCallback::operator()(Results const & results)
+void EverywhereSearchCallback::operator()(Results const & results,
+ SearchParamsBase const & /* params */)
{
auto const prevSize = m_productInfo.size();
ASSERT_LESS_OR_EQUAL(prevSize, results.GetCount(), ());
diff --git a/map/everywhere_search_callback.hpp b/map/everywhere_search_callback.hpp
index 743aaf7e34..794047ceb3 100644
--- a/map/everywhere_search_callback.hpp
+++ b/map/everywhere_search_callback.hpp
@@ -5,6 +5,7 @@
#include "map/search_product_info.hpp"
#include "search/result.hpp"
+#include "search/search_params.hpp"
#include <functional>
#include <vector>
@@ -29,7 +30,7 @@ public:
booking::filter::Tasks const & bookingFilterTasks,
EverywhereSearchParams::OnResults onResults);
- void operator()(Results const & results);
+ void operator()(Results const & results, SearchParamsBase const &);
private:
Delegate & m_hotelsDelegate;
diff --git a/map/framework.cpp b/map/framework.cpp
index 88a1527b4d..de7b2268c5 100644
--- a/map/framework.cpp
+++ b/map/framework.cpp
@@ -319,6 +319,7 @@ void Framework::OnViewportChanged(ScreenBase const & screen)
return;
m_currentModelView = screen;
+ auto const zoomLevel = static_cast<uint8_t>(df::GetZoomLevel(screen.GetScale()));
GetSearchAPI().OnViewportChanged(GetCurrentViewport());
@@ -2981,10 +2982,10 @@ bool Framework::ParseEditorDebugCommand(search::SearchParams const & params)
results.AddResultNoChecks(search::Result(fid, feature::GetCenter(*ft), name, edit.second,
types.GetBestType(), smd));
}
- params.m_onResults(results);
+ params.m_onResults(results, params);
results.SetEndMarker(false /* isCancelled */);
- params.m_onResults(results);
+ params.m_onResults(results, params);
return true;
}
else if (params.m_query == "?eclear")
@@ -3847,18 +3848,15 @@ void Framework::FilterResultsForHotelsQuery(booking::filter::Tasks const & filte
}
};
- tasksInternal.emplace_back(type, std::move(paramsInternal));
+ tasksInternal.emplace_back(type, move(paramsInternal));
}
- m_bookingFilterProcessor.ApplyFilters(results, std::move(tasksInternal), filterTasks.GetMode());
+ m_bookingFilterProcessor.ApplyFilters(results, move(tasksInternal), filterTasks.GetMode());
}
void Framework::FilterHotels(booking::filter::Tasks const & filterTasks,
vector<FeatureID> && featureIds)
{
- if (featureIds.size() > booking::RawApi::GetMaxHotelsInAvailabilityRequest())
- return;
-
using namespace booking::filter;
TasksRawInternal tasksInternal;
@@ -3896,10 +3894,10 @@ void Framework::FilterHotels(booking::filter::Tasks const & filterTasks,
}
};
- tasksInternal.emplace_back(type, std::move(paramsInternal));
+ tasksInternal.emplace_back(type, move(paramsInternal));
}
- m_bookingFilterProcessor.ApplyFilters(std::move(featureIds), std::move(tasksInternal),
+ m_bookingFilterProcessor.ApplyFilters(move(featureIds), move(tasksInternal),
filterTasks.GetMode());
}
diff --git a/map/framework.hpp b/map/framework.hpp
index 28ef5d81e3..8aa2f01d70 100644
--- a/map/framework.hpp
+++ b/map/framework.hpp
@@ -82,6 +82,7 @@
#include "base/strings_bundle.hpp"
#include "base/thread_checker.hpp"
+#include "std/cstdint.hpp"
#include "std/function.hpp"
#include "std/list.hpp"
#include "std/set.hpp"
diff --git a/map/map_integration_tests/interactive_search_test.cpp b/map/map_integration_tests/interactive_search_test.cpp
index f6d6f18bde..ba3552a743 100644
--- a/map/map_integration_tests/interactive_search_test.cpp
+++ b/map/map_integration_tests/interactive_search_test.cpp
@@ -59,6 +59,11 @@ public:
{
}
+ void FilterAllHotelsInViewport(m2::RectD const & viewport,
+ booking::filter::Tasks const & filterTasks) override
+ {
+ }
+
private:
Stats & m_stats;
};
@@ -71,10 +76,10 @@ public:
: TestDelegate(stats)
, TestSearchRequest(engine, query, "en" /* locale */, Mode::Viewport, viewport)
{
- SetCustomOnResults(
- ViewportSearchCallback(static_cast<ViewportSearchCallback::Delegate &>(*this),
- {} /* bookingFilterTasks */,
- bind(&InteractiveSearchRequest::OnResults, this, placeholders::_1)));
+ SetCustomOnResults(ViewportSearchCallback(
+ static_cast<ViewportSearchCallback::Delegate &>(*this), {} /* bookingFilterTasks */,
+ bind(&InteractiveSearchRequest::OnResults, this, placeholders::_1,
+ search::SearchParamsBase{})));
}
};
diff --git a/map/search_api.cpp b/map/search_api.cpp
index 11e9d86f3b..c6f7fd2e1c 100644
--- a/map/search_api.cpp
+++ b/map/search_api.cpp
@@ -5,6 +5,8 @@
#include "map/everywhere_search_params.hpp"
#include "map/viewport_search_params.hpp"
+#include "partners_api/booking_api.hpp"
+
#include "search/bookmarks/processor.hpp"
#include "search/geometry_utils.hpp"
#include "search/hotels_filter.hpp"
@@ -23,6 +25,7 @@
#include "base/timer.hpp"
#include <algorithm>
+#include <cmath>
#include <iterator>
#include <map>
#include <string>
@@ -38,6 +41,9 @@ using BookmarkIdDoc = pair<bookmarks::Id, bookmarks::Doc>;
double const kDistEqualQueryMeters = 100.0;
double const kDistEqualQueryMercator = MercatorBounds::MetersToMercator(kDistEqualQueryMeters);
+// 200 sqared kilometers.
+auto const kMaxAreaToLoadAllHotelsInViewport = 200000000.0;
+
// Cancels search query by |handle|.
void CancelQuery(weak_ptr<ProcessorHandle> & handle)
{
@@ -87,7 +93,7 @@ public:
explicit BookmarksSearchCallback(OnResults const & onResults) : m_onResults(onResults) {}
- void operator()(Results const & results)
+ void operator()(Results const & results, SearchParamsBase const & /* params */)
{
if (results.IsEndMarker())
{
@@ -211,7 +217,6 @@ bool SearchAPI::SearchInViewport(ViewportSearchParams const & params)
};
p.m_onResults = ViewportSearchCallback(
- m_viewport,
static_cast<ViewportSearchCallback::Delegate &>(*this),
params.m_bookingFilterTasks,
[this, params](Results const & results) {
@@ -341,15 +346,22 @@ void SearchAPI::FilterResultsForHotelsQuery(booking::filter::Tasks const & filte
void SearchAPI::FilterAllHotelsInViewport(m2::RectD const & viewport,
booking::filter::Tasks const & filterTasks)
{
+ if (MercatorBounds::AreaOnEarth(viewport) > kMaxAreaToLoadAllHotelsInViewport)
+ return;
+
+ auto constexpr kMaxHotelFeatures = booking::RawApi::GetMaxHotelsInAvailabilityRequest();
vector<FeatureID> featureIds;
- auto const types = search::GetCategoryTypes("hotel", "en", GetDefaultCategories());
- search::ForEachOfTypesInRect(m_dataSource, types, m_viewport,
- [&featureIds](FeatureID const & id)
- {
- featureIds.push_back(id);
- });
-
- m_delegate.FilterHotels(filterTasks, move(featureIds));
+ auto static const types = search::GetCategoryTypes("hotel", "en", GetDefaultCategories());
+ search::ForEachOfTypesInRect(m_dataSource, types, viewport, [&featureIds](FeatureID const & id) {
+ if (featureIds.size() > kMaxHotelFeatures)
+ return base::ControlFlow::Break;
+
+ featureIds.push_back(id);
+ return base::ControlFlow::Continue;
+ });
+
+ if (featureIds.size() <= kMaxHotelFeatures)
+ m_delegate.FilterHotels(filterTasks, move(featureIds));
}
void SearchAPI::OnBookmarksCreated(vector<pair<kml::MarkId, kml::BookmarkData>> const & marks)
diff --git a/map/search_api.hpp b/map/search_api.hpp
index c6c4dde85b..3e29df3356 100644
--- a/map/search_api.hpp
+++ b/map/search_api.hpp
@@ -18,6 +18,7 @@
#include "geometry/rect2d.hpp"
#include <cstddef>
+#include <cstdint>
#include <functional>
#include <memory>
#include <string>
@@ -85,7 +86,7 @@ public:
}
virtual void FilterHotels(booking::filter::Tasks const & filterTasks,
- vector<FeatureID> && featureIds)
+ std::vector<FeatureID> && featureIds)
{
}
diff --git a/map/viewport_search_callback.cpp b/map/viewport_search_callback.cpp
index 40f89c0866..971c26e531 100644
--- a/map/viewport_search_callback.cpp
+++ b/map/viewport_search_callback.cpp
@@ -1,7 +1,6 @@
#include "map/viewport_search_callback.hpp"
#include "search/result.hpp"
-#include "search/utils.hpp"
#include "base/assert.hpp"
@@ -32,11 +31,10 @@ booking::filter::Types FillBookingFilterTypes(search::Results const & results,
namespace search
{
-ViewportSearchCallback::ViewportSearchCallback(m2::RectD const & viewport, Delegate & delegate,
+ViewportSearchCallback::ViewportSearchCallback(Delegate & delegate,
booking::filter::Tasks const & bookingFilterTasks,
- OnResults const & onResults)
- : m_viewport(viewport)
- , m_delegate(delegate)
+ ViewportSearchParams::OnResults const & onResults)
+ : m_delegate(delegate)
, m_onResults(onResults)
, m_firstCall(true)
, m_lastResultsSize(0)
@@ -44,7 +42,7 @@ ViewportSearchCallback::ViewportSearchCallback(m2::RectD const & viewport, Deleg
{
}
-void ViewportSearchCallback::operator()(Results const & results)
+void ViewportSearchCallback::operator()(Results const & results, SearchParamsBase const & params)
{
ASSERT_LESS_OR_EQUAL(m_lastResultsSize, results.GetCount(), ());
@@ -96,8 +94,8 @@ void ViewportSearchCallback::operator()(Results const & results)
if (results.IsEndedNormal() && results.GetType() == Results::Type::Hotels &&
!m_bookingFilterTasks.IsEmpty())
{
- if (m_viewport.IsValid())
- m_delegate.FilterAllHotelsInViewport(m_viewport, m_bookingFilterTasks);
+ if (params.m_viewport.IsValid())
+ m_delegate.FilterAllHotelsInViewport(params.m_viewport, m_bookingFilterTasks);
m_delegate.FilterResultsForHotelsQuery(m_bookingFilterTasks, results, true /* inViewport */);
}
diff --git a/map/viewport_search_callback.hpp b/map/viewport_search_callback.hpp
index 78e508c01a..41c7a7942a 100644
--- a/map/viewport_search_callback.hpp
+++ b/map/viewport_search_callback.hpp
@@ -1,6 +1,7 @@
#pragma once
#include "map/booking_filter_params.hpp"
+#include "map/viewport_search_params.hpp"
#include "search/hotels_classifier.hpp"
#include "search/result.hpp"
@@ -8,9 +9,8 @@
#include "geometry/rect2d.hpp"
+#include <cstdint>
#include <functional>
-#include <string>
-#include <vector>
namespace search
{
@@ -38,19 +38,14 @@ public:
booking::filter::Tasks const & filterTasks) = 0;
};
- using OnResults = SearchParams::OnResults;
+ ViewportSearchCallback(Delegate & delegate, booking::filter::Tasks const & bookingFilterTasks,
+ ViewportSearchParams::OnResults const & onResults);
- ViewportSearchCallback(m2::RectD const & viewport, Delegate & delegate,
- booking::filter::Tasks const & bookingFilterTasks,
- OnResults const & onResults);
-
- void operator()(Results const & results);
+ void operator()(Results const & results, SearchParamsBase const & params);
private:
- m2::RectD m_viewport;
-
Delegate & m_delegate;
- OnResults m_onResults;
+ ViewportSearchParams::OnResults m_onResults;
bool m_firstCall;
size_t m_lastResultsSize;
diff --git a/map/viewport_search_params.hpp b/map/viewport_search_params.hpp
index c257c0de65..b87bf706b3 100644
--- a/map/viewport_search_params.hpp
+++ b/map/viewport_search_params.hpp
@@ -15,7 +15,7 @@ class Results;
struct ViewportSearchParams
{
using OnStarted = std::function<void()>;
- using OnCompleted = std::function<void(Results const & results)>;
+ using OnResults = std::function<void(Results const & results)>;
std::string m_query;
std::string m_inputLocale;
@@ -23,6 +23,6 @@ struct ViewportSearchParams
booking::filter::Tasks m_bookingFilterTasks;
OnStarted m_onStarted;
- OnCompleted m_onCompleted;
+ OnResults m_onCompleted;
};
} // namespace search