From 236b5ca0dc83c18afd0f849e5acaafdadfa6d5af Mon Sep 17 00:00:00 2001 From: sunxiaojian Date: Thu, 29 Apr 2021 10:50:10 +0800 Subject: [PATCH] fix: add observer for more menu --- Mastodon/Diffiable/Section/StatusSection.swift | 14 +++++++++++++- Mastodon/Extension/CoreDataStack/Status.swift | 7 +++++++ Mastodon/Protocol/UserProvider/UserProvider.swift | 2 +- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/Mastodon/Diffiable/Section/StatusSection.swift b/Mastodon/Diffiable/Section/StatusSection.swift index 36eecdbe..0e26e147 100644 --- a/Mastodon/Diffiable/Section/StatusSection.swift +++ b/Mastodon/Diffiable/Section/StatusSection.swift @@ -628,6 +628,18 @@ extension StatusSection { cell.statusView.actionToolbarContainer.favoriteButton.setTitle(favoriteCountTitle, for: .normal) cell.statusView.actionToolbarContainer.isFavoriteButtonHighlight = isLike + ManagedObjectObserver.observe(object: status.authorForUserProvider) + .receive(on: DispatchQueue.main) + .sink { _ in + // do nothing + } receiveValue: { [weak dependency, weak cell] change in + guard let cell = cell else { return } + guard let dependency = dependency else { return } + if case .update( _) = change.changeType { + StatusSection.setupStatusMoreButtonMenu(cell: cell, indexPath: indexPath, dependency: dependency, status: status) + } + } + .store(in: &cell.disposeBag) self.setupStatusMoreButtonMenu(cell: cell, indexPath: indexPath, dependency: dependency, status: status) } @@ -767,7 +779,7 @@ extension StatusSection { guard let authenticationBox = dependency.context.authenticationService.activeMastodonAuthenticationBox.value else { return } - let author = (status.reblog ?? status).author + let author = status.authorForUserProvider let canReport = authenticationBox.userID != author.id let isMuting = (author.mutingBy ?? Set()).map(\.id).contains(authenticationBox.userID) diff --git a/Mastodon/Extension/CoreDataStack/Status.swift b/Mastodon/Extension/CoreDataStack/Status.swift index 880be6fa..39b421db 100644 --- a/Mastodon/Extension/CoreDataStack/Status.swift +++ b/Mastodon/Extension/CoreDataStack/Status.swift @@ -63,3 +63,10 @@ extension Status { } } + +extension Status { + var authorForUserProvider: MastodonUser { + let author = (reblog ?? self).author + return author + } +} diff --git a/Mastodon/Protocol/UserProvider/UserProvider.swift b/Mastodon/Protocol/UserProvider/UserProvider.swift index 7426d89a..f3ee36c3 100644 --- a/Mastodon/Protocol/UserProvider/UserProvider.swift +++ b/Mastodon/Protocol/UserProvider/UserProvider.swift @@ -23,7 +23,7 @@ extension UserProvider where Self: StatusProvider { guard let self = self else { return } self.status(for: cell, indexPath: indexPath) .sink { status in - promise(.success(status?.author)) + promise(.success(status?.authorForUserProvider)) } .store(in: &self.disposeBag) }