forked from organicmaps/organicmaps
Code review fixes for guides
This commit is contained in:
parent
cade0f6a73
commit
35acc28bb5
3 changed files with 36 additions and 35 deletions
|
@ -84,6 +84,12 @@ string DebugPrint(GuideInfo const & r)
|
|||
return ss.str();
|
||||
}
|
||||
|
||||
void GuidesManager::RestoreFromParsedData(int version, MapT & guidesInfo)
|
||||
{
|
||||
m_version = version;
|
||||
m_file2Info.swap(guidesInfo);
|
||||
}
|
||||
|
||||
bool GuidesManager::RestoreFromFile()
|
||||
{
|
||||
int resourcesVersion = -1, downloadedVersion = -1;
|
||||
|
@ -93,7 +99,7 @@ bool GuidesManager::RestoreFromFile()
|
|||
{
|
||||
string json;
|
||||
ReaderPtr<Reader>(pl.GetReader(GetDataFileName(), "r")).ReadAsString(json);
|
||||
resourcesVersion = ValidateAndParseGuidesData(json, fromResources);
|
||||
resourcesVersion = ParseGuidesData(json, fromResources);
|
||||
}
|
||||
catch (RootException const &)
|
||||
{
|
||||
|
@ -102,7 +108,7 @@ bool GuidesManager::RestoreFromFile()
|
|||
{
|
||||
string json;
|
||||
ReaderPtr<Reader>(pl.GetReader(GetDataFileName(), "w")).ReadAsString(json);
|
||||
downloadedVersion = ValidateAndParseGuidesData(json, fromDownloaded);
|
||||
downloadedVersion = ParseGuidesData(json, fromDownloaded);
|
||||
}
|
||||
catch (RootException const &)
|
||||
{
|
||||
|
@ -111,14 +117,12 @@ bool GuidesManager::RestoreFromFile()
|
|||
ASSERT_GREATER(resourcesVersion, 0, ());
|
||||
if (downloadedVersion > resourcesVersion)
|
||||
{
|
||||
m_version = downloadedVersion;
|
||||
m_file2Info.swap(fromDownloaded);
|
||||
RestoreFromParsedData(downloadedVersion, fromDownloaded);
|
||||
return true;
|
||||
}
|
||||
else if (resourcesVersion > downloadedVersion || resourcesVersion >= 0)
|
||||
{
|
||||
m_version = resourcesVersion;
|
||||
m_file2Info.swap(fromResources);
|
||||
RestoreFromParsedData(resourcesVersion, fromResources);
|
||||
return true;
|
||||
}
|
||||
LOG(LWARNING, ("Guides descriptions were not loaded"));
|
||||
|
@ -180,7 +184,7 @@ void GuidesManager::OnFinish(downloader::HttpRequest & request)
|
|||
string const & data = request.Data();
|
||||
// Sanity check if we forgot to update json version on servers
|
||||
MapT tmpGuides;
|
||||
int const downloadedVersion = ValidateAndParseGuidesData(data, tmpGuides);
|
||||
int const downloadedVersion = ParseGuidesData(data, tmpGuides);
|
||||
if (downloadedVersion > m_version && !m_file2Info.empty())
|
||||
{
|
||||
// Load into the memory even if we fail to save it later
|
||||
|
@ -211,7 +215,7 @@ void GuidesManager::OnFinish(downloader::HttpRequest & request)
|
|||
m_httpRequest.reset();
|
||||
}
|
||||
|
||||
int GuidesManager::ValidateAndParseGuidesData(string const & jsonData, MapT & guidesInfo)
|
||||
int GuidesManager::ParseGuidesData(string const & jsonData, MapT & guidesInfo)
|
||||
{
|
||||
guidesInfo.clear();
|
||||
// 0 means "version" key is absent in json
|
||||
|
|
|
@ -36,18 +36,17 @@ string DebugPrint(GuideInfo const & r);
|
|||
|
||||
class GuidesManager : private noncopyable
|
||||
{
|
||||
/// For unit tests visibility
|
||||
friend void UnitTest_Guides_SmokeTest();
|
||||
friend void UnitTest_Guides_CorrectlyParseData();
|
||||
friend void UnitTest_Guides_SaveRestoreFromFile();
|
||||
friend void UnitTest_Guides_ComplexNames();
|
||||
friend void UnitTest_Guides_CheckDataFiles();
|
||||
|
||||
/// @name Guides managment
|
||||
//@{
|
||||
public:
|
||||
void UpdateGuidesData();
|
||||
bool RestoreFromFile();
|
||||
typedef map<string, GuideInfo> MapT;
|
||||
/// @param[in] guidesInfo filled with correct info about guides on success
|
||||
/// @return -1 if failed to parse or json version number otherwise. 0 means version is absent in json.
|
||||
static int ParseGuidesData(string const & jsonData, MapT & guidesInfo);
|
||||
void RestoreFromParsedData(int version, MapT & guidesInfo);
|
||||
static string GetDataFileFullPath();
|
||||
|
||||
/// @param[in] id MWM file name without extension as a key.
|
||||
bool GetGuideInfo(string const & id, GuideInfo & appInfo) const;
|
||||
|
@ -59,16 +58,9 @@ public:
|
|||
//@}
|
||||
|
||||
private:
|
||||
typedef map<string, GuideInfo> MapT;
|
||||
|
||||
/// @param[in] guidesInfo filled with correct info about guides on success
|
||||
/// @return -1 if failed to parse or json version number otherwise. 0 means version is absent in json.
|
||||
int ValidateAndParseGuidesData(string const & jsonData, MapT & guidesInfo);
|
||||
|
||||
void OnFinish(downloader::HttpRequest & request);
|
||||
static string GetGuidesDataUrl();
|
||||
static string GetDataFileName();
|
||||
static string GetDataFileFullPath();
|
||||
|
||||
/// Map from mwm file name (key) to guide info.
|
||||
MapT m_file2Info;
|
||||
|
|
|
@ -26,13 +26,14 @@ UNIT_TEST(Guides_SmokeTest)
|
|||
"} }";
|
||||
|
||||
GuidesManager::MapT data;
|
||||
TEST_EQUAL(-1, manager.ValidateAndParseGuidesData("invalidtest", data), ());
|
||||
TEST_EQUAL(0, manager.ValidateAndParseGuidesData("{}", data), ());
|
||||
manager.m_file2Info.swap(data);
|
||||
int version;
|
||||
TEST_EQUAL(-1, version = manager.ParseGuidesData("invalidtest", data), ());
|
||||
TEST_EQUAL(0, version = manager.ParseGuidesData("{}", data), ());
|
||||
manager.RestoreFromParsedData(version, data);
|
||||
TEST(!manager.GetGuideInfo("Guernsey", info), ());
|
||||
|
||||
TEST_EQUAL(2, manager.ValidateAndParseGuidesData(str, data), ());
|
||||
manager.m_file2Info.swap(data);
|
||||
TEST_EQUAL(2, version = manager.ParseGuidesData(str, data), ());
|
||||
manager.RestoreFromParsedData(version, data);
|
||||
TEST(manager.GetGuideInfo("Guernsey", info), ());
|
||||
TEST(info.IsValid(), ());
|
||||
|
||||
|
@ -75,8 +76,9 @@ UNIT_TEST(Guides_CorrectlyParseData)
|
|||
string invalidKeys[] = { "london", "Lond", "Isle", "Man" };
|
||||
|
||||
GuidesManager::MapT data;
|
||||
TEST_EQUAL(2, manager.ValidateAndParseGuidesData(strLondonIsle, data), ());
|
||||
manager.m_file2Info.swap(data);
|
||||
int version;
|
||||
TEST_EQUAL(2, version = manager.ParseGuidesData(strLondonIsle, data), ());
|
||||
manager.RestoreFromParsedData(version, data);
|
||||
for (size_t i = 0; i < ARRAY_SIZE(validKeys); ++i)
|
||||
{
|
||||
TEST(manager.GetGuideInfo(validKeys[i], info), (i));
|
||||
|
@ -125,8 +127,9 @@ UNIT_TEST(Guides_ComplexNames)
|
|||
string invalidKeys[] = { "Не Беларусь", "Côte_d'IvoireCôte_d'IvoireCôte_d'Ivoire" };
|
||||
|
||||
GuidesManager::MapT data;
|
||||
TEST_EQUAL(123456, manager.ValidateAndParseGuidesData(strLondonIsle, data), ());
|
||||
manager.m_file2Info.swap(data);
|
||||
int version;
|
||||
TEST_EQUAL(123456, version = manager.ParseGuidesData(strLondonIsle, data), ());
|
||||
manager.RestoreFromParsedData(version, data);
|
||||
for (size_t i = 0; i < ARRAY_SIZE(validKeys); ++i)
|
||||
{
|
||||
TEST(manager.GetGuideInfo(validKeys[i], info), (i));
|
||||
|
@ -158,8 +161,9 @@ UNIT_TEST(Guides_SaveRestoreFromFile)
|
|||
"} }";
|
||||
|
||||
GuidesManager::MapT data;
|
||||
TEST_EQUAL(2, manager.ValidateAndParseGuidesData(strLondonIsle, data), ());
|
||||
manager.m_file2Info.swap(data);
|
||||
int version;
|
||||
TEST_EQUAL(2, version = manager.ParseGuidesData(strLondonIsle, data), ());
|
||||
manager.RestoreFromParsedData(version, data);
|
||||
|
||||
string const path = manager.GetDataFileFullPath();
|
||||
{
|
||||
|
@ -202,8 +206,9 @@ UNIT_TEST(Guides_CheckDataFiles)
|
|||
reader.ReadAsString(str);
|
||||
|
||||
GuidesManager::MapT data;
|
||||
TEST_LESS(0, manager.ValidateAndParseGuidesData(str, data), ());
|
||||
manager.m_file2Info.swap(data);
|
||||
int version;
|
||||
TEST_LESS(0, version = manager.ParseGuidesData(str, data), ());
|
||||
manager.RestoreFromParsedData(version, data);
|
||||
TEST(manager.GetGuideInfo("UK_England", info), ());
|
||||
TEST(info.IsValid(), ());
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue