From 8c4535f7bf5776b33ad7362d9913f5ef1de4aa87 Mon Sep 17 00:00:00 2001 From: Kiryl Kaveryn Date: Wed, 15 May 2024 20:54:56 +0400 Subject: [PATCH] [ios] reload the bookmarks list during the update from the cloud Signed-off-by: Kiryl Kaveryn --- .../Maps/Bookmarks/BookmarksCoordinator.swift | 9 +++++ .../BookmarksListInteractor.swift | 38 +++++++++++++++++-- .../BookmarksListInterfaces.swift | 8 ++++ .../BookmarksListPresenter.swift | 21 ++++++++-- .../BookmarksList/BookmarksListRouter.swift | 4 ++ 5 files changed, 73 insertions(+), 7 deletions(-) diff --git a/iphone/Maps/Bookmarks/BookmarksCoordinator.swift b/iphone/Maps/Bookmarks/BookmarksCoordinator.swift index 0b849e4a8b..81f38405a5 100644 --- a/iphone/Maps/Bookmarks/BookmarksCoordinator.swift +++ b/iphone/Maps/Bookmarks/BookmarksCoordinator.swift @@ -33,6 +33,15 @@ import UIKit state = .closed } + @objc func goBack() { + switch state { + case .opened: + navigationController?.popViewController(animated: true) + case .hidden, .closed: + close() + } + } + @objc func hide(categoryId: MWMMarkGroupID) { state = .hidden(categoryId: categoryId) } diff --git a/iphone/Maps/Bookmarks/BookmarksList/BookmarksListInteractor.swift b/iphone/Maps/Bookmarks/BookmarksList/BookmarksListInteractor.swift index 6ee145ce86..af144e5151 100644 --- a/iphone/Maps/Bookmarks/BookmarksList/BookmarksListInteractor.swift +++ b/iphone/Maps/Bookmarks/BookmarksList/BookmarksListInteractor.swift @@ -15,12 +15,21 @@ extension BookmarksListSortingType { } } -final class BookmarksListInteractor { - private let markGroupId: MWMMarkGroupID - private var bookmarksManager: BookmarksManager { BookmarksManager.shared() } +final class BookmarksListInteractor: NSObject { + private var markGroupId: MWMMarkGroupID + private var bookmarksManager: BookmarksManager + + var onCategoryReload: ((GroupReloadingResult) -> Void)? init(markGroupId: MWMMarkGroupID) { self.markGroupId = markGroupId + self.bookmarksManager = BookmarksManager.shared() + super.init() + self.addToBookmarksManagerObserverList() + } + + deinit { + removeFromBookmarksManagerObserverList() } } @@ -151,4 +160,27 @@ extension BookmarksListInteractor: IBookmarksListInteractor { func finishExportFile() { bookmarksManager.finishShareCategory() } + + func addToBookmarksManagerObserverList() { + bookmarksManager.add(self) + } + + func removeFromBookmarksManagerObserverList() { + bookmarksManager.remove(self) + } + + func reloadCategory() { + onCategoryReload?(bookmarksManager.hasCategory(markGroupId) ? .success : .notFound) + } +} + +// MARK: - BookmarksObserver +extension BookmarksListInteractor: BookmarksObserver { + func onBookmarksLoadFinished() { + reloadCategory() + } + + func onBookmarksCategoryDeleted(_ groupId: MWMMarkGroupID) { + reloadCategory() + } } diff --git a/iphone/Maps/Bookmarks/BookmarksList/BookmarksListInterfaces.swift b/iphone/Maps/Bookmarks/BookmarksList/BookmarksListInterfaces.swift index 1e51407506..6767d392d3 100644 --- a/iphone/Maps/Bookmarks/BookmarksList/BookmarksListInterfaces.swift +++ b/iphone/Maps/Bookmarks/BookmarksList/BookmarksListInterfaces.swift @@ -11,6 +11,11 @@ enum BookmarkToolbarButtonSource { case more } +enum GroupReloadingResult { + case success + case notFound +} + protocol IBookmarksListSectionViewModel { var numberOfItems: Int { get } var sectionTitle: String { get } @@ -89,6 +94,8 @@ enum BookmarksListSortingType { } protocol IBookmarksListInteractor { + var onCategoryReload: ((GroupReloadingResult) -> Void)? { get set } + func getBookmarkGroup() -> BookmarkGroup func hasDescription() -> Bool func prepareForSearch() @@ -125,6 +132,7 @@ protocol IBookmarksListRouter { delegate: SelectBookmarkGroupViewControllerDelegate?) func editBookmark(bookmarkId: MWMMarkID, completion: @escaping (Bool) -> Void) func editTrack(trackId: MWMTrackID, completion: @escaping (Bool) -> Void) + func goBack() } protocol IBookmarksListInfoViewModel { diff --git a/iphone/Maps/Bookmarks/BookmarksList/BookmarksListPresenter.swift b/iphone/Maps/Bookmarks/BookmarksList/BookmarksListPresenter.swift index f10cd583c0..b944c80db5 100644 --- a/iphone/Maps/Bookmarks/BookmarksList/BookmarksListPresenter.swift +++ b/iphone/Maps/Bookmarks/BookmarksList/BookmarksListPresenter.swift @@ -5,12 +5,12 @@ protocol BookmarksListDelegate: AnyObject { final class BookmarksListPresenter { private unowned let view: IBookmarksListView private let router: IBookmarksListRouter - private let interactor: IBookmarksListInteractor + private var interactor: IBookmarksListInteractor private weak var delegate: BookmarksListDelegate? private let distanceFormatter = MeasurementFormatter() private let imperialUnits: Bool - private let bookmarkGroup: BookmarkGroup + private var bookmarkGroup: BookmarkGroup private enum EditableItem { case bookmark(MWMMarkID) @@ -28,9 +28,22 @@ final class BookmarksListPresenter { self.delegate = delegate self.interactor = interactor self.imperialUnits = imperialUnits + self.bookmarkGroup = interactor.getBookmarkGroup() + self.distanceFormatter.unitOptions = [.providedUnit] + self.subscribeOnGroupReloading() + } - bookmarkGroup = interactor.getBookmarkGroup() - distanceFormatter.unitOptions = [.providedUnit] + private func subscribeOnGroupReloading() { + interactor.onCategoryReload = { [weak self] result in + guard let self else { return } + switch result { + case .notFound: + self.router.goBack() + case .success: + self.bookmarkGroup = self.interactor.getBookmarkGroup() + self.reload() + } + } } private func reload() { diff --git a/iphone/Maps/Bookmarks/BookmarksList/BookmarksListRouter.swift b/iphone/Maps/Bookmarks/BookmarksList/BookmarksListRouter.swift index 234ca81732..143b557c6f 100644 --- a/iphone/Maps/Bookmarks/BookmarksList/BookmarksListRouter.swift +++ b/iphone/Maps/Bookmarks/BookmarksList/BookmarksListRouter.swift @@ -79,4 +79,8 @@ extension BookmarksListRouter: IBookmarksListRouter { let editTrackController = EditTrackViewController(trackId: trackId, editCompletion: completion) mapViewController.navigationController?.pushViewController(editTrackController, animated: true) } + + func goBack() { + coordinator?.goBack() + } }