From 7ad0b15b329e7cf2cbd8001d43ce009a236fc5ac Mon Sep 17 00:00:00 2001 From: Marcus Kida Date: Tue, 28 Nov 2023 11:13:13 +0100 Subject: [PATCH] Fix bookmarked state (IOS-176) --- .../Provider/DataSourceFacade+Bookmark.swift | 8 +++++--- .../FeedFetchedResultsController.swift | 2 ++ .../View/Content/StatusView+ViewModel.swift | 12 +++++++++++- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/Mastodon/Protocol/Provider/DataSourceFacade+Bookmark.swift b/Mastodon/Protocol/Provider/DataSourceFacade+Bookmark.swift index 70a3fdbc0..8612254f3 100644 --- a/Mastodon/Protocol/Provider/DataSourceFacade+Bookmark.swift +++ b/Mastodon/Protocol/Provider/DataSourceFacade+Bookmark.swift @@ -13,15 +13,17 @@ import MastodonSDK extension DataSourceFacade { public static func responseToStatusBookmarkAction( - provider: UIViewController & NeedsDependency & AuthContextProvider, + provider: UIViewController & NeedsDependency & AuthContextProvider & DataSourceProvider, status: MastodonStatus ) async throws { let selectionFeedbackGenerator = await UISelectionFeedbackGenerator() await selectionFeedbackGenerator.selectionChanged() - _ = try await provider.context.apiService.bookmark( + let updatedStatus = try await provider.context.apiService.bookmark( record: status, authenticationBox: provider.authContext.mastodonAuthenticationBox - ) + ).value + + provider.update(status: .fromEntity(updatedStatus)) } } diff --git a/MastodonSDK/Sources/MastodonCore/FetchedResultsController/FeedFetchedResultsController.swift b/MastodonSDK/Sources/MastodonCore/FetchedResultsController/FeedFetchedResultsController.swift index 8b630b274..3961c5bae 100644 --- a/MastodonSDK/Sources/MastodonCore/FetchedResultsController/FeedFetchedResultsController.swift +++ b/MastodonSDK/Sources/MastodonCore/FetchedResultsController/FeedFetchedResultsController.swift @@ -52,12 +52,14 @@ final public class FeedFetchedResultsController { case .some(true): newRecords[i] = .fromStatus({ let stat = MastodonStatus.fromEntity(records[i].status!.entity) + stat.isSensitiveToggled = status.isSensitiveToggled stat.reblog = .fromEntity(status.entity) return stat }(), kind: record.kind) case .some(false), .none: newRecords[i] = .fromStatus({ let stat = MastodonStatus.fromEntity(status.entity) + stat.isSensitiveToggled = status.isSensitiveToggled return stat }(), kind: record.kind) } diff --git a/MastodonSDK/Sources/MastodonUI/View/Content/StatusView+ViewModel.swift b/MastodonSDK/Sources/MastodonUI/View/Content/StatusView+ViewModel.swift index 735e4c472..715008287 100644 --- a/MastodonSDK/Sources/MastodonUI/View/Content/StatusView+ViewModel.swift +++ b/MastodonSDK/Sources/MastodonUI/View/Content/StatusView+ViewModel.swift @@ -27,7 +27,16 @@ extension StatusView { public var context: AppContext? public var authContext: AuthContext? - public var originalStatus: MastodonStatus? + public var originalStatus: MastodonStatus? { + didSet { + originalStatus?.$entity + .receive(on: DispatchQueue.main) + .sink(receiveValue: { status in + self.isBookmark = status.bookmarked == true + }) + .store(in: &disposeBag) + } + } // Header @Published public var header: Header = .none @@ -148,6 +157,7 @@ extension StatusView { isMediaSensitive = false isSensitiveToggled = false isCurrentlyTranslating = false + isBookmark = false translation = nil activeFilters = []