Strongly recommended now appears as placeholder for DNS when needed

This commit is contained in:
Eric Kuck 2018-12-21 19:52:51 -06:00
parent d0cc2a8afd
commit 1124d4d359

View File

@ -8,15 +8,25 @@ protocol TunnelEditTableViewControllerDelegate: class {
func tunnelEditingCancelled() func tunnelEditingCancelled()
} }
// MARK: TunnelEditTableViewController
class TunnelEditTableViewController: UITableViewController { class TunnelEditTableViewController: UITableViewController {
private enum Section { private enum Section {
case interface case interface
case peer(_ peer: TunnelViewModel.PeerData) case peer(_ peer: TunnelViewModel.PeerData)
case addPeer case addPeer
case onDemand case onDemand
static func == (lhs: Section, rhs: Section) -> Bool {
switch (lhs, rhs) {
case (.interface, .interface),
(.addPeer, .addPeer),
(.onDemand, .onDemand):
return true
case let (.peer(peerA), .peer(peerB)):
return peerA.index == peerB.index
default:
return false
}
}
} }
weak var delegate: TunnelEditTableViewControllerDelegate? weak var delegate: TunnelEditTableViewControllerDelegate?
@ -45,8 +55,8 @@ class TunnelEditTableViewController: UITableViewController {
var activateOnDemandSetting: ActivateOnDemandSetting var activateOnDemandSetting: ActivateOnDemandSetting
private var sections = [Section]() private var sections = [Section]()
// Use this initializer to edit an existing tunnel.
init(tunnelsManager: TunnelsManager, tunnel: TunnelContainer) { init(tunnelsManager: TunnelsManager, tunnel: TunnelContainer) {
// Use this initializer to edit an existing tunnel.
self.tunnelsManager = tunnelsManager self.tunnelsManager = tunnelsManager
self.tunnel = tunnel self.tunnel = tunnel
tunnelViewModel = TunnelViewModel(tunnelConfiguration: tunnel.tunnelConfiguration) tunnelViewModel = TunnelViewModel(tunnelConfiguration: tunnel.tunnelConfiguration)
@ -55,8 +65,8 @@ class TunnelEditTableViewController: UITableViewController {
loadSections() loadSections()
} }
// Use this initializer to create a new tunnel.
init(tunnelsManager: TunnelsManager) { init(tunnelsManager: TunnelsManager) {
// Use this initializer to create a new tunnel.
self.tunnelsManager = tunnelsManager self.tunnelsManager = tunnelsManager
tunnel = nil tunnel = nil
tunnelViewModel = TunnelViewModel(tunnelConfiguration: nil) tunnelViewModel = TunnelViewModel(tunnelConfiguration: nil)
@ -105,9 +115,7 @@ class TunnelEditTableViewController: UITableViewController {
case .saved(let tunnelConfiguration): case .saved(let tunnelConfiguration):
if let tunnel = tunnel { if let tunnel = tunnel {
// We're modifying an existing tunnel // We're modifying an existing tunnel
tunnelsManager.modify(tunnel: tunnel, tunnelsManager.modify(tunnel: tunnel, tunnelConfiguration: tunnelConfiguration, activateOnDemandSetting: activateOnDemandSetting) { [weak self] error in
tunnelConfiguration: tunnelConfiguration,
activateOnDemandSetting: activateOnDemandSetting) { [weak self] error in
if let error = error { if let error = error {
ErrorPresenter.showErrorAlert(error: error, from: self) ErrorPresenter.showErrorAlert(error: error, from: self)
} else { } else {
@ -117,8 +125,7 @@ class TunnelEditTableViewController: UITableViewController {
} }
} else { } else {
// We're adding a new tunnel // We're adding a new tunnel
tunnelsManager.add(tunnelConfiguration: tunnelConfiguration, tunnelsManager.add(tunnelConfiguration: tunnelConfiguration, activateOnDemandSetting: activateOnDemandSetting) { [weak self] result in
activateOnDemandSetting: activateOnDemandSetting) { [weak self] result in
if let error = result.error { if let error = result.error {
ErrorPresenter.showErrorAlert(error: error, from: self) ErrorPresenter.showErrorAlert(error: error, from: self)
} else { } else {
@ -290,8 +297,7 @@ extension TunnelEditTableViewController {
cell.buttonText = field.localizedUIString cell.buttonText = field.localizedUIString
cell.hasDestructiveAction = true cell.hasDestructiveAction = true
cell.onTapped = { [weak self, weak peerData] in cell.onTapped = { [weak self, weak peerData] in
guard let peerData = peerData else { return } guard let self = self, let peerData = peerData else { return }
guard let self = self else { return }
self.showConfirmationAlert(message: tr("deletePeerConfirmationAlertMessage"), buttonTitle: tr("deletePeerConfirmationAlertButtonTitle"), from: cell) { [weak self] in self.showConfirmationAlert(message: tr("deletePeerConfirmationAlertMessage"), buttonTitle: tr("deletePeerConfirmationAlertButtonTitle"), from: cell) { [weak self] in
guard let self = self else { return } guard let self = self else { return }
let removedSectionIndices = self.deletePeer(peer: peerData) let removedSectionIndices = self.deletePeer(peer: peerData)
@ -351,20 +357,24 @@ extension TunnelEditTableViewController {
cell.value = peerData[field] cell.value = peerData[field]
if field == .allowedIPs { if field == .allowedIPs {
let firstInterfaceSection = sections.firstIndex(where: { $0 == .interface })!
let interfaceSubSection = interfaceFieldsBySection.firstIndex(where: { $0.contains(.dns) })!
let dnsRow = interfaceFieldsBySection[interfaceSubSection].firstIndex(where: { $0 == .dns })!
cell.onValueBeingEdited = { [weak self, weak peerData] value in cell.onValueBeingEdited = { [weak self, weak peerData] value in
guard let self = self, let peerData = peerData else { return } guard let self = self, let peerData = peerData else { return }
let oldValue = peerData.shouldAllowExcludePrivateIPsControl let oldValue = peerData.shouldAllowExcludePrivateIPsControl
peerData[.allowedIPs] = value peerData[.allowedIPs] = value
if oldValue != peerData.shouldAllowExcludePrivateIPsControl { if oldValue != peerData.shouldAllowExcludePrivateIPsControl, let row = self.peerFields.firstIndex(of: .excludePrivateIPs) {
if let row = self.peerFields.firstIndex(of: .excludePrivateIPs) { if peerData.shouldAllowExcludePrivateIPsControl {
if peerData.shouldAllowExcludePrivateIPsControl { self.tableView.insertRows(at: [IndexPath(row: row, section: indexPath.section)], with: .fade)
self.tableView.insertRows(at: [IndexPath(row: row, section: indexPath.section)], with: .fade) } else {
} else { self.tableView.deleteRows(at: [IndexPath(row: row, section: indexPath.section)], with: .fade)
self.tableView.deleteRows(at: [IndexPath(row: row, section: indexPath.section)], with: .fade)
}
} }
} }
tableView.reloadRows(at: [IndexPath(row: dnsRow, section: firstInterfaceSection + interfaceSubSection)], with: .none)
} }
} else { } else {
cell.onValueChanged = { [weak peerData] value in cell.onValueChanged = { [weak peerData] value in