Settings: Export log: Perform file operations in a background thread
Signed-off-by: Roopesh Chander <roop@roopc.net>
This commit is contained in:
parent
06a783f50a
commit
71568d1899
|
@ -96,37 +96,42 @@ class SettingsTableViewController: UITableViewController {
|
||||||
let timeStampString = dateFormatter.string(from: Date())
|
let timeStampString = dateFormatter.string(from: Date())
|
||||||
let destinationURL = destinationDir.appendingPathComponent("wireguard-log-\(timeStampString).txt")
|
let destinationURL = destinationDir.appendingPathComponent("wireguard-log-\(timeStampString).txt")
|
||||||
|
|
||||||
if (FileManager.default.fileExists(atPath: destinationURL.path)) {
|
DispatchQueue.global(qos: .userInitiated).async {
|
||||||
let isDeleted = FileManager.deleteFile(at: destinationURL)
|
|
||||||
if (!isDeleted) {
|
if (FileManager.default.fileExists(atPath: destinationURL.path)) {
|
||||||
ErrorPresenter.showErrorAlert(title: "No log available", message: "The pre-existing log could not be cleared", from: self)
|
let isDeleted = FileManager.deleteFile(at: destinationURL)
|
||||||
|
if (!isDeleted) {
|
||||||
|
ErrorPresenter.showErrorAlert(title: "No log available", message: "The pre-existing log could not be cleared", from: self)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
guard let networkExtensionLogFileURL = FileManager.networkExtensionLogFileURL,
|
||||||
|
FileManager.default.fileExists(atPath: networkExtensionLogFileURL.path) else {
|
||||||
|
ErrorPresenter.showErrorAlert(title: "No log available", message: "Please activate a tunnel and then export the log", from: self)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
do {
|
||||||
|
try FileManager.default.copyItem(at: networkExtensionLogFileURL, to: destinationURL)
|
||||||
|
} catch {
|
||||||
|
os_log("Failed to copy file: %{public}@ to %{public}@: %{public}@", log: OSLog.default, type: .error, networkExtensionLogFileURL.absoluteString, destinationURL.absoluteString, error.localizedDescription)
|
||||||
|
ErrorPresenter.showErrorAlert(title: "Log export failed", message: "The log could not be copied", from: self)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
guard let networkExtensionLogFileURL = FileManager.networkExtensionLogFileURL,
|
DispatchQueue.main.async {
|
||||||
FileManager.default.fileExists(atPath: networkExtensionLogFileURL.path) else {
|
let activityVC = UIActivityViewController(activityItems: [destinationURL], applicationActivities: nil)
|
||||||
ErrorPresenter.showErrorAlert(title: "No log available", message: "Please activate a tunnel and then export the log", from: self)
|
// popoverPresentationController shall be non-nil on the iPad
|
||||||
return
|
activityVC.popoverPresentationController?.sourceView = sourceView
|
||||||
|
activityVC.popoverPresentationController?.sourceRect = sourceView.bounds
|
||||||
|
activityVC.completionWithItemsHandler = { (_, _, _, _) in
|
||||||
|
// Remove the exported log file after the activity has completed
|
||||||
|
_ = FileManager.deleteFile(at: destinationURL)
|
||||||
|
}
|
||||||
|
self.present(activityVC, animated: true)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
do {
|
|
||||||
try FileManager.default.copyItem(at: networkExtensionLogFileURL, to: destinationURL)
|
|
||||||
} catch {
|
|
||||||
os_log("Failed to copy file: %{public}@ to %{public}@: %{public}@", log: OSLog.default, type: .error, networkExtensionLogFileURL.absoluteString, destinationURL.absoluteString, error.localizedDescription)
|
|
||||||
ErrorPresenter.showErrorAlert(title: "Log export failed", message: "The log could not be copied", from: self)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
let activityVC = UIActivityViewController(activityItems: [destinationURL], applicationActivities: nil)
|
|
||||||
// popoverPresentationController shall be non-nil on the iPad
|
|
||||||
activityVC.popoverPresentationController?.sourceView = sourceView
|
|
||||||
activityVC.popoverPresentationController?.sourceRect = sourceView.bounds
|
|
||||||
activityVC.completionWithItemsHandler = { (_, _, _, _) in
|
|
||||||
// Remove the exported log file after the activity has completed
|
|
||||||
_ = FileManager.deleteFile(at: destinationURL)
|
|
||||||
}
|
|
||||||
self.present(activityVC, animated: true)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue