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

discovery_manager.cpp « discovery « map - github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 13693bb942ab9be44946a47918f8cd3f89bc70c3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include "map/discovery/discovery_manager.hpp"

#include "editor/editable_data_source.hpp"

#include <sstream>

namespace
{
std::string GetQuery(discovery::ItemType const type)
{
  switch (type)
  {
  case discovery::ItemType::Hotels: return "hotel ";
  case discovery::ItemType::Attractions: return "attraction ";
  case discovery::ItemType::Cafes: return "cafe ";
  case discovery::ItemType::LocalExperts:
  case discovery::ItemType::Viator: ASSERT(false, ()); return "";
  }

  CHECK_SWITCH();
}
}  // namespace

namespace discovery
{
Manager::Manager(DataSourceBase const & dataSource, search::CityFinder & cityFinder, APIs const & apis)
  : m_dataSource(dataSource)
  , m_cityFinder(cityFinder)
  , m_searchApi(apis.m_search)
  , m_viatorApi(apis.m_viator)
  , m_localsApi(apis.m_locals)
{
}

// static
search::DiscoverySearchParams Manager::GetSearchParams(Manager::Params const & params, ItemType const type)
{
  search::DiscoverySearchParams p;
  p.m_query = GetQuery(type);
  p.m_viewport = params.m_viewport;
  p.m_position = params.m_viewportCenter;
  p.m_itemsCount = params.m_itemsCount;
  if (type == ItemType::Hotels)
    p.m_sortingType = search::DiscoverySearchParams::SortingType::HotelRating;

  return p;
}

std::string Manager::GetViatorUrl(m2::PointD const & point) const
{
  auto const viatorId = GetCityViatorId(point);
  if (viatorId.empty())
    return {};
  return viator::Api::GetCityUrl(viatorId);
}

std::string Manager::GetLocalExpertsUrl(m2::PointD const & point) const
{
  ms::LatLon const ll(MercatorBounds::ToLatLon(point));
  std::ostringstream os;
  os << locals::Api::GetLocalsPageUrl() << "?lat=" << ll.lat << "&lon=" << ll.lon;
  return os.str();
}

std::string Manager::GetCityViatorId(m2::PointD const & point) const
{
  CHECK_THREAD_CHECKER(m_threadChecker, ());
  auto const fid = m_cityFinder.GetCityFeatureID(point);
  if (!fid.IsValid())
    return {};

  EditableDataSource::FeaturesLoaderGuard const guard(m_dataSource, fid.m_mwmId);
  FeatureType ft;
  if (!guard.GetFeatureByIndex(fid.m_index, ft))
  {
    LOG(LERROR, ("Feature can't be loaded:", fid));
    return {};
  }

  auto const & metadata = ft.GetMetadata();
  auto const sponsoredId = metadata.Get(feature::Metadata::FMD_SPONSORED_ID);
  return sponsoredId;
}
}  // namespace discovery