diff options
author | Daria Volvenkova <d.volvenkova@corp.mail.ru> | 2018-04-10 16:42:01 +0300 |
---|---|---|
committer | Roman Kuznetsov <r.kuznetsow@gmail.com> | 2018-04-10 17:47:32 +0300 |
commit | 04f1374eb7a71b5e14a226d2559ce5f3760403f8 (patch) | |
tree | 45c6faff2289cac82f9e399b6c2c001715817387 /map/bookmark_manager.cpp | |
parent | 10a614f428a6e2ffe51e5661c1ee10ca07752800 (diff) |
Reset bookmark ids in case when the persistent id storage is reseted or when a foreign kmb file detected.
Diffstat (limited to 'map/bookmark_manager.cpp')
-rw-r--r-- | map/bookmark_manager.cpp | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/map/bookmark_manager.cpp b/map/bookmark_manager.cpp index 1dc6f94358..e1a9c0d5ba 100644 --- a/map/bookmark_manager.cpp +++ b/map/bookmark_manager.cpp @@ -944,17 +944,17 @@ void BookmarkManager::NotifyAboutFinishAsyncLoading(KMLDataCollectionPtr && coll GetPlatform().RunTask(Platform::Thread::Gui, [this, collection]() { - m_asyncLoadingInProgress = false; - m_loadBookmarksFinished = true; if (!collection->empty()) { CreateCategories(std::move(*collection)); } - else + else if (!m_loadBookmarksFinished) { CheckAndResetLastIds(); CheckAndCreateDefaultCategory(); } + m_asyncLoadingInProgress = false; + m_loadBookmarksFinished = true; if (m_asyncLoadingCallbacks.m_onFinished != nullptr) m_asyncLoadingCallbacks.m_onFinished(); @@ -1175,7 +1175,7 @@ kml::MarkGroupId BookmarkManager::CreateBookmarkCategory(kml::CategoryData && da if (data.m_id == kml::kInvalidMarkGroupId) { - data.m_id = PersistentIdStorage::Instance().GetNextCategoryId(); + data.m_id = UserMarkIdStorage::Instance().GetNextCategoryId(); } auto groupId = data.m_id; ASSERT_EQUAL(m_categories.count(groupId), 0, ()); @@ -1188,7 +1188,7 @@ kml::MarkGroupId BookmarkManager::CreateBookmarkCategory(kml::CategoryData && da kml::MarkGroupId BookmarkManager::CreateBookmarkCategory(std::string const & name, bool autoSave) { ASSERT_THREAD_CHECKER(m_threadChecker, ()); - auto const groupId = PersistentIdStorage::Instance().GetNextCategoryId(); + auto const groupId = UserMarkIdStorage::Instance().GetNextCategoryId(); m_categories[groupId] = my::make_unique<BookmarkCategory>(name, groupId, autoSave); UpdateBmGroupIdList(); m_changesTracker.OnAddGroup(groupId); @@ -1204,7 +1204,7 @@ void BookmarkManager::CheckAndCreateDefaultCategory() void BookmarkManager::CheckAndResetLastIds() { - auto & idStorage = PersistentIdStorage::Instance(); + auto & idStorage = UserMarkIdStorage::Instance(); if (m_categories.empty()) idStorage.ResetCategoryId(); if (m_bookmarks.empty()) @@ -1313,6 +1313,12 @@ void BookmarkManager::CreateCategories(KMLDataCollection && dataCollection, bool auto & fileData = *data.second.get(); auto & categoryData = fileData.m_categoryData; + if ((categoryData.m_id != kml::kInvalidMarkGroupId) && + (UserMarkIdStorage::Instance().IsJustCreated() || fileData.m_deviceId != GetPlatform().UniqueClientId())) + { + ResetIds(fileData); + } + auto const originalName = kml::GetDefaultStr(categoryData.m_name); auto uniqueName = originalName; @@ -1362,6 +1368,7 @@ void BookmarkManager::CreateCategories(KMLDataCollection && dataCollection, bool std::unique_ptr<kml::FileData> BookmarkManager::CollectBmGroupKMLData(BookmarkCategory const * group) const { auto kmlData = std::make_unique<kml::FileData>(); + kmlData->m_deviceId = GetPlatform().UniqueClientId(); kmlData->m_categoryData = group->GetCategoryData(); auto const & markIds = group->GetUserMarks(); kmlData->m_bookmarksData.reserve(markIds.size()); @@ -1692,6 +1699,7 @@ void BookmarkManager::OnRestoredFilesPrepared() { // This method is always called from UI-thread. ClearCategories(); + CheckAndResetLastIds(); if (m_onRestoredFilesPrepared) m_onRestoredFilesPrepared(); @@ -1716,7 +1724,7 @@ void BookmarkManager::CancelCloudRestoring() void BookmarkManager::EnableTestMode(bool enable) { - PersistentIdStorage::Instance().EnableTestMode(enable); + UserMarkIdStorage::Instance().EnableTestMode(enable); m_testModeEnabled = enable; } |