Add toast error messages to menu actions
This commit is contained in:
parent
bf8a294676
commit
56a0518c80
|
@ -139,8 +139,15 @@ extension MenuActionProvider {
|
||||||
guard let self = self else { return }
|
guard let self = self else { return }
|
||||||
let request = (bookmarked ? Status.unbookmark : Status.bookmark)(status.id)
|
let request = (bookmarked ? Status.unbookmark : Status.bookmark)(status.id)
|
||||||
self.mastodonController?.run(request) { (response) in
|
self.mastodonController?.run(request) { (response) in
|
||||||
if case let .success(status, _) = response {
|
switch response {
|
||||||
|
case .success(let status, _):
|
||||||
self.mastodonController?.persistentContainer.addOrUpdate(status: status)
|
self.mastodonController?.persistentContainer.addOrUpdate(status: status)
|
||||||
|
|
||||||
|
case .failure(let error):
|
||||||
|
if let toastable = self.toastableViewController {
|
||||||
|
let config = ToastConfiguration(from: error, with: "Error \(bookmarked ? "Unb" : "B")ookmarking", in: toastable, retryAction: nil)
|
||||||
|
toastable.showToast(configuration: config, animated: true)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
|
@ -161,8 +168,14 @@ extension MenuActionProvider {
|
||||||
guard let self = self else { return }
|
guard let self = self else { return }
|
||||||
let request = (muted ? Status.unmuteConversation : Status.muteConversation)(status.id)
|
let request = (muted ? Status.unmuteConversation : Status.muteConversation)(status.id)
|
||||||
self.mastodonController?.run(request) { (response) in
|
self.mastodonController?.run(request) { (response) in
|
||||||
if case let .success(status, _) = response {
|
switch response {
|
||||||
|
case .success(let status, _):
|
||||||
self.mastodonController?.persistentContainer.addOrUpdate(status: status)
|
self.mastodonController?.persistentContainer.addOrUpdate(status: status)
|
||||||
|
case .failure(let error):
|
||||||
|
if let toastable = self.toastableViewController {
|
||||||
|
let config = ToastConfiguration(from: error, with: "Error \(muted ? "Unm" : "M")uting", in: toastable, retryAction: nil)
|
||||||
|
toastable.showToast(configuration: config, animated: true)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}))
|
}))
|
||||||
|
@ -177,8 +190,14 @@ extension MenuActionProvider {
|
||||||
let request = (pinned ? Status.unpin : Status.pin)(status.id)
|
let request = (pinned ? Status.unpin : Status.pin)(status.id)
|
||||||
self.mastodonController?.run(request, completion: { [weak self] (response) in
|
self.mastodonController?.run(request, completion: { [weak self] (response) in
|
||||||
guard let self = self else { return }
|
guard let self = self else { return }
|
||||||
if case let .success(status, _) = response {
|
switch response {
|
||||||
|
case .success(let status, _):
|
||||||
self.mastodonController?.persistentContainer.addOrUpdate(status: status)
|
self.mastodonController?.persistentContainer.addOrUpdate(status: status)
|
||||||
|
case .failure(let error):
|
||||||
|
if let toastable = self.toastableViewController {
|
||||||
|
let config = ToastConfiguration(from: error, with: "Error \(pinned ? "Unp" :"P")inning", in: toastable, retryAction: nil)
|
||||||
|
toastable.showToast(configuration: config, animated: true)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}))
|
}))
|
||||||
|
@ -190,10 +209,16 @@ extension MenuActionProvider {
|
||||||
guard let mastodonController = self?.mastodonController else { return }
|
guard let mastodonController = self?.mastodonController else { return }
|
||||||
let request = Client.getStatus(id: status.id)
|
let request = Client.getStatus(id: status.id)
|
||||||
mastodonController.run(request, completion: { (response) in
|
mastodonController.run(request, completion: { (response) in
|
||||||
if case let .success(status, _) = response {
|
switch response {
|
||||||
|
case .success(let status, _):
|
||||||
// todo: this shouldn't really use the viewContext, but for some reason saving the
|
// todo: this shouldn't really use the viewContext, but for some reason saving the
|
||||||
// backgroundContext with the new version of the status isn't updating the viewContext
|
// backgroundContext with the new version of the status isn't updating the viewContext
|
||||||
mastodonController.persistentContainer.addOrUpdate(status: status, context: mastodonController.persistentContainer.viewContext)
|
mastodonController.persistentContainer.addOrUpdate(status: status, context: mastodonController.persistentContainer.viewContext)
|
||||||
|
case .failure(let error):
|
||||||
|
if let toastable = self?.toastableViewController {
|
||||||
|
let config = ToastConfiguration(from: error, with: "Error Refreshing Poll", in: toastable, retryAction: nil)
|
||||||
|
toastable.showToast(configuration: config, animated: true)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}), at: 0)
|
}), at: 0)
|
||||||
|
@ -283,8 +308,11 @@ extension MenuActionProvider {
|
||||||
let request = (following ? Account.unfollow : Account.follow)(accountID)
|
let request = (following ? Account.unfollow : Account.follow)(accountID)
|
||||||
mastodonController.run(request) { response in
|
mastodonController.run(request) { response in
|
||||||
switch response {
|
switch response {
|
||||||
case .failure(_):
|
case .failure(let error):
|
||||||
fatalError()
|
if let toastable = self.toastableViewController {
|
||||||
|
let config = ToastConfiguration(from: error, with: "Error \(following ? "Unf" : "F")ollowing", in: toastable, retryAction: nil)
|
||||||
|
toastable.showToast(configuration: config, animated: true)
|
||||||
|
}
|
||||||
case .success(let relationship, _):
|
case .success(let relationship, _):
|
||||||
mastodonController.persistentContainer.addOrUpdate(relationship: relationship)
|
mastodonController.persistentContainer.addOrUpdate(relationship: relationship)
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,12 +35,14 @@ struct ToastConfiguration {
|
||||||
}
|
}
|
||||||
|
|
||||||
extension ToastConfiguration {
|
extension ToastConfiguration {
|
||||||
init(from error: Client.Error, with title: String, in viewController: UIViewController, retryAction: @escaping (ToastView) -> Void) {
|
init(from error: Client.Error, with title: String, in viewController: UIViewController, retryAction: ((ToastView) -> Void)?) {
|
||||||
self.init(title: title)
|
self.init(title: title)
|
||||||
self.subtitle = error.localizedDescription
|
self.subtitle = error.localizedDescription
|
||||||
self.systemImageName = error.systemImageName
|
self.systemImageName = error.systemImageName
|
||||||
|
if let retryAction = retryAction {
|
||||||
self.actionTitle = "Retry"
|
self.actionTitle = "Retry"
|
||||||
self.action = retryAction
|
self.action = retryAction
|
||||||
|
}
|
||||||
self.longPressAction = { [unowned viewController] toast in
|
self.longPressAction = { [unowned viewController] toast in
|
||||||
toast.dismissToast(animated: true)
|
toast.dismissToast(animated: true)
|
||||||
let text = """
|
let text = """
|
||||||
|
|
Loading…
Reference in New Issue