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:
authorSergey Yershov <syershov@maps.me>2016-12-09 15:35:49 +0300
committerSergey Yershov <syershov@maps.me>2016-12-09 16:19:09 +0300
commit10885c6713a52d6abd8f104ddb26027deb382a7c (patch)
tree31ec17dd60a607037fd44f6bde5a230b07638e41 /traffic
parent12e04098d153418bd3c95b076007ab3b0f5da78e (diff)
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 23138ba085..996d5cc57e 100644
--- a/traffic/traffic_info.cpp
+++ b/traffic/traffic_info.cpp
@@ -138,10 +138,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
@@ -398,17 +405,17 @@ bool TrafficInfo::ReceiveTrafficKeys()
return true;
}
-bool TrafficInfo::ReceiveTrafficValues(string & etag, vector<SpeedGroup> & values)
+TrafficInfo::ServerDataStatus TrafficInfo::ReceiveTrafficValues(string & etag, vector<SpeedGroup> & values)
{
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);
@@ -433,7 +440,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();
@@ -442,7 +449,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)
@@ -468,7 +475,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())
{
@@ -483,12 +490,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;
}
}
@@ -497,7 +504,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;