diff options
Diffstat (limited to 'map/bookmark_manager.cpp')
-rw-r--r-- | map/bookmark_manager.cpp | 28 |
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>(); |