diff options
author | Arsentiy Milchakov <milcars@mapswithme.com> | 2019-04-19 22:33:49 +0300 |
---|---|---|
committer | Tatiana Yan <tatiana.kondakova@gmail.com> | 2019-04-22 18:47:33 +0300 |
commit | ddc65679bc06c72e4946a476360541cd87db51e3 (patch) | |
tree | 977245abbd6b911087913528d1cc98d5f838d410 /map | |
parent | 01c771fe7f945a53581a7badb0a6b840e98f572a (diff) |
[booking][search] store viewport search params into SearchApi instead of forwarding search params into callbacks.
Diffstat (limited to 'map')
-rw-r--r-- | map/everywhere_search_callback.cpp | 3 | ||||
-rw-r--r-- | map/everywhere_search_callback.hpp | 3 | ||||
-rw-r--r-- | map/framework.cpp | 5 | ||||
-rw-r--r-- | map/map_integration_tests/interactive_search_test.cpp | 13 | ||||
-rw-r--r-- | map/search_api.cpp | 15 | ||||
-rw-r--r-- | map/search_api.hpp | 6 | ||||
-rw-r--r-- | map/viewport_search_callback.cpp | 14 | ||||
-rw-r--r-- | map/viewport_search_callback.hpp | 17 | ||||
-rw-r--r-- | map/viewport_search_params.hpp | 4 |
9 files changed, 49 insertions, 31 deletions
diff --git a/map/everywhere_search_callback.cpp b/map/everywhere_search_callback.cpp index c0d8b80f73..fa524c8a85 100644 --- a/map/everywhere_search_callback.cpp +++ b/map/everywhere_search_callback.cpp @@ -15,8 +15,7 @@ EverywhereSearchCallback::EverywhereSearchCallback( { } -void EverywhereSearchCallback::operator()(Results const & results, - SearchParamsBase const & /* params */) +void EverywhereSearchCallback::operator()(Results const & results) { 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 794047ceb3..743aaf7e34 100644 --- a/map/everywhere_search_callback.hpp +++ b/map/everywhere_search_callback.hpp @@ -5,7 +5,6 @@ #include "map/search_product_info.hpp" #include "search/result.hpp" -#include "search/search_params.hpp" #include <functional> #include <vector> @@ -30,7 +29,7 @@ public: booking::filter::Tasks const & bookingFilterTasks, EverywhereSearchParams::OnResults onResults); - void operator()(Results const & results, SearchParamsBase const &); + void operator()(Results const & results); private: Delegate & m_hotelsDelegate; diff --git a/map/framework.cpp b/map/framework.cpp index de7b2268c5..7cdcf744c4 100644 --- a/map/framework.cpp +++ b/map/framework.cpp @@ -319,7 +319,6 @@ void Framework::OnViewportChanged(ScreenBase const & screen) return; m_currentModelView = screen; - auto const zoomLevel = static_cast<uint8_t>(df::GetZoomLevel(screen.GetScale())); GetSearchAPI().OnViewportChanged(GetCurrentViewport()); @@ -2982,10 +2981,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); + params.m_onResults(results); results.SetEndMarker(false /* isCancelled */); - params.m_onResults(results, params); + params.m_onResults(results); return true; } else if (params.m_query == "?eclear") diff --git a/map/map_integration_tests/interactive_search_test.cpp b/map/map_integration_tests/interactive_search_test.cpp index ba3552a743..5c3c6f26ff 100644 --- a/map/map_integration_tests/interactive_search_test.cpp +++ b/map/map_integration_tests/interactive_search_test.cpp @@ -59,8 +59,8 @@ public: { } - void FilterAllHotelsInViewport(m2::RectD const & viewport, - booking::filter::Tasks const & filterTasks) override + virtual void FilterAllHotelsInViewport(m2::RectD const & viewport, + booking::filter::Tasks const & filterTasks) override { } @@ -76,10 +76,11 @@ 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, - search::SearchParamsBase{}))); + SetCustomOnResults( + ViewportSearchCallback(viewport, + static_cast<ViewportSearchCallback::Delegate &>(*this), + {} /* bookingFilterTasks */, + bind(&InteractiveSearchRequest::OnResults, this, placeholders::_1))); } }; diff --git a/map/search_api.cpp b/map/search_api.cpp index c6f7fd2e1c..42ca752b70 100644 --- a/map/search_api.cpp +++ b/map/search_api.cpp @@ -3,7 +3,6 @@ #include "map/bookmarks_search_params.hpp" #include "map/discovery/discovery_search_params.hpp" #include "map/everywhere_search_params.hpp" -#include "map/viewport_search_params.hpp" #include "partners_api/booking_api.hpp" @@ -93,7 +92,7 @@ public: explicit BookmarksSearchCallback(OnResults const & onResults) : m_onResults(onResults) {} - void operator()(Results const & results, SearchParamsBase const & /* params */) + void operator()(Results const & results) { if (results.IsEndMarker()) { @@ -217,7 +216,8 @@ bool SearchAPI::SearchInViewport(ViewportSearchParams const & params) }; p.m_onResults = ViewportSearchCallback( - static_cast<ViewportSearchCallback::Delegate &>(*this), + m_viewport, + static_cast<ViewportSearchCallback::Delegate &>(*this), params.m_bookingFilterTasks, [this, params](Results const & results) { if (results.IsEndMarker() && params.m_onCompleted) @@ -226,6 +226,7 @@ bool SearchAPI::SearchInViewport(ViewportSearchParams const & params) m_delegate.OnBookingFilterParamsUpdate(params.m_bookingFilterTasks); + m_viewportParams = params; return Search(p, false /* forceSearch */); } @@ -284,6 +285,14 @@ void SearchAPI::PokeSearchInViewport(bool forceSearch) auto params = m_searchIntents[static_cast<size_t>(Mode::Viewport)].m_params; SetViewportIfPossible(params); params.m_position = m_delegate.GetCurrentPosition(); + params.m_onResults = ViewportSearchCallback( + m_viewport, + static_cast<ViewportSearchCallback::Delegate &>(*this), + m_viewportParams.m_bookingFilterTasks, + [this](Results const & results) { + if (results.IsEndMarker() && m_viewportParams.m_onCompleted) + RunUITask([p = m_viewportParams, results] { p.m_onCompleted(results); }); + }); Search(params, forceSearch); } diff --git a/map/search_api.hpp b/map/search_api.hpp index 3e29df3356..4108c9b573 100644 --- a/map/search_api.hpp +++ b/map/search_api.hpp @@ -5,6 +5,7 @@ #include "map/everywhere_search_callback.hpp" #include "map/search_product_info.hpp" #include "map/viewport_search_callback.hpp" +#include "map/viewport_search_params.hpp" #include "search/downloader_search_callback.hpp" #include "search/engine.hpp" @@ -33,7 +34,6 @@ namespace search { struct BookmarksSearchParams; struct EverywhereSearchParams; -struct ViewportSearchParams; struct DiscoverySearchParams; } @@ -179,4 +179,8 @@ private: m2::RectD m_viewport; bool m_isViewportInitialized = false; + + // Viewport search callback should be changed every time when SearchAPI::PokeSearchInViewport + // is called and we need viewport search params to construct it. + search::ViewportSearchParams m_viewportParams; }; diff --git a/map/viewport_search_callback.cpp b/map/viewport_search_callback.cpp index 971c26e531..40f89c0866 100644 --- a/map/viewport_search_callback.cpp +++ b/map/viewport_search_callback.cpp @@ -1,6 +1,7 @@ #include "map/viewport_search_callback.hpp" #include "search/result.hpp" +#include "search/utils.hpp" #include "base/assert.hpp" @@ -31,10 +32,11 @@ booking::filter::Types FillBookingFilterTypes(search::Results const & results, namespace search { -ViewportSearchCallback::ViewportSearchCallback(Delegate & delegate, +ViewportSearchCallback::ViewportSearchCallback(m2::RectD const & viewport, Delegate & delegate, booking::filter::Tasks const & bookingFilterTasks, - ViewportSearchParams::OnResults const & onResults) - : m_delegate(delegate) + OnResults const & onResults) + : m_viewport(viewport) + , m_delegate(delegate) , m_onResults(onResults) , m_firstCall(true) , m_lastResultsSize(0) @@ -42,7 +44,7 @@ ViewportSearchCallback::ViewportSearchCallback(Delegate & delegate, { } -void ViewportSearchCallback::operator()(Results const & results, SearchParamsBase const & params) +void ViewportSearchCallback::operator()(Results const & results) { ASSERT_LESS_OR_EQUAL(m_lastResultsSize, results.GetCount(), ()); @@ -94,8 +96,8 @@ void ViewportSearchCallback::operator()(Results const & results, SearchParamsBas if (results.IsEndedNormal() && results.GetType() == Results::Type::Hotels && !m_bookingFilterTasks.IsEmpty()) { - if (params.m_viewport.IsValid()) - m_delegate.FilterAllHotelsInViewport(params.m_viewport, m_bookingFilterTasks); + if (m_viewport.IsValid()) + m_delegate.FilterAllHotelsInViewport(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 41c7a7942a..78e508c01a 100644 --- a/map/viewport_search_callback.hpp +++ b/map/viewport_search_callback.hpp @@ -1,7 +1,6 @@ #pragma once #include "map/booking_filter_params.hpp" -#include "map/viewport_search_params.hpp" #include "search/hotels_classifier.hpp" #include "search/result.hpp" @@ -9,8 +8,9 @@ #include "geometry/rect2d.hpp" -#include <cstdint> #include <functional> +#include <string> +#include <vector> namespace search { @@ -38,14 +38,19 @@ public: booking::filter::Tasks const & filterTasks) = 0; }; - ViewportSearchCallback(Delegate & delegate, booking::filter::Tasks const & bookingFilterTasks, - ViewportSearchParams::OnResults const & onResults); + using OnResults = SearchParams::OnResults; - void operator()(Results const & results, SearchParamsBase const & params); + ViewportSearchCallback(m2::RectD const & viewport, Delegate & delegate, + booking::filter::Tasks const & bookingFilterTasks, + OnResults const & onResults); + + void operator()(Results const & results); private: + m2::RectD m_viewport; + Delegate & m_delegate; - ViewportSearchParams::OnResults m_onResults; + 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 b87bf706b3..c257c0de65 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 OnResults = std::function<void(Results const & results)>; + using OnCompleted = 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; - OnResults m_onCompleted; + OnCompleted m_onCompleted; }; } // namespace search |