Browse Source

Combine related parameters to context

onevcat 5 years ago
parent
commit
6daa736762
1 changed files with 24 additions and 21 deletions
  1. 24 21
      Sources/Networking/ImageDownloader.swift

+ 24 - 21
Sources/Networking/ImageDownloader.swift

@@ -219,25 +219,23 @@ open class ImageDownloader {
     }
 
     private func addDownloadTask(
-        for url: URL,
-        with request: URLRequest,
-        options: KingfisherParsedOptionsInfo,
+        context: DownloadingContext,
         callback: SessionDataTask.TaskCallback
     ) -> DownloadTask
     {
         // Ready to start download. Add it to session task manager (`sessionHandler`)
         let downloadTask: DownloadTask
-        if let existingTask = sessionDelegate.task(for: url) {
-            downloadTask = sessionDelegate.append(existingTask, url: url, callback: callback)
+        if let existingTask = sessionDelegate.task(for: context.url) {
+            downloadTask = sessionDelegate.append(existingTask, url: context.url, callback: callback)
         } else {
-            let sessionDataTask = session.dataTask(with: request)
-            sessionDataTask.priority = options.downloadPriority
-            downloadTask = sessionDelegate.add(sessionDataTask, url: url, callback: callback)
+            let sessionDataTask = session.dataTask(with: context.request)
+            sessionDataTask.priority = context.options.downloadPriority
+            downloadTask = sessionDelegate.add(sessionDataTask, url: context.url, callback: callback)
         }
         return downloadTask
     }
 
-    private func startDownloadTask(_ downloadTask: DownloadTask, url: URL, request: URLRequest, options: KingfisherParsedOptionsInfo) {
+    private func startDownloadTask(_ downloadTask: DownloadTask, context: DownloadingContext) {
 
         let sessionTask = downloadTask.sessionTask
         guard !sessionTask.started else {
@@ -254,14 +252,14 @@ open class ImageDownloader {
                 let value = try result.get()
                 self.delegate?.imageDownloader(
                     self,
-                    didFinishDownloadingImageForURL: url,
+                    didFinishDownloadingImageForURL: context.url,
                     with: value.1,
                     error: nil
                 )
             } catch {
                 self.delegate?.imageDownloader(
                     self,
-                    didFinishDownloadingImageForURL: url,
+                    didFinishDownloadingImageForURL: context.url,
                     with: nil,
                     error: error
                 )
@@ -271,7 +269,7 @@ open class ImageDownloader {
             // Download finished. Now process the data to an image.
             case .success(let (data, response)):
                 let processor = ImageDataProcessor(
-                    data: data, callbacks: callbacks, processingQueue: options.processingQueue)
+                    data: data, callbacks: callbacks, processingQueue: context.options.processingQueue)
                 processor.onImageProcessed.delegate(on: self) { (self, result) in
                     // `onImageProcessed` will be called for `callbacks.count` times, with each
                     // `SessionDataTask.TaskCallback` as the input parameter.
@@ -279,10 +277,10 @@ open class ImageDownloader {
                     let (result, callback) = result
 
                     if let image = try? result.get() {
-                        self.delegate?.imageDownloader(self, didDownload: image, for: url, with: response)
+                        self.delegate?.imageDownloader(self, didDownload: image, for: context.url, with: response)
                     }
 
-                    let imageResult = result.map { ImageLoadingResult(image: $0, url: url, originalData: data) }
+                    let imageResult = result.map { ImageLoadingResult(image: $0, url: context.url, originalData: data) }
                     let queue = callback.options.callbackQueue
                     queue.execute { callback.onCompleted?.call(imageResult) }
                 }
@@ -295,7 +293,7 @@ open class ImageDownloader {
                 }
             }
         }
-        delegate?.imageDownloader(self, willDownloadImageForURL: url, with: request)
+        delegate?.imageDownloader(self, willDownloadImageForURL: context.url, with: context.request)
         sessionTask.resume()
     }
 
@@ -338,15 +336,12 @@ open class ImageDownloader {
             return nil
         }
 
+        let context = DownloadingContext(url: url, request: request, options: options)
         // Ready to start download. Add it to session task manager (`sessionHandler`)
         let downloadTask = addDownloadTask(
-            for: url,
-            with: request,
-            options: options,
-            callback: createTaskCallback(completionHandler, options: options)
+            context: context, callback: createTaskCallback(completionHandler, options: options)
         )
-
-        startDownloadTask(downloadTask, url: url, request: request, options: options)
+        startDownloadTask(downloadTask, context: context)
         return downloadTask
     }
 
@@ -425,3 +420,11 @@ extension ImageDownloader: AuthenticationChallengeResponsable {}
 
 // Use the default implementation from extension of `ImageDownloaderDelegate`.
 extension ImageDownloader: ImageDownloaderDelegate {}
+
+extension ImageDownloader {
+    struct DownloadingContext {
+        let url: URL
+        let request: URLRequest
+        let options: KingfisherParsedOptionsInfo
+    }
+}