TunnelName: sort correctly with numbers and capitals
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
parent
a6f80135ef
commit
b2b5e0e379
|
@ -28,7 +28,7 @@ class TunnelsManager {
|
||||||
private var configurationsObservationToken: AnyObject?
|
private var configurationsObservationToken: AnyObject?
|
||||||
|
|
||||||
init(tunnelProviders: [NETunnelProviderManager]) {
|
init(tunnelProviders: [NETunnelProviderManager]) {
|
||||||
tunnels = tunnelProviders.map { TunnelContainer(tunnel: $0) }.sorted { $0.name < $1.name }
|
tunnels = tunnelProviders.map { TunnelContainer(tunnel: $0) }.sorted { TunnelsManager.tunnelNameIsLessThan($0.name, $1.name) }
|
||||||
startObservingTunnelStatuses()
|
startObservingTunnelStatuses()
|
||||||
startObservingTunnelConfigurations()
|
startObservingTunnelConfigurations()
|
||||||
}
|
}
|
||||||
|
@ -90,7 +90,7 @@ class TunnelsManager {
|
||||||
}
|
}
|
||||||
let tunnel = TunnelContainer(tunnel: loadedTunnelProvider)
|
let tunnel = TunnelContainer(tunnel: loadedTunnelProvider)
|
||||||
self.tunnels.append(tunnel)
|
self.tunnels.append(tunnel)
|
||||||
self.tunnels.sort { $0.name < $1.name }
|
self.tunnels.sort { TunnelsManager.tunnelNameIsLessThan($0.name, $1.name) }
|
||||||
self.tunnelsListDelegate?.tunnelAdded(at: self.tunnels.firstIndex(of: tunnel)!)
|
self.tunnelsListDelegate?.tunnelAdded(at: self.tunnels.firstIndex(of: tunnel)!)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -142,7 +142,7 @@ class TunnelsManager {
|
||||||
|
|
||||||
let tunnel = TunnelContainer(tunnel: tunnelProviderManager)
|
let tunnel = TunnelContainer(tunnel: tunnelProviderManager)
|
||||||
self.tunnels.append(tunnel)
|
self.tunnels.append(tunnel)
|
||||||
self.tunnels.sort { $0.name < $1.name }
|
self.tunnels.sort { TunnelsManager.tunnelNameIsLessThan($0.name, $1.name) }
|
||||||
self.tunnelsListDelegate?.tunnelAdded(at: self.tunnels.firstIndex(of: tunnel)!)
|
self.tunnelsListDelegate?.tunnelAdded(at: self.tunnels.firstIndex(of: tunnel)!)
|
||||||
completionHandler(.success(tunnel))
|
completionHandler(.success(tunnel))
|
||||||
}
|
}
|
||||||
|
@ -204,7 +204,7 @@ class TunnelsManager {
|
||||||
guard let self = self else { return }
|
guard let self = self else { return }
|
||||||
if isNameChanged {
|
if isNameChanged {
|
||||||
let oldIndex = self.tunnels.firstIndex(of: tunnel)!
|
let oldIndex = self.tunnels.firstIndex(of: tunnel)!
|
||||||
self.tunnels.sort { $0.name < $1.name }
|
self.tunnels.sort { TunnelsManager.tunnelNameIsLessThan($0.name, $1.name) }
|
||||||
let newIndex = self.tunnels.firstIndex(of: tunnel)!
|
let newIndex = self.tunnels.firstIndex(of: tunnel)!
|
||||||
self.tunnelsListDelegate?.tunnelMoved(from: oldIndex, to: newIndex)
|
self.tunnelsListDelegate?.tunnelMoved(from: oldIndex, to: newIndex)
|
||||||
}
|
}
|
||||||
|
@ -400,6 +400,9 @@ class TunnelsManager {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static func tunnelNameIsLessThan(_ a: String, _ b: String) -> Bool {
|
||||||
|
return a.compare(b, options: [.caseInsensitive, .diacriticInsensitive, .widthInsensitive, .numeric]) == .orderedAscending
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private func lastErrorTextFromNetworkExtension(for tunnel: TunnelContainer) -> (title: String, message: String)? {
|
private func lastErrorTextFromNetworkExtension(for tunnel: TunnelContainer) -> (title: String, message: String)? {
|
||||||
|
|
|
@ -37,7 +37,7 @@ class ZipImporter {
|
||||||
fatalError()
|
fatalError()
|
||||||
}
|
}
|
||||||
|
|
||||||
unarchivedFiles.sort { $0.fileBaseName < $1.fileBaseName }
|
unarchivedFiles.sort { TunnelsManager.tunnelNameIsLessThan($0.fileBaseName, $1.fileBaseName) }
|
||||||
var configs: [TunnelConfiguration?] = Array(repeating: nil, count: unarchivedFiles.count)
|
var configs: [TunnelConfiguration?] = Array(repeating: nil, count: unarchivedFiles.count)
|
||||||
for (index, file) in unarchivedFiles.enumerated() {
|
for (index, file) in unarchivedFiles.enumerated() {
|
||||||
if index > 0 && file == unarchivedFiles[index - 1] {
|
if index > 0 && file == unarchivedFiles[index - 1] {
|
||||||
|
|
Loading…
Reference in New Issue