Add domain block action to profiles
This commit is contained in:
parent
5c479e3bf0
commit
f1511039ef
|
@ -394,29 +394,49 @@ extension MenuActionProvider {
|
|||
@MainActor
|
||||
private func blockAction(for relationship: RelationshipMO, mastodonController: MastodonController) -> UIMenuElement {
|
||||
let accountID = relationship.accountID
|
||||
let blocking = relationship.blocking
|
||||
let handler = { (_: UIAction) in
|
||||
let request = (blocking ? Account.unblock : Account.block)(accountID)
|
||||
mastodonController.run(request) { response in
|
||||
switch response {
|
||||
case .failure(let error):
|
||||
let displayName = relationship.account!.displayOrUserName
|
||||
let host = relationship.account!.url.host!
|
||||
let handleFailure = { (isActionBlock: Bool, error: Client.Error) in
|
||||
if let toastable = self.toastableViewController {
|
||||
let config = ToastConfiguration(from: error, with: "Error \(blocking ? "Unb" : "B")locking", in: toastable, retryAction: nil)
|
||||
let config = ToastConfiguration(from: error, with: "Error \(isActionBlock ? "B" : "Unb")locking", in: toastable, retryAction: nil)
|
||||
DispatchQueue.main.async {
|
||||
toastable.showToast(configuration: config, animated: true)
|
||||
}
|
||||
}
|
||||
}
|
||||
let handler = { (block: Bool) in
|
||||
return { (_: UIAction) in
|
||||
let req = block ? Account.block(accountID) : Account.unblock(accountID)
|
||||
_ = mastodonController.run(req) { response in
|
||||
switch response {
|
||||
case .failure(let error):
|
||||
handleFailure(block, error)
|
||||
case .success(let relationship, _):
|
||||
mastodonController.persistentContainer.addOrUpdate(relationship: relationship)
|
||||
}
|
||||
}
|
||||
}
|
||||
if blocking {
|
||||
return createAction(identifier: "block", title: "Unblock", systemImageName: "circle.slash", handler: handler)
|
||||
}
|
||||
let domainHandler = { (block: Bool) in
|
||||
return { (_: UIAction) in
|
||||
let req = block ? Client.block(domain: host) : Client.unblock(domain: host)
|
||||
mastodonController.run(req) { response in
|
||||
if case .failure(let error) = response {
|
||||
handleFailure(block, error)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if relationship.domainBlocking {
|
||||
return createAction(identifier: "block", title: "Unblock \(host)", systemImageName: "circle.slash", handler: domainHandler(false))
|
||||
} else if relationship.blocking {
|
||||
return createAction(identifier: "block", title: "Unblock \(displayName)", systemImageName: "circle.slash", handler: handler(false))
|
||||
} else {
|
||||
return UIMenu(title: "Block", image: UIImage(systemName: "circle.slash"), children: [
|
||||
let image = UIImage(systemName: "circle.slash")
|
||||
return UIMenu(title: "Block", image: image, children: [
|
||||
UIAction(title: "Cancel", handler: { _ in }),
|
||||
UIAction(title: "Block \(relationship.account!.displayOrUserName)", image: UIImage(systemName: "circle.slash"), attributes: .destructive, handler: handler),
|
||||
UIAction(title: "Block \(displayName)", image: image, attributes: .destructive, handler: handler(true)),
|
||||
UIAction(title: "Block \(host)", image: image, attributes: .destructive, handler: domainHandler(true))
|
||||
])
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue