diff --git a/WireGuard/Base.lproj/Main.storyboard b/WireGuard/Base.lproj/Main.storyboard
index 56def8c..cc09a45 100644
--- a/WireGuard/Base.lproj/Main.storyboard
+++ b/WireGuard/Base.lproj/Main.storyboard
@@ -305,7 +305,7 @@
-
+
@@ -345,6 +345,9 @@
+
+
+
diff --git a/WireGuard/ViewControllers/TunnelConfigurationTableViewController.swift b/WireGuard/ViewControllers/TunnelConfigurationTableViewController.swift
index 9a3f10d..d511101 100644
--- a/WireGuard/ViewControllers/TunnelConfigurationTableViewController.swift
+++ b/WireGuard/ViewControllers/TunnelConfigurationTableViewController.swift
@@ -45,6 +45,17 @@ class TunnelConfigurationTableViewController: UITableViewController {
return tunnel
}
+ @IBAction func addPeer(_ sender: Any) {
+ if let moc = tunnel.managedObjectContext {
+ tableView.beginUpdates()
+ let insertedAt = IndexPath(row: tunnel.peers?.count ?? 0, section: 1)
+ tableView.insertRows(at: [insertedAt], with: .automatic)
+ tunnel.addToPeers(Peer(context: moc))
+ tableView.endUpdates()
+ tableView.scrollToRow(at: insertedAt, at: .middle, animated: true)
+ }
+ }
+
override func numberOfSections(in tableView: UITableView) -> Int {
return 3
}
@@ -73,9 +84,12 @@ class TunnelConfigurationTableViewController: UITableViewController {
tunnel.addToPeers(peer)
cell.peer = peer
}
- return cell
+ cell.delegate = self
+ return cell
default:
- return tableView.dequeueReusableCell(type: AddPeerTableViewCell.self, for: indexPath)
+ let cell = tableView.dequeueReusableCell(type: AddPeerTableViewCell.self, for: indexPath)
+ cell.tunnel = tunnel
+ return cell
}
}
@@ -100,6 +114,19 @@ class TunnelConfigurationTableViewController: UITableViewController {
}
}
+extension TunnelConfigurationTableViewController: PeerTableViewCellDelegate {
+ func delete(peer: Peer) {
+ if let moc = tunnel.managedObjectContext {
+ tableView.beginUpdates()
+ let deletedAt = IndexPath(row: tunnel.peers?.index(of: peer) ?? 0, section: 1)
+ tableView.deleteRows(at: [deletedAt], with: .automatic)
+ tunnel.removeFromPeers(peer)
+ moc.delete(peer)
+ tableView.endUpdates()
+ }
+ }
+}
+
class InterfaceTableViewCell: UITableViewCell {
var model: Interface!
@@ -117,7 +144,6 @@ extension InterfaceTableViewCell: UITextFieldDelegate {
@IBAction
func textfieldDidChange(_ sender: UITextField) {
let string = sender.text
- print(string)
if sender == nameField {
model.tunnel?.title = string
@@ -142,16 +168,15 @@ extension InterfaceTableViewCell: UITextFieldDelegate {
}
}
}
+}
- func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
- print("\(string)")
-
- return true
- }
+protocol PeerTableViewCellDelegate: class {
+ func delete(peer: Peer)
}
class PeerTableViewCell: UITableViewCell {
var peer: Peer!
+ weak var delegate: PeerTableViewCellDelegate?
@IBOutlet weak var publicKeyField: UITextField!
@IBOutlet weak var preSharedKeyField: UITextField!
@@ -159,13 +184,15 @@ class PeerTableViewCell: UITableViewCell {
@IBOutlet weak var endpointField: UITextField!
@IBOutlet weak var persistentKeepaliveField: UITextField!
+ @IBAction func deletePeer(_ sender: Any) {
+ delegate?.delete(peer: peer)
+ }
}
extension PeerTableViewCell: UITextFieldDelegate {
@IBAction
func textfieldDidChange(_ sender: UITextField) {
let string = sender.text
- print(string)
if sender == publicKeyField {
peer.publicKey = string
@@ -181,22 +208,16 @@ extension PeerTableViewCell: UITextFieldDelegate {
}
}
}
-
- func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
- print("\(string)")
-
- return true
- }
}
class AddPeerTableViewCell: UITableViewCell {
- var model: Interface?
+ var tunnel: Tunnel!
@IBAction func addPeer(_ sender: Any) {
- //TODO implement
- print("Implement add peer")
+ if let moc = tunnel.managedObjectContext {
+ tunnel.addToPeers(Peer(context: moc))
+ }
}
-
}
extension TunnelConfigurationTableViewController: Identifyable {}