diff options
author | Arsentiy Milchakov <milcars@mapswithme.com> | 2017-08-22 14:57:15 +0300 |
---|---|---|
committer | Vladimir Byko-Ianko <v.bykoianko@corp.mail.ru> | 2017-09-13 16:25:29 +0300 |
commit | 1eb176f6fefa4f0dfac0ce82865efafedb09655c (patch) | |
tree | 062aa3efc9ba1b6e47c1619cd4d0607836f386f9 /platform | |
parent | fd45889908345f6692e82c2e07fe2e4e410cd612 (diff) |
Apply diffs on startup
Diffstat (limited to 'platform')
-rw-r--r-- | platform/local_country_file_utils.cpp | 43 | ||||
-rw-r--r-- | platform/local_country_file_utils.hpp | 2 |
2 files changed, 44 insertions, 1 deletions
diff --git a/platform/local_country_file_utils.cpp b/platform/local_country_file_utils.cpp index b25809a4a4..8593bdbb74 100644 --- a/platform/local_country_file_utils.cpp +++ b/platform/local_country_file_utils.cpp @@ -138,6 +138,36 @@ inline string GetDataDirFullPath(string const & dataDir) return dataDir.empty() ? platform.WritableDir() : my::JoinFoldersToPath(platform.WritableDir(), dataDir); } + +void FindAllDiffsInDirectory(string const & dir, vector<LocalCountryFile> & diffs) +{ + Platform & platform = GetPlatform(); + + Platform::TFilesWithType fwts; + platform.GetFilesByType(dir, Platform::FILE_TYPE_REGULAR, fwts); + + for (auto const & fwt : fwts) + { + string name = fwt.first; + + auto const isDiffReady = + strings::EndsWith(name, strings::to_string(DIFF_FILE_EXTENSION) + READY_FILE_EXTENSION); + auto const isDiff = + strings::EndsWith(name, DIFF_FILE_EXTENSION); + + if (!isDiff && !isDiffReady) + continue; + + my::GetNameWithoutExt(name); + + if (isDiffReady) + my::GetNameWithoutExt(name); + + LocalCountryFile localDiff(dir, CountryFile(name), 0 /* version */); + + diffs.push_back(localDiff); + } +} } // namespace void DeleteDownloaderFilesForCountry(int64_t version, CountryFile const & countryFile) @@ -162,7 +192,6 @@ void FindAllLocalMapsInDirectoryAndCleanup(string const & directory, int64_t ver int64_t latestVersion, vector<LocalCountryFile> & localFiles) { - vector<string> files; Platform & platform = GetPlatform(); Platform::TFilesWithType fwts; @@ -224,6 +253,18 @@ void FindAllLocalMapsInDirectoryAndCleanup(string const & directory, int64_t ver } } +void FindAllDiffs(string const & dataDir, vector<LocalCountryFile> & diffs) +{ + string const dir = GetDataDirFullPath(dataDir); + FindAllDiffsInDirectory(dir, diffs); + + Platform::TFilesWithType fwts; + Platform::GetFilesByType(dir, Platform::FILE_TYPE_DIRECTORY, fwts); + + for (auto const & fwt : fwts) + FindAllDiffsInDirectory(my::JoinFoldersToPath(dir, fwt.first /* subdir */), diffs); +} + void FindAllLocalMapsAndCleanup(int64_t latestVersion, vector<LocalCountryFile> & localFiles) { FindAllLocalMapsAndCleanup(latestVersion, string(), localFiles); diff --git a/platform/local_country_file_utils.hpp b/platform/local_country_file_utils.hpp index 3d53918300..433dd643ac 100644 --- a/platform/local_country_file_utils.hpp +++ b/platform/local_country_file_utils.hpp @@ -55,6 +55,8 @@ void FindAllLocalMapsAndCleanup(int64_t latestVersion, vector<LocalCountryFile> void FindAllLocalMapsAndCleanup(int64_t latestVersion, string const & dataDir, vector<LocalCountryFile> & localFiles); +void FindAllDiffs(string const & dataDir, vector<LocalCountryFile> & diffs); + // This method removes: // * partially downloaded non-latest maps (with version less than |latestVersion|) // * empty directories |