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
diff options
context:
space:
mode:
authormpimenov <mpimenov@users.noreply.github.com>2016-12-09 16:20:04 +0300
committerGitHub <noreply@github.com>2016-12-09 16:20:04 +0300
commit263638e996a74176c7d3a7ed8dd25f3a20b71e1d (patch)
tree8ffeae1e141351c051bbf8147ef6ae55af968a0a /traffic
parentdb122bb5a28340d64e8eb5d93d0695e93d6d3ad6 (diff)
parent10885c6713a52d6abd8f104ddb26027deb382a7c (diff)
Merge pull request #4936 from syershov/fix-traffic-processing
Fix traffic processing
Diffstat (limited to 'traffic')
-rw-r--r--traffic/traffic_info.cpp31
-rw-r--r--traffic/traffic_info.hpp17
2 files changed, 31 insertions, 17 deletions
diff --git a/traffic/traffic_info.cpp b/traffic/traffic_info.cpp
index d8ba284675..ed383ac8b4 100644
--- a/traffic/traffic_info.cpp
+++ b/traffic/traffic_info.cpp
@@ -157,10 +157,17 @@ void TrafficInfo::SetTrafficKeysForTesting(vector<RoadSegmentId> const & keys)
bool TrafficInfo::ReceiveTrafficData(string & etag)
{
vector<SpeedGroup> values;
- if (!ReceiveTrafficValues(etag, values))
+ switch (ReceiveTrafficValues(etag, values))
+ {
+ case ServerDataStatus::New:
+ return UpdateTrafficData(values);
+ case ServerDataStatus::NotChanged:
+ return true;
+ case ServerDataStatus::NotFound:
+ case ServerDataStatus::Error:
return false;
-
- return UpdateTrafficData(values);
+ }
+ return false;
}
SpeedGroup TrafficInfo::GetSpeedGroup(RoadSegmentId const & id) const
@@ -419,19 +426,19 @@ bool TrafficInfo::ReceiveTrafficKeys()
return true;
}
-bool TrafficInfo::ReceiveTrafficValues(string & etag, vector<SpeedGroup> & values)
+TrafficInfo::ServerDataStatus TrafficInfo::ReceiveTrafficValues(string & etag, vector<SpeedGroup> & values)
{
if (!m_mwmId.IsAlive())
return false;
auto const & info = m_mwmId.GetInfo();
if (!info)
- return false;
+ return ServerDataStatus::Error;
uint64_t const version = info->GetVersion();
string const url = MakeRemoteURL(info->GetCountryName(), version);
if (url.empty())
- return false;
+ return ServerDataStatus::Error;
platform::HttpClient request(url);
request.LoadHeaders(true);
@@ -456,7 +463,7 @@ bool TrafficInfo::ReceiveTrafficValues(string & etag, vector<SpeedGroup> & value
alohalytics::TStringMap({{"mwm", info->GetCountryName()},
{"version", strings::to_string(info->GetVersion())}}));
- return false;
+ return ServerDataStatus::Error;
}
// Update ETag for this MWM.
auto const & headers = request.GetHeaders();
@@ -465,7 +472,7 @@ bool TrafficInfo::ReceiveTrafficValues(string & etag, vector<SpeedGroup> & value
etag = it->second;
m_availability = Availability::IsAvailable;
- return true;
+ return ServerDataStatus::New;
}
bool TrafficInfo::UpdateTrafficData(vector<SpeedGroup> const & values)
@@ -491,7 +498,7 @@ bool TrafficInfo::UpdateTrafficData(vector<SpeedGroup> const & values)
return true;
}
-bool TrafficInfo::ProcessFailure(platform::HttpClient const & request, uint64_t const mwmVersion)
+TrafficInfo::ServerDataStatus TrafficInfo::ProcessFailure(platform::HttpClient const & request, uint64_t const mwmVersion)
{
switch (request.ErrorCode())
{
@@ -506,12 +513,12 @@ bool TrafficInfo::ProcessFailure(platform::HttpClient const & request, uint64_t
m_availability = Availability::ExpiredApp;
else
m_availability = Availability::NoData;
- return false;
+ return ServerDataStatus::NotFound;
}
case 304: /* Not Modified */
{
m_availability = Availability::IsAvailable;
- return true;
+ return ServerDataStatus::NotChanged;
}
}
@@ -520,7 +527,7 @@ bool TrafficInfo::ProcessFailure(platform::HttpClient const & request, uint64_t
"$TrafficNetworkError",
alohalytics::TStringMap({{"code", strings::to_string(request.ErrorCode())}}));
- return false;
+ return ServerDataStatus::Error;
}
string DebugPrint(TrafficInfo::RoadSegmentId const & id)
diff --git a/traffic/traffic_info.hpp b/traffic/traffic_info.hpp
index 23cbb268f0..b687ab2a6e 100644
--- a/traffic/traffic_info.hpp
+++ b/traffic/traffic_info.hpp
@@ -117,22 +117,29 @@ public:
static void DeserializeTrafficValues(vector<uint8_t> const & data, vector<SpeedGroup> & result);
private:
+ enum class ServerDataStatus
+ {
+ New,
+ NotChanged,
+ NotFound,
+ Error,
+ };
+
friend void UnitTest_TrafficInfo_UpdateTrafficData();
// todo(@m) A temporary method. Remove it once the keys are added
// to the generator and the data is regenerated.
bool ReceiveTrafficKeys();
- // Tries to read the values of the Coloring map from server.
- // Returns true and updates m_coloring if the values are read successfully and
- // their number is equal to the number of keys.
+ // Tries to read the values of the Coloring map from server into |values|.
+ // Returns result of communicating with server as ServerDataStatus.
// Otherwise, returns false and does not change m_coloring.
- bool ReceiveTrafficValues(string & etag, vector<SpeedGroup> & values);
+ ServerDataStatus ReceiveTrafficValues(string & etag, vector<SpeedGroup> & values);
// Updates the coloring and changes the availability status if needed.
bool UpdateTrafficData(vector<SpeedGroup> const & values);
- bool ProcessFailure(platform::HttpClient const & request, uint64_t const mwmVersion);
+ ServerDataStatus ProcessFailure(platform::HttpClient const & request, uint64_t const mwmVersion);
// The mapping from feature segments to speed groups (see speed_groups.hpp).
Coloring m_coloring;