TunnelsManager: Support for removing multiple tunnels at a time
This commit is contained in:
parent
047da7911c
commit
8648f80877
|
@ -240,8 +240,7 @@ class TunnelsManager {
|
||||||
completionHandler(TunnelsManagerError.systemErrorOnRemoveTunnel(systemError: error!))
|
completionHandler(TunnelsManagerError.systemErrorOnRemoveTunnel(systemError: error!))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if let self = self {
|
if let self = self, let index = self.tunnels.firstIndex(of: tunnel) {
|
||||||
let index = self.tunnels.firstIndex(of: tunnel)!
|
|
||||||
self.tunnels.remove(at: index)
|
self.tunnels.remove(at: index)
|
||||||
self.tunnelsListDelegate?.tunnelRemoved(at: index, tunnel: tunnel)
|
self.tunnelsListDelegate?.tunnelRemoved(at: index, tunnel: tunnel)
|
||||||
}
|
}
|
||||||
|
@ -249,6 +248,27 @@ class TunnelsManager {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func removeMultiple(tunnels: [TunnelContainer], completionHandler: @escaping (TunnelsManagerError?) -> Void) {
|
||||||
|
removeMultiple(tunnels: ArraySlice(tunnels), completionHandler: completionHandler)
|
||||||
|
}
|
||||||
|
|
||||||
|
private func removeMultiple(tunnels: ArraySlice<TunnelContainer>, completionHandler: @escaping (TunnelsManagerError?) -> Void) {
|
||||||
|
guard let head = tunnels.first else {
|
||||||
|
completionHandler(nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
let tail = tunnels.dropFirst()
|
||||||
|
remove(tunnel: head) { [weak self, tail] error in
|
||||||
|
DispatchQueue.main.async {
|
||||||
|
if let error = error {
|
||||||
|
completionHandler(error)
|
||||||
|
} else {
|
||||||
|
self?.removeMultiple(tunnels: tail, completionHandler: completionHandler)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func numberOfTunnels() -> Int {
|
func numberOfTunnels() -> Int {
|
||||||
return tunnels.count
|
return tunnels.count
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue