diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2018-11-03 02:51:32 +0100 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2018-11-03 03:43:09 +0100 |
commit | 95101dce5cf230e398eb04b50d441723f6101869 (patch) | |
tree | 9689cb2d399c8ffb8c4ed48be335827dd322eabd /WireGuard/WireGuard/UI/iOS/TunnelsListTableViewController.swift | |
parent | Tunnel detail: In the key-value cell, make the value label scrollable horizontally (diff) | |
download | wireguard-apple-95101dce5cf230e398eb04b50d441723f6101869.tar.xz wireguard-apple-95101dce5cf230e398eb04b50d441723f6101869.zip |
Import: rework addMultiple logic
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to '')
-rw-r--r-- | WireGuard/WireGuard/UI/iOS/TunnelsListTableViewController.swift | 56 |
1 files changed, 33 insertions, 23 deletions
diff --git a/WireGuard/WireGuard/UI/iOS/TunnelsListTableViewController.swift b/WireGuard/WireGuard/UI/iOS/TunnelsListTableViewController.swift index 5804973..9515885 100644 --- a/WireGuard/WireGuard/UI/iOS/TunnelsListTableViewController.swift +++ b/WireGuard/WireGuard/UI/iOS/TunnelsListTableViewController.swift @@ -145,40 +145,50 @@ class TunnelsListTableViewController: UITableViewController { do { unarchivedFiles = try ZipArchive.unarchive(url: url, requiredFileExtensions: ["conf"]) } catch ZipArchiveError.cantOpenInputZipFile { - showErrorAlert(title: "Unable to read zip archive", message: "The zip archive could not be read") + showErrorAlert(title: "Unable to read zip archive", message: "The zip archive could not be read.") + return } catch ZipArchiveError.badArchive { - showErrorAlert(title: "Unable to read zip archive", message: "Bad or corrupt zip archive") + showErrorAlert(title: "Unable to read zip archive", message: "Bad or corrupt zip archive.") + return } catch (let error) { showErrorAlert(title: "Unable to read zip archive", message: "Unexpected error: \(String(describing: error))") + return } - var numberOfConfigFilesWithErrors = 0 - var tunnelConfigurationsToAdd: [TunnelConfiguration] = [] - for unarchivedFile in unarchivedFiles { - guard let tunnelsManager = tunnelsManager else { return } - if let fileBaseName = URL(string: unarchivedFile.fileName)?.deletingPathExtension().lastPathComponent, - (!tunnelsManager.containsTunnel(named: fileBaseName)), - let fileContents = String(data: unarchivedFile.contents, encoding: .utf8), - let tunnelConfiguration = try? WgQuickConfigFileParser.parse(fileContents, name: fileBaseName) { - tunnelConfigurationsToAdd.append(tunnelConfiguration) + + for (i, unarchivedFile) in unarchivedFiles.enumerated().reversed() { + if let trimmedName = URL(string: unarchivedFile.fileName)?.deletingPathExtension().lastPathComponent, !trimmedName.isEmpty { + unarchivedFiles[i].fileName = trimmedName } else { - numberOfConfigFilesWithErrors = numberOfConfigFilesWithErrors + 1 + unarchivedFiles.remove(at: i) } } - guard (tunnelConfigurationsToAdd.count > 0) else { - showErrorAlert(title: "No configurations found", message: "Zip archive does not contain any valid .conf files") + if (unarchivedFiles.isEmpty) { + showErrorAlert(title: "No tunnels in zip archive", message: "No .conf tunnel files were found inside the zip archive.") return } - var numberOfTunnelsRemainingAfterError = 0 - tunnelsManager?.addMultiple(tunnelConfigurations: tunnelConfigurationsToAdd) { (numberOfTunnelsRemaining, error) in - if (error != nil) { - numberOfTunnelsRemainingAfterError = numberOfTunnelsRemaining - } else { - assert(numberOfTunnelsRemaining == 0) + guard let tunnelsManager = tunnelsManager else { return } + unarchivedFiles.sort { $0.fileName < $1.fileName } + var lastFileName : String? + var configs: [TunnelConfiguration] = [] + for file in unarchivedFiles { + if file.fileName == lastFileName { + continue + } + lastFileName = file.fileName + guard let fileContents = String(data: file.contents, encoding: .utf8) else { + continue } + guard let tunnelConfig = try? WgQuickConfigFileParser.parse(fileContents, name: file.fileName) else { + continue + } + configs.append(tunnelConfig) } - if (numberOfConfigFilesWithErrors > 0) { - showErrorAlert(title: "Created \(unarchivedFiles.count) tunnels", - message: "Created \(numberOfTunnelsRemainingAfterError) of \(unarchivedFiles.count) tunnels from files in zip archive") + tunnelsManager.addMultiple(tunnelConfigurations: configs) { [weak self] (numberSuccessful) in + if numberSuccessful == unarchivedFiles.count { + return + } + self?.showErrorAlert(title: "Created \(numberSuccessful) tunnels", + message: "Created \(numberSuccessful) of \(unarchivedFiles.count) tunnels from zip archive") } } } |