Справочная информация: у меня есть страница, где пользователи могут go загружать различные файлы карт. В настоящее время у меня есть настройка решения, но у него есть некоторые проблемы. Вот что у меня есть:
public class FileDownloader: NSObject, URLSessionDownloadDelegate {
public let identifier: String
public let progress = CurrentValueSubject<Float, Never>(0)
public let handleFinish: (URL) -> Void
public let handleError: (Error?) -> Void
public init(identifier: String, handleFinish: @escaping (URL) -> Void, handleError: @escaping (Error?) -> Void) {
self.identifier = identifier
self.handleFinish = handleFinish
self.handleError = handleError
}
lazy var urlSession: URLSession = {
let config = URLSessionConfiguration.background(withIdentifier: self.identifier)
config.sessionSendsLaunchEvents = true
let queue = OperationQueue()
return URLSession(configuration: config, delegate: self, delegateQueue: queue)
}()
func startDownload(url: URL) {
let backgroundTask = urlSession.downloadTask(with: url)
backgroundTask.resume()
}
public func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {
self.handleError(error)
}
public func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) {
self.handleFinish(location)
}
public func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) {
let percentage = Float(totalBytesWritten) / Float(totalBytesExpectedToWrite)
self.progress.send(percentage)
}
}
По сути, я создаю новый FileDownloader
для каждого файла строки. Проблемы заключаются в следующем:
На симуляторе я запускаю загрузку и немного ее запускаю, затем я останавливаю приложение. Когда я запускаю его снова и пытаюсь загрузить файл еще раз, он начинает загружать 2 одинаковых файла и обновляет меня с прогрессом обоих.
Я не уверен, как получить текущий прогресс, когда я go ухожу со страницы загрузки и затем возвращаюсь.
Похоже, что если бы я мог получить текущее задание, то я мог бы использовать это. Можно ли запросить у системы текущую загрузку и начать получать обновления прогресса? Неужели я отошел от своей реализации и мне нужно внести изменения, чтобы делать то, что я хочу?