Antidote/Antidote/FriendRequestController.swift

91 lines
3.3 KiB
Swift

// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
import UIKit
protocol FriendRequestControllerDelegate: class {
func friendRequestControllerDidFinish(_ controller: FriendRequestController)
}
class FriendRequestController: StaticTableController {
weak var delegate: FriendRequestControllerDelegate?
fileprivate let request: OCTFriendRequest
fileprivate weak var submanagerFriends: OCTSubmanagerFriends!
fileprivate let publicKeyModel: StaticTableDefaultCellModel
fileprivate let messageModel: StaticTableDefaultCellModel
fileprivate let buttonsModel: StaticTableMultiChoiceButtonCellModel
init(theme: Theme, request: OCTFriendRequest, submanagerFriends: OCTSubmanagerFriends) {
self.request = request
self.submanagerFriends = submanagerFriends
publicKeyModel = StaticTableDefaultCellModel()
messageModel = StaticTableDefaultCellModel()
buttonsModel = StaticTableMultiChoiceButtonCellModel()
super.init(theme: theme, style: .plain, model: [
[
publicKeyModel,
messageModel,
],
[
buttonsModel,
],
])
updateModels()
}
required convenience init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
private extension FriendRequestController {
func updateModels() {
title = String(localized: "contact_request")
publicKeyModel.title = String(localized: "public_key")
publicKeyModel.value = request.publicKey
publicKeyModel.userInteractionEnabled = false
messageModel.title = String(localized: "status_message")
messageModel.value = request.message
messageModel.userInteractionEnabled = false
buttonsModel.buttons = [
StaticTableMultiChoiceButtonCellModel.ButtonModel(title: String(localized: "contact_request_decline"), style: .negative, target: self, action: #selector(FriendRequestController.declineButtonPressed)),
StaticTableMultiChoiceButtonCellModel.ButtonModel(title: String(localized: "contact_request_accept"), style: .positive, target: self, action: #selector(FriendRequestController.acceptButtonPressed)),
]
}
}
extension FriendRequestController {
@objc func declineButtonPressed() {
let alert = UIAlertController(title: String(localized: "contact_request_delete_title"), message: nil, preferredStyle: .alert)
alert.addAction(UIAlertAction(title: String(localized: "alert_cancel"), style: .default, handler: nil))
alert.addAction(UIAlertAction(title: String(localized: "alert_delete"), style: .destructive) { [unowned self] _ -> Void in
self.submanagerFriends.remove(self.request)
self.delegate?.friendRequestControllerDidFinish(self)
})
present(alert, animated: true, completion: nil)
}
@objc func acceptButtonPressed() {
do {
try submanagerFriends.approve(request)
delegate?.friendRequestControllerDidFinish(self)
}
catch let error as NSError {
handleErrorWithType(.toxAddFriend, error: error)
}
}
}