From 26f616712dcdff96813fd3b7efb18743b8bf7c74 Mon Sep 17 00:00:00 2001 From: Arsentiy Milchakov Date: Fri, 9 Oct 2020 18:19:20 +0300 Subject: [PATCH] [bookmarks] review fixes for compilations --- map/bookmark_manager.cpp | 21 ++++++++++++--------- map/bookmark_manager.hpp | 2 +- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/map/bookmark_manager.cpp b/map/bookmark_manager.cpp index fe56886fcb..c6469a888b 100644 --- a/map/bookmark_manager.cpp +++ b/map/bookmark_manager.cpp @@ -2722,7 +2722,7 @@ kml::MarkGroupId BookmarkManager::CreateBookmarkCategory(std::string const & nam return groupId; } -kml::MarkGroupId BookmarkManager::CreateBookmarkCompilation(kml::CategoryData && data) +BookmarkCategory * BookmarkManager::CreateBookmarkCompilation(kml::CategoryData && data) { CHECK_THREAD_CHECKER(m_threadChecker, ()); if (data.m_id == kml::kInvalidMarkGroupId) @@ -2730,9 +2730,11 @@ kml::MarkGroupId BookmarkManager::CreateBookmarkCompilation(kml::CategoryData && auto groupId = data.m_id; CHECK_EQUAL(m_categories.count(groupId), 0, ()); CHECK_EQUAL(m_compilations.count(groupId), 0, ()); - m_compilations.emplace(groupId, std::make_unique(std::move(data), false)); + auto compilation = std::make_unique(std::move(data), false); + auto result = compilation.get(); + m_compilations.emplace(groupId, std::move(compilation)); - return groupId; + return result; } kml::MarkGroupId BookmarkManager::CheckAndCreateDefaultCategory() @@ -2921,19 +2923,20 @@ void BookmarkManager::CreateCategories(KMLDataCollection && dataCollection, bool } std::unordered_map compilations; + std::unordered_set compilationNames; for (auto & compilation : fileData.m_compilationsData) { - SetUniqueName(compilation, [&compilations](auto const & name) { - return std::all_of(compilations.cbegin(), compilations.cend(), - [&name](auto const & c) { return c.second->GetName() != name; }); + SetUniqueName(compilation, [&compilationNames](auto const & name) + { + return compilationNames.count(name) == 0; }); auto const compilationId = compilation.m_compilationId; - auto const compilationGroupId = CreateBookmarkCompilation(std::move(compilation)); - categoryData.m_compilationIds.push_back(compilationGroupId); + auto childGroup = CreateBookmarkCompilation(std::move(compilation)); + categoryData.m_compilationIds.push_back(childGroup->GetID()); - auto * childGroup = GetBmCategory(compilationGroupId); compilations.emplace(compilationId, childGroup); + compilationNames.emplace(childGroup->GetName()); childGroup->SetFileName(fileName); childGroup->SetServerId(fileData.m_serverId); } diff --git a/map/bookmark_manager.hpp b/map/bookmark_manager.hpp index 3b81c641ae..2709a89332 100644 --- a/map/bookmark_manager.hpp +++ b/map/bookmark_manager.hpp @@ -275,7 +275,7 @@ public: kml::MarkGroupId CreateBookmarkCategory(kml::CategoryData && data, bool autoSave = true); kml::MarkGroupId CreateBookmarkCategory(std::string const & name, bool autoSave = true); - kml::MarkGroupId CreateBookmarkCompilation(kml::CategoryData && data); + BookmarkCategory * CreateBookmarkCompilation(kml::CategoryData && data); std::string GetCategoryName(kml::MarkGroupId categoryId) const; std::string GetCategoryFileName(kml::MarkGroupId categoryId) const;