91 lines
3.3 KiB
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)
|
|
}
|
|
}
|
|
}
|