94 lines
3.7 KiB
Swift
94 lines
3.7 KiB
Swift
import Foundation
|
|
|
|
class FileDownloader {
|
|
|
|
static func loadFileSync(url: URL, completion: @escaping (String?, Error?) -> Void)
|
|
{
|
|
if #available(macOS 13.0, *) {
|
|
let documentsUrl = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
|
|
let guixUrl = URL(filePath: NSHomeDirectory() + "/.guix/guix.bundle/guix.tar.gz")
|
|
|
|
let destinationUrl = guixUrl
|
|
|
|
if FileManager().fileExists(atPath: destinationUrl.path)
|
|
{
|
|
print("File already exists [\(destinationUrl.path)]")
|
|
completion(destinationUrl.path, nil)
|
|
}
|
|
else if let dataFromURL = NSData(contentsOf: url)
|
|
{
|
|
if dataFromURL.write(to: destinationUrl, atomically: true)
|
|
{
|
|
print("file saved [\(destinationUrl.path)]")
|
|
completion(destinationUrl.path, nil)
|
|
}
|
|
else
|
|
{
|
|
print("error saving file")
|
|
let error = NSError(domain:"Error saving file", code:1001, userInfo:nil)
|
|
completion(destinationUrl.path, error)
|
|
}
|
|
}
|
|
else
|
|
{
|
|
let error = NSError(domain:"Error downloading file", code:1002, userInfo:nil)
|
|
completion(destinationUrl.path, error)
|
|
}
|
|
}
|
|
}
|
|
|
|
static func loadFileAsync(url: URL, completion: @escaping (String?, Error?) -> Void)
|
|
{
|
|
if #available(macOS 13.0, *) {
|
|
|
|
let documentsUrl = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
|
|
|
|
let destinationUrl = documentsUrl.appendingPathComponent(url.lastPathComponent)
|
|
|
|
if FileManager().fileExists(atPath: destinationUrl.path)
|
|
{
|
|
print("File already exists [\(destinationUrl.path)]")
|
|
completion(destinationUrl.path, nil)
|
|
}
|
|
else
|
|
{
|
|
let session = URLSession(configuration: URLSessionConfiguration.default, delegate: nil, delegateQueue: nil)
|
|
var request = URLRequest(url: url)
|
|
request.httpMethod = "GET"
|
|
let task = session.dataTask(with: request, completionHandler:
|
|
{
|
|
data, response, error in
|
|
if error == nil
|
|
{
|
|
if let response = response as? HTTPURLResponse
|
|
{
|
|
if response.statusCode == 200
|
|
{
|
|
if let data = data
|
|
{
|
|
if let _ = try? data.write(to: destinationUrl, options: Data.WritingOptions.atomic)
|
|
{
|
|
completion(destinationUrl.path, error)
|
|
}
|
|
else
|
|
{
|
|
completion(destinationUrl.path, error)
|
|
}
|
|
}
|
|
else
|
|
{
|
|
completion(destinationUrl.path, error)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
completion(destinationUrl.path, error)
|
|
}
|
|
})
|
|
task.resume()
|
|
}
|
|
}
|
|
}
|
|
}
|