From fad463d44988793e96474dd0c318a4e0cdd9704d Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Sun, 17 Mar 2019 10:28:27 +0100 Subject: [PATCH] TunnelName: sort correctly with numbers and capitals --- WireGuard/WireGuard/Tunnel/TunnelsManager.swift | 11 +++++++---- WireGuard/WireGuard/ZipArchive/ZipImporter.swift | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/WireGuard/WireGuard/Tunnel/TunnelsManager.swift b/WireGuard/WireGuard/Tunnel/TunnelsManager.swift index ea5e622..1a467f5 100644 --- a/WireGuard/WireGuard/Tunnel/TunnelsManager.swift +++ b/WireGuard/WireGuard/Tunnel/TunnelsManager.swift @@ -28,7 +28,7 @@ class TunnelsManager { private var configurationsObservationToken: AnyObject? 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() startObservingTunnelConfigurations() } @@ -90,7 +90,7 @@ class TunnelsManager { } let tunnel = TunnelContainer(tunnel: loadedTunnelProvider) 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)!) } } @@ -142,7 +142,7 @@ class TunnelsManager { let tunnel = TunnelContainer(tunnel: tunnelProviderManager) 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)!) completionHandler(.success(tunnel)) } @@ -204,7 +204,7 @@ class TunnelsManager { guard let self = self else { return } if isNameChanged { 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)! 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)? { diff --git a/WireGuard/WireGuard/ZipArchive/ZipImporter.swift b/WireGuard/WireGuard/ZipArchive/ZipImporter.swift index b86b06e..ade30a6 100644 --- a/WireGuard/WireGuard/ZipArchive/ZipImporter.swift +++ b/WireGuard/WireGuard/ZipArchive/ZipImporter.swift @@ -37,7 +37,7 @@ class ZipImporter { fatalError() } - unarchivedFiles.sort { $0.fileBaseName < $1.fileBaseName } + unarchivedFiles.sort { TunnelsManager.tunnelNameIsLessThan($0.fileBaseName, $1.fileBaseName) } var configs: [TunnelConfiguration?] = Array(repeating: nil, count: unarchivedFiles.count) for (index, file) in unarchivedFiles.enumerated() { if index > 0 && file == unarchivedFiles[index - 1] {