Fix crash when conversation VC tries to restore from unloaded status
This commit is contained in:
parent
aa2d333f4a
commit
66e8fce488
|
@ -131,7 +131,31 @@ class ConversationTableViewController: EnhancedTableViewController {
|
||||||
let initialImage = showStatusesAutomatically ? ConversationTableViewController.hidePostsImage : ConversationTableViewController.showPostsImage
|
let initialImage = showStatusesAutomatically ? ConversationTableViewController.hidePostsImage : ConversationTableViewController.showPostsImage
|
||||||
visibilityBarButtonItem = UIBarButtonItem(image: initialImage, style: .plain, target: self, action: #selector(toggleVisibilityButtonPressed))
|
visibilityBarButtonItem = UIBarButtonItem(image: initialImage, style: .plain, target: self, action: #selector(toggleVisibilityButtonPressed))
|
||||||
navigationItem.rightBarButtonItem = visibilityBarButtonItem
|
navigationItem.rightBarButtonItem = visibilityBarButtonItem
|
||||||
|
|
||||||
|
loadMainStatus()
|
||||||
|
}
|
||||||
|
|
||||||
|
private func loadMainStatus() {
|
||||||
|
if let mainStatus = mastodonController.persistentContainer.status(for: mainStatusID) {
|
||||||
|
self.mainStatusLoaded(mainStatus)
|
||||||
|
} else {
|
||||||
|
let request = Client.getStatus(id: mainStatusID)
|
||||||
|
mastodonController.run(request) { (response) in
|
||||||
|
switch response {
|
||||||
|
case let .success(status, _):
|
||||||
|
let viewContext = self.mastodonController.persistentContainer.viewContext
|
||||||
|
self.mastodonController.persistentContainer.addOrUpdate(status: status, incrementReferenceCount: false, context: viewContext) { (statusMO) in
|
||||||
|
self.mainStatusLoaded(statusMO)
|
||||||
|
}
|
||||||
|
|
||||||
|
case .failure(_):
|
||||||
|
fatalError()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private func mainStatusLoaded(_ mainStatus: StatusMO) {
|
||||||
let mainStatusItem = Item.status(id: mainStatusID, state: mainStatusState)
|
let mainStatusItem = Item.status(id: mainStatusID, state: mainStatusState)
|
||||||
|
|
||||||
var snapshot = NSDiffableDataSourceSnapshot<Section, Item>()
|
var snapshot = NSDiffableDataSourceSnapshot<Section, Item>()
|
||||||
|
@ -139,12 +163,10 @@ class ConversationTableViewController: EnhancedTableViewController {
|
||||||
snapshot.appendItems([mainStatusItem], toSection: .statuses)
|
snapshot.appendItems([mainStatusItem], toSection: .statuses)
|
||||||
dataSource.apply(snapshot, animatingDifferences: false)
|
dataSource.apply(snapshot, animatingDifferences: false)
|
||||||
|
|
||||||
guard let mainStatus = self.mastodonController.persistentContainer.status(for: self.mainStatusID) else {
|
|
||||||
fatalError("Missing cached status \(self.mainStatusID)")
|
|
||||||
}
|
|
||||||
let mainStatusInReplyToID = mainStatus.inReplyToID
|
let mainStatusInReplyToID = mainStatus.inReplyToID
|
||||||
mainStatus.incrementReferenceCount()
|
mainStatus.incrementReferenceCount()
|
||||||
|
|
||||||
|
// todo: it would be nice to cache these contexts
|
||||||
let request = Status.getContext(mainStatusID)
|
let request = Status.getContext(mainStatusID)
|
||||||
mastodonController.run(request) { response in
|
mastodonController.run(request) { response in
|
||||||
guard case let .success(context, _) = response else { fatalError() }
|
guard case let .success(context, _) = response else { fatalError() }
|
||||||
|
|
Loading…
Reference in New Issue