From 2ef8180fd1e28f2fad84cd80c3854f21b83327f3 Mon Sep 17 00:00:00 2001 From: Chris Li Date: Tue, 31 Jan 2017 14:23:54 -0500 Subject: [PATCH] Resume downloads --- Kiwix/Network/Network.swift | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/Kiwix/Network/Network.swift b/Kiwix/Network/Network.swift index 3437d0af..b31cc5d1 100644 --- a/Kiwix/Network/Network.swift +++ b/Kiwix/Network/Network.swift @@ -10,6 +10,7 @@ import UIKit class Network: NSObject, URLSessionDelegate, URLSessionTaskDelegate, URLSessionDownloadDelegate { static let shared = Network() + let bookSizeThreshold: Int64 = 100000000 private override init() { super.init() _ = wifiSession @@ -36,16 +37,16 @@ class Network: NSObject, URLSessionDelegate, URLSessionTaskDelegate, URLSessionD func start(bookID: String) { guard let book = Book.fetch(bookID, context: managedObjectContext), let url = book.url else {return} - let task = (book.fileSize > 100000000 ? wifiSession: cellularSession).downloadTask(with: url) + let task = (book.fileSize > bookSizeThreshold ? wifiSession: cellularSession).downloadTask(with: url) task.taskDescription = book.id task.resume() - let downloadTask = DownloadTask.fetch(bookID: book.id, context: managedObjectContext) + let downloadTask = DownloadTask.fetch(bookID: bookID, context: managedObjectContext) downloadTask?.state = .queued if self.managedObjectContext.hasChanges { try? self.managedObjectContext.save() } - progresses[book.id] = 0 + progresses[bookID] = 0 if progresses.count == 1 { startTimer() } } @@ -74,7 +75,22 @@ class Network: NSObject, URLSessionDelegate, URLSessionTaskDelegate, URLSessionD } func resume(bookID: String) { + guard let data = Preference.resumeData[bookID] else {return} + let bookSizeIsBig: Bool = { + guard let size = Book.fetch(bookID, context: self.managedObjectContext)?.fileSize else {return true} + return size > bookSizeThreshold + }() + let task = (bookSizeIsBig ? wifiSession : cellularSession).downloadTask(withResumeData: data) + task.taskDescription = bookID + task.resume() + let downloadTask = DownloadTask.fetch(bookID: bookID, context: managedObjectContext) + downloadTask?.state = .queued + + if self.managedObjectContext.hasChanges { try? self.managedObjectContext.save() } + + progresses[bookID] = 0 + if progresses.count == 1 { startTimer() } } private func cancelTask(in session: URLSession, taskDescription: String, producingResumingData: Bool) { @@ -118,6 +134,7 @@ class Network: NSObject, URLSessionDelegate, URLSessionTaskDelegate, URLSessionD if self.managedObjectContext.hasChanges { try? self.managedObjectContext.save() } }) } + print(error?.localizedDescription) } // MARK: - URLSessionDownloadDelegate