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:
Diffstat (limited to 'map/bookmark_manager.cpp')
-rw-r--r--map/bookmark_manager.cpp28
1 files changed, 25 insertions, 3 deletions
diff --git a/map/bookmark_manager.cpp b/map/bookmark_manager.cpp
index 575569ed63..431ce1b022 100644
--- a/map/bookmark_manager.cpp
+++ b/map/bookmark_manager.cpp
@@ -1336,11 +1336,10 @@ void BookmarkManager::CreateCategories(KMLDataCollection && dataCollection, bool
auto & fileData = *data.second;
auto & categoryData = fileData.m_categoryData;
- if ((categoryData.m_id != kml::kInvalidMarkGroupId) &&
- (UserMarkIdStorage::Instance().IsJustCreated() ||
- fileData.m_deviceId != GetPlatform().UniqueClientId()))
+ if (!UserMarkIdStorage::Instance().CheckIds(fileData) || HasDuplicatedIds(fileData))
{
LOG(LINFO, ("Bookmarks ids were reset for file", fileName));
+ //TODO: notify subscribers(like search subsystem). This KML could have been indexed.
ResetIds(fileData);
}
@@ -1395,6 +1394,29 @@ void BookmarkManager::CreateCategories(KMLDataCollection && dataCollection, bool
}
}
+bool BookmarkManager::HasDuplicatedIds(kml::FileData const & fileData) const
+{
+ CHECK_THREAD_CHECKER(m_threadChecker, ());
+ if (fileData.m_categoryData.m_id == kml::kInvalidMarkGroupId)
+ return false;
+
+ if (m_categories.find(fileData.m_categoryData.m_id) != m_categories.cend())
+ return true;
+
+ for (auto const & b : fileData.m_bookmarksData)
+ {
+ if (m_bookmarks.count(b.m_id) > 0)
+ return true;
+ }
+
+ for (auto const & t : fileData.m_tracksData)
+ {
+ if (m_tracks.count(t.m_id) > 0)
+ return true;
+ }
+ return false;
+}
+
std::unique_ptr<kml::FileData> BookmarkManager::CollectBmGroupKMLData(BookmarkCategory const * group) const
{
auto kmlData = std::make_unique<kml::FileData>();