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:
authorDaria Volvenkova <d.volvenkova@corp.mail.ru>2018-04-09 18:43:58 +0300
committerRoman Kuznetsov <r.kuznetsow@gmail.com>2018-04-09 23:16:10 +0300
commit57362202e4635721c6d393d244dac04d4c180de8 (patch)
treef56a9b033a419b0aec46228d9f39743eae42ccd3 /map/bookmark_manager.cpp
parent00c6bce7770211d5fe4f3ab2193cd6cba13951ff (diff)
Unique category names.
Diffstat (limited to 'map/bookmark_manager.cpp')
-rw-r--r--map/bookmark_manager.cpp61
1 files changed, 30 insertions, 31 deletions
diff --git a/map/bookmark_manager.cpp b/map/bookmark_manager.cpp
index ffdd565c8f..1f7a801cc7 100644
--- a/map/bookmark_manager.cpp
+++ b/map/bookmark_manager.cpp
@@ -679,6 +679,17 @@ std::string BookmarkManager::GetCategoryFileName(kml::MarkGroupId categoryId) co
return GetBmCategory(categoryId)->GetFileName();
}
+kml::MarkGroupId BookmarkManager::GetCategoryId(std::string const & name) const
+{
+ ASSERT_THREAD_CHECKER(m_threadChecker, ());
+ for (auto const & category : m_categories)
+ {
+ if (category.second->GetName() == name)
+ return category.first;
+ }
+ return kml::kInvalidMarkGroupId;
+}
+
UserMark const * BookmarkManager::FindMarkInRect(kml::MarkGroupId groupId, m2::AnyRectD const & rect, double & d) const
{
ASSERT_THREAD_CHECKER(m_threadChecker, ());
@@ -1279,40 +1290,34 @@ void BookmarkManager::CreateCategories(KMLDataCollection && dataCollection, bool
ASSERT_THREAD_CHECKER(m_threadChecker, ());
kml::GroupIdSet loadedGroups;
- std::vector<std::pair<kml::MarkGroupId, BookmarkCategory *>> categoriesForMerge;
- categoriesForMerge.reserve(m_categories.size());
- for (auto const & c : m_categories)
- categoriesForMerge.emplace_back(c.first, c.second.get());
-
for (auto const & data : dataCollection)
{
- kml::MarkGroupId groupId;
- BookmarkCategory * group = nullptr;
-
auto const & fileName = data.first;
auto & fileData = *data.second.get();
auto & categoryData = fileData.m_categoryData;
- auto const it = std::find_if(categoriesForMerge.cbegin(), categoriesForMerge.cend(),
- [&categoryData](auto const & v)
- {
- return v.second->GetName() == kml::GetDefaultStr(categoryData.m_name);
- });
- bool const merge = it != categoriesForMerge.cend();
- if (merge)
- {
- groupId = it->first;
- group = it->second;
- }
- else
+ auto const originalName = kml::GetDefaultStr(categoryData.m_name);
+ auto uniqueName = originalName;
+
+ int counter = 0;
+ while (IsUsedCategoryName(uniqueName))
+ uniqueName = originalName + strings::to_string(++counter);
+
+ if (counter > 0)
{
- bool const saveAfterCreation = autoSave && (categoryData.m_id == kml::kInvalidMarkGroupId);
- groupId = CreateBookmarkCategory(std::move(categoryData), saveAfterCreation);
- loadedGroups.insert(groupId);
- group = GetBmCategory(groupId);
- group->SetFileName(fileName);
+ auto const sameCategoryId = GetCategoryId(originalName);
+ if (categoryData.m_id != kml::kInvalidMarkGroupId && categoryData.m_id < sameCategoryId)
+ SetCategoryName(sameCategoryId, uniqueName);
+ else
+ kml::SetDefaultStr(categoryData.m_name, uniqueName);
}
+ bool const saveAfterCreation = autoSave && (categoryData.m_id == kml::kInvalidMarkGroupId);
+ auto const groupId = CreateBookmarkCategory(std::move(categoryData), saveAfterCreation);
+ loadedGroups.insert(groupId);
+ auto * group = GetBmCategory(groupId);
+ group->SetFileName(fileName);
+
for (auto & bmData : fileData.m_bookmarksData)
{
auto * bm = CreateBookmark(std::move(bmData));
@@ -1326,12 +1331,6 @@ void BookmarkManager::CreateCategories(KMLDataCollection && dataCollection, bool
t->Attach(groupId);
group->AttachTrack(t->GetId());
}
- if (merge)
- {
- // Delete file since it will be merged.
- my::DeleteFileX(fileName);
- SaveBookmarks({groupId});
- }
}
NotifyChanges();