| 568 | } |
| 569 | |
| 570 | void BookmarkManager::NotifyChanges(bool saveChangesOnDisk) |
| 571 | { |
| 572 | CHECK_THREAD_CHECKER(m_threadChecker, ()); |
| 573 | |
| 574 | m_changesTracker.AcceptDirtyItems(); |
| 575 | if (!m_firstDrapeNotification && !m_changesTracker.HasChanges() && !m_bookmarksChangesTracker.HasChanges() && |
| 576 | !m_drapeChangesTracker.HasChanges()) |
| 577 | { |
| 578 | return; |
| 579 | } |
| 580 | |
| 581 | if (m_changesTracker.HasBookmarksChanges()) |
| 582 | NotifyBookmarksChanged(); |
| 583 | |
| 584 | if (m_changesTracker.HasCategoriesChanges()) |
| 585 | NotifyCategoriesChanged(); |
| 586 | |
| 587 | m_bookmarksChangesTracker.AddChanges(m_changesTracker); |
| 588 | m_drapeChangesTracker.AddChanges(m_changesTracker); |
| 589 | m_changesTracker.ResetChanges(); |
| 590 | |
| 591 | if (!m_notificationsEnabled) |
| 592 | return; |
| 593 | |
| 594 | if (m_bookmarksChangesTracker.HasBookmarksChanges()) |
| 595 | { |
| 596 | kml::GroupIdCollection categoriesToSave; |
| 597 | for (auto groupId : m_bookmarksChangesTracker.GetUpdatedGroupIds()) |
| 598 | if (IsBookmarkCategory(groupId) && GetBmCategory(groupId)->IsAutoSaveEnabled()) |
| 599 | categoriesToSave.push_back(groupId); |
| 600 | |
| 601 | // During the category reloading/updating the file saving should be skipped |
| 602 | // because of the file is already up to date. |
| 603 | if (saveChangesOnDisk) |
| 604 | SaveBookmarks(categoriesToSave); |
| 605 | |
| 606 | SendBookmarksChanges(m_bookmarksChangesTracker); |
| 607 | } |
| 608 | m_bookmarksChangesTracker.ResetChanges(); |
| 609 | |
| 610 | if (!m_drapeChangesTracker.HasChanges()) |
| 611 | return; |
| 612 | |
| 613 | df::DrapeEngineLockGuard lock(m_drapeEngine); |
| 614 | if (lock) |
| 615 | { |
| 616 | auto engine = lock.Get(); |
| 617 | for (auto groupId : m_drapeChangesTracker.GetUpdatedGroupIds()) |
| 618 | { |
| 619 | auto const * group = GetGroup(groupId); |
| 620 | engine->ChangeVisibilityUserMarksGroup(groupId, group->IsVisible()); |
| 621 | } |
| 622 | |
| 623 | for (auto groupId : m_drapeChangesTracker.GetRemovedGroupIds()) |
| 624 | engine->ClearUserMarksGroup(groupId); |
| 625 | |
| 626 | engine->UpdateUserMarks(&m_drapeChangesTracker, m_firstDrapeNotification); |
| 627 | m_firstDrapeNotification = false; |
nothing calls this directly
no test coverage detected