diff --git a/Tusker/Screens/Utilities/Previewing.swift b/Tusker/Screens/Utilities/Previewing.swift index 6017730281..4b80748436 100644 --- a/Tusker/Screens/Utilities/Previewing.swift +++ b/Tusker/Screens/Utilities/Previewing.swift @@ -133,16 +133,15 @@ extension MenuPreviewProvider { ] } - func actionsForStatus(statusID: String, sourceView: UIView?) -> [UIMenuElement] { - guard let mastodonController = mastodonController, - let status = mastodonController.persistentContainer.status(for: statusID) else { return [] } + func actionsForStatus(_ status: StatusMO, sourceView: UIView?) -> [UIMenuElement] { + guard let mastodonController = mastodonController else { return [] } guard mastodonController.loggedIn else { return [ openInSafariAction(url: status.url!), createAction(identifier: "share", title: "Share...", systemImageName: "square.and.arrow.up", handler: { [weak self] (_) in guard let self = self else { return } - self.navigationDelegate?.showMoreOptions(forStatus: statusID, sourceView: sourceView) + self.navigationDelegate?.showMoreOptions(forStatus: status.id, sourceView: sourceView) }) ] } @@ -153,11 +152,11 @@ extension MenuPreviewProvider { var actionsSection = [ createAction(identifier: "reply", title: "Reply", systemImageName: "arrowshape.turn.up.left", handler: { [weak self] (_) in guard let self = self else { return } - self.navigationDelegate?.compose(inReplyToID: statusID) + self.navigationDelegate?.compose(inReplyToID: status.id) }), createAction(identifier: "bookmark", title: bookmarked ? "Unbookmark" : "Bookmark", systemImageName: bookmarked ? "bookmark.fill" : "bookmark", handler: { [weak self] (_) in guard let self = self else { return } - let request = (bookmarked ? Status.unbookmark : Status.bookmark)(statusID) + let request = (bookmarked ? Status.unbookmark : Status.bookmark)(status.id) self.mastodonController?.run(request) { (response) in if case let .success(status, _) = response { self.mastodonController?.persistentContainer.addOrUpdate(status: status, incrementReferenceCount: false) @@ -166,7 +165,7 @@ extension MenuPreviewProvider { }), createAction(identifier: "mute", title: muted ? "Unmute" : "Mute", systemImageName: muted ? "speaker" : "speaker.slash", handler: { [weak self] (_) in guard let self = self else { return } - let request = (muted ? Status.unmuteConversation : Status.muteConversation)(statusID) + let request = (muted ? Status.unmuteConversation : Status.muteConversation)(status.id) self.mastodonController?.run(request) { (response) in if case let .success(status, _) = response { self.mastodonController?.persistentContainer.addOrUpdate(status: status, incrementReferenceCount: false) @@ -179,7 +178,7 @@ extension MenuPreviewProvider { let pinned = status.pinned ?? false actionsSection.append(createAction(identifier: "", title: pinned ? "Unpin" : "Pin", systemImageName: pinned ? "pin.slash" : "pin", handler: { [weak self] (_) in guard let self = self else { return } - let request = (pinned ? Status.unpin : Status.pin)(statusID) + let request = (pinned ? Status.unpin : Status.pin)(status.id) self.mastodonController?.run(request, completion: { [weak self] (response) in guard let self = self else { return } if case let .success(status, _) = response { @@ -193,7 +192,7 @@ extension MenuPreviewProvider { openInSafariAction(url: status.url!), createAction(identifier: "share", title: "Share...", systemImageName: "square.and.arrow.up", handler: { [weak self] (_) in guard let self = self else { return } - self.navigationDelegate?.showMoreOptions(forStatus: statusID, sourceView: sourceView) + self.navigationDelegate?.showMoreOptions(forStatus: status.id, sourceView: sourceView) }), ] @@ -203,7 +202,7 @@ extension MenuPreviewProvider { return } // todo: this should try to find an existing session - UIApplication.shared.requestSceneSessionActivation(nil, userActivity: UserActivityManager.showConversationActivity(mainStatusID: statusID, accountID: id), options: nil, errorHandler: nil) + UIApplication.shared.requestSceneSessionActivation(nil, userActivity: UserActivityManager.showConversationActivity(mainStatusID: status.id, accountID: id), options: nil, errorHandler: nil) })) #endif diff --git a/Tusker/Views/Status/BaseStatusTableViewCell.swift b/Tusker/Views/Status/BaseStatusTableViewCell.swift index 0b2867203b..6438ca661e 100644 --- a/Tusker/Views/Status/BaseStatusTableViewCell.swift +++ b/Tusker/Views/Status/BaseStatusTableViewCell.swift @@ -212,7 +212,7 @@ class BaseStatusTableViewCell: UITableViewCell { if #available(iOS 14.0, *) { // keep menu in sync with changed states e.g. bookmarked, muted - moreButton.menu = UIMenu(title: "", image: nil, identifier: nil, options: [], children: actionsForStatus(statusID: statusID, sourceView: moreButton)) + moreButton.menu = UIMenu(title: "", image: nil, identifier: nil, options: [], children: actionsForStatus(status, sourceView: moreButton)) } } @@ -230,7 +230,7 @@ class BaseStatusTableViewCell: UITableViewCell { func updateUIForPreferences(account: AccountMO, status: StatusMO) { avatarImageView.layer.cornerRadius = Preferences.shared.avatarStyle.cornerRadius(for: avatarImageView) - attachmentsView.contentHidden = Preferences.shared.blurAllMedia || (mastodonController.persistentContainer.status(for: statusID)?.sensitive ?? false) + attachmentsView.contentHidden = Preferences.shared.blurAllMedia || status.sensitive updateStatusIconsForPreferences(status) diff --git a/Tusker/Views/Status/TimelineStatusTableViewCell.swift b/Tusker/Views/Status/TimelineStatusTableViewCell.swift index 79ea67a96a..91d8162301 100644 --- a/Tusker/Views/Status/TimelineStatusTableViewCell.swift +++ b/Tusker/Views/Status/TimelineStatusTableViewCell.swift @@ -180,10 +180,13 @@ class TimelineStatusTableViewCell: BaseStatusTableViewCell { } override func getStatusCellPreviewProviders(for location: CGPoint, sourceViewController: UIViewController) -> BaseStatusTableViewCell.PreviewProviders? { - guard let mastodonController = mastodonController else { return nil } + guard let mastodonController = mastodonController, + let status = mastodonController.persistentContainer.status(for: statusID) else { + return nil + } return ( content: { ConversationTableViewController(for: self.statusID, state: self.statusState.copy(), mastodonController: mastodonController) }, - actions: { self.actionsForStatus(statusID: self.statusID, sourceView: self) } + actions: { self.actionsForStatus(status, sourceView: self) } ) }