diff --git a/routing/osrm_router.cpp b/routing/osrm_router.cpp index 53e646615e..995968eda1 100644 --- a/routing/osrm_router.cpp +++ b/routing/osrm_router.cpp @@ -555,8 +555,8 @@ OsrmRouter::ResultCode OsrmRouter::CalculateRoute(m2::PointD const & startPoint, UNUSED_VALUE(finalMappingGuard); LOG(LINFO, ("Duration of the MWM loading", timer.ElapsedNano())); timer.Reset(); - if (progressCallback) - progressCallback(10.f); + + progressCallback(10.0f); // 3. Find start/end nodes. TFeatureGraphNodeVec startTask; @@ -582,8 +582,7 @@ OsrmRouter::ResultCode OsrmRouter::CalculateRoute(m2::PointD const & startPoint, LOG(LINFO, ("Duration of the start/stop points lookup", timer.ElapsedNano())); timer.Reset(); - if (progressCallback) - progressCallback(15.f); + progressCallback(15.f); // 4. Find route. RawRoutingResult routingResult; @@ -602,8 +601,7 @@ OsrmRouter::ResultCode OsrmRouter::CalculateRoute(m2::PointD const & startPoint, return RouteNotFound; } INTERRUPT_WHEN_CANCELLED(); - if (progressCallback) - progressCallback(70.0f); + progressCallback(70.0f); // 5. Restore route. @@ -629,8 +627,7 @@ OsrmRouter::ResultCode OsrmRouter::CalculateRoute(m2::PointD const & startPoint, ResultCode code = CalculateCrossMwmPath(startTask, m_cachedTargets, m_indexManager, cancellable, m_routingVisualization, finalPath); timer.Reset(); - if (progressCallback) - progressCallback(50.0f); + progressCallback(50.0f); // 5. Make generate answer if (code == NoError) diff --git a/routing/routing_session.cpp b/routing/routing_session.cpp index 33498f57f9..187a040cfc 100644 --- a/routing/routing_session.cpp +++ b/routing/routing_session.cpp @@ -61,7 +61,7 @@ void RoutingSession::RebuildRoute(m2::PointD const & startPoint, // (callback param isn't captured by value). m_router->CalculateRoute(startPoint, startPoint - m_lastGoodPosition, m_endPoint, DoReadyCallback(*this, readyCallback, m_routeSessionMutex), - progressCallback); + DoProgressCallback(progressCallback)); if (timeoutSec != 0) InitRoutingWatchdogTimer(timeoutSec); diff --git a/routing/routing_session.hpp b/routing/routing_session.hpp index d9efb4f2cd..e57ba444b7 100644 --- a/routing/routing_session.hpp +++ b/routing/routing_session.hpp @@ -105,7 +105,20 @@ private: void operator()(Route & route, IRouter::ResultCode e); }; - void AssignRoute(Route & route, IRouter::ResultCode e); + + //TODO (ldragunov) Make consistent DoReady and DoProgress callbacks. Now Do ready runs + // GUI proc inside caller function, and DoProgressCallback calls inside callback wrapper. + struct DoProgressCallback + { + TProgressCallbackFn m_progressCallback; + + DoProgressCallback(TProgressCallbackFn const & pr) : m_progressCallback(pr) {} + void operator()(float progress) { + if (m_progressCallback != nullptr) + GetPlatform().RunOnGuiThread(bind(m_progressCallback, progress)); + } + + }; /// RemoveRoute removes m_route and resets route attributes (m_state, m_lastDistance, m_moveAwayCounter). void RemoveRoute(); void RemoveRouteImpl();