diff --git a/map/bookmark_manager.cpp b/map/bookmark_manager.cpp index e61284200f..6b6d5e7a06 100644 --- a/map/bookmark_manager.cpp +++ b/map/bookmark_manager.cpp @@ -1966,7 +1966,7 @@ void BookmarkManager::NotifyAboutFinishAsyncLoading(KMLDataCollectionPtr && coll { if (!collection->empty()) { - CreateCategories(std::move(*collection)); + CreateCategories(std::move(*collection), true /* autoSave */); } else if (!m_loadBookmarksFinished) { @@ -2415,7 +2415,7 @@ void BookmarkManager::UpdateLastModifiedTime(KMLDataCollection & collection) c->m_categoryData.m_lastModified = kml::TimestampClock::now(); } -void BookmarkManager::CreateCategories(KMLDataCollection && dataCollection, bool autoSave) +void BookmarkManager::CreateCategories(KMLDataCollection && dataCollection, bool autoSave /* = false */) { CHECK_THREAD_CHECKER(m_threadChecker, ()); kml::GroupIdSet loadedGroups; @@ -2456,8 +2456,9 @@ void BookmarkManager::CreateCategories(KMLDataCollection && dataCollection, bool UserMarkIdStorage::Instance().EnableSaving(false); - bool const saveAfterCreation = autoSave && (categoryData.m_id == kml::kInvalidMarkGroupId); - auto const groupId = CreateBookmarkCategory(std::move(categoryData), saveAfterCreation); + // Set autoSave = false now to avoid useless saving in NotifyChanges(). + // autoSave flag will be assigned in the end of this function. + auto const groupId = CreateBookmarkCategory(std::move(categoryData), false /* autoSave */); loadedGroups.insert(groupId); auto * group = GetBmCategory(groupId); group->SetFileName(fileName); diff --git a/map/bookmark_manager.hpp b/map/bookmark_manager.hpp index ddf8c35833..b197b6f593 100644 --- a/map/bookmark_manager.hpp +++ b/map/bookmark_manager.hpp @@ -366,7 +366,7 @@ public: static void UpdateLastModifiedTime(KMLDataCollection & collection); // Used for LoadBookmarks() and unit tests only. Does *not* update last modified time. - void CreateCategories(KMLDataCollection && dataCollection, bool autoSave = true); + void CreateCategories(KMLDataCollection && dataCollection, bool autoSave = false); static std::string GetTracksSortedBlockName(); static std::string GetOthersSortedBlockName(); diff --git a/map/map_tests/bookmarks_test.cpp b/map/map_tests/bookmarks_test.cpp index b11a0a3e48..361a413c8b 100644 --- a/map/map_tests/bookmarks_test.cpp +++ b/map/map_tests/bookmarks_test.cpp @@ -199,7 +199,7 @@ UNIT_CLASS_TEST(Runner, Bookmarks_ImportKML) kmlDataCollection.emplace_back(""/* filePath */, LoadKmlData(MemReader(kmlString, strlen(kmlString)), KmlFileType::Text)); TEST(kmlDataCollection.back().second, ()); - bmManager.CreateCategories(std::move(kmlDataCollection), false /* autoSave */); + bmManager.CreateCategories(std::move(kmlDataCollection)); TEST_EQUAL(bmManager.GetBmGroupsIdList().size(), 1, ()); auto const groupId = bmManager.GetBmGroupsIdList().front(); @@ -225,7 +225,7 @@ UNIT_CLASS_TEST(Runner, Bookmarks_ExportKML) BookmarkManager::KMLDataCollection kmlDataCollection1; kmlDataCollection1.emplace_back("", LoadKmlData(MemReader(kmlString, strlen(kmlString)), KmlFileType::Text)); - bmManager.CreateCategories(std::move(kmlDataCollection1), false /* autoSave */); + bmManager.CreateCategories(std::move(kmlDataCollection1)); TEST_EQUAL(bmManager.GetBmGroupsIdList().size(), 1, ()); auto const groupId1 = bmManager.GetBmGroupsIdList().front(); @@ -253,7 +253,7 @@ UNIT_CLASS_TEST(Runner, Bookmarks_ExportKML) kmlDataCollection2.emplace_back("", LoadKmlData(FileReader(fileName), GetActiveKmlFileType())); TEST(kmlDataCollection2.back().second, ()); - bmManager.CreateCategories(std::move(kmlDataCollection2), false /* autoSave */); + bmManager.CreateCategories(std::move(kmlDataCollection2)); TEST_EQUAL(bmManager.GetBmGroupsIdList().size(), 1, ()); auto const groupId2 = bmManager.GetBmGroupsIdList().front(); @@ -960,7 +960,7 @@ UNIT_CLASS_TEST(Runner, Bookmarks_InnerFolder) kmlDataCollection.emplace_back("" /* filePath */, LoadKmlData(MemReader(kmlString2, strlen(kmlString2)), KmlFileType::Text)); - bmManager.CreateCategories(std::move(kmlDataCollection), false /* autoSave */); + bmManager.CreateCategories(std::move(kmlDataCollection)); auto const & groupIds = bmManager.GetBmGroupsIdList(); TEST_EQUAL(groupIds.size(), 1, ()); TEST_EQUAL(bmManager.GetUserMarkIds(groupIds.front()).size(), 1, ()); @@ -1030,7 +1030,7 @@ UNIT_CLASS_TEST(Runner, Bookmarks_SpecialXMLNames) BookmarkManager::KMLDataCollection kmlDataCollection1; kmlDataCollection1.emplace_back("" /* filePath */, LoadKmlData(MemReader(kmlString3, strlen(kmlString3)), KmlFileType::Text)); - bmManager.CreateCategories(std::move(kmlDataCollection1), false /* autoSave */); + bmManager.CreateCategories(std::move(kmlDataCollection1)); auto const & groupIds = bmManager.GetBmGroupsIdList(); TEST_EQUAL(groupIds.size(), 1, ()); @@ -1055,14 +1055,14 @@ UNIT_CLASS_TEST(Runner, Bookmarks_SpecialXMLNames) BookmarkManager::KMLDataCollection kmlDataCollection2; kmlDataCollection2.emplace_back("" /* filePath */, LoadKmlFile(fileNameTmp, GetActiveKmlFileType())); - bmManager.CreateCategories(std::move(kmlDataCollection2), false /* autoSave */); + bmManager.CreateCategories(std::move(kmlDataCollection2)); BookmarkManager::KMLDataCollection kmlDataCollection3; kmlDataCollection3.emplace_back("" /* filePath */, LoadKmlData(MemReader(kmlString3, strlen(kmlString3)), KmlFileType::Text)); bmManager.UpdateLastModifiedTime(kmlDataCollection3); - bmManager.CreateCategories(std::move(kmlDataCollection3), false /* autoSave */); + bmManager.CreateCategories(std::move(kmlDataCollection3)); TEST_EQUAL(bmManager.GetBmGroupsIdList().size(), 2, ()); auto const catId2 = bmManager.GetBmGroupsIdList().back(); @@ -1092,7 +1092,7 @@ UNIT_CLASS_TEST(Runner, TrackParsingTest_1) kmlDataCollection.emplace_back(kmlFile, LoadKmlFile(kmlFile, KmlFileType::Text)); TEST(kmlDataCollection.back().second, ("KML can't be loaded")); - bmManager.CreateCategories(std::move(kmlDataCollection), false /* autoSave */); + bmManager.CreateCategories(std::move(kmlDataCollection)); TEST_EQUAL(bmManager.GetBmGroupsIdList().size(), 1, ()); auto catId = bmManager.GetBmGroupsIdList().front(); @@ -1129,7 +1129,7 @@ UNIT_CLASS_TEST(Runner, TrackParsingTest_2) kmlDataCollection.emplace_back(kmlFile, LoadKmlFile(kmlFile, KmlFileType::Text)); TEST(kmlDataCollection.back().second, ("KML can't be loaded")); - bmManager.CreateCategories(std::move(kmlDataCollection), false /* autoSave */); + bmManager.CreateCategories(std::move(kmlDataCollection)); TEST_EQUAL(bmManager.GetBmGroupsIdList().size(), 1, ()); auto catId = bmManager.GetBmGroupsIdList().front(); diff --git a/qt/screenshoter.cpp b/qt/screenshoter.cpp index d35d6d5054..8951cb6736 100644 --- a/qt/screenshoter.cpp +++ b/qt/screenshoter.cpp @@ -205,7 +205,7 @@ void Screenshoter::ProcessNextKml() for (auto catId : idList) es.DeleteBmCategory(catId); - bookmarkManager.CreateCategories(std::move(collection), false); + bookmarkManager.CreateCategories(std::move(collection)); ChangeState(State::WaitPosition); auto const newCatId = bookmarkManager.GetBmGroupsIdList().front();