Browse Source

More refactor

onevcat 5 years ago
parent
commit
befd36c509
1 changed files with 39 additions and 23 deletions
  1. 39 23
      Sources/Networking/ImageDownloader.swift

+ 39 - 23
Sources/Networking/ImageDownloader.swift

@@ -271,6 +271,37 @@ open class ImageDownloader {
         return downloadTask
         return downloadTask
     }
     }
 
 
+
+    private func reportWillDownloadImage(url: URL, request: URLRequest) {
+        delegate?.imageDownloader(self, willDownloadImageForURL: url, with: request)
+    }
+
+    private func reportDidDownloadImageData(result: Result<(Data, URLResponse?), KingfisherError>, url: URL) {
+        var response: URLResponse?
+        var err: Error?
+        do {
+            response = try result.get().1
+        } catch {
+            err = error
+        }
+        self.delegate?.imageDownloader(
+            self,
+            didFinishDownloadingImageForURL: url,
+            with: response,
+            error: err
+        )
+    }
+
+    private func reportDidProcessImage(
+        result: Result<KFCrossPlatformImage, KingfisherError>, url: URL, response: URLResponse?
+    )
+    {
+        if let image = try? result.get() {
+            self.delegate?.imageDownloader(self, didDownload: image, for: url, with: response)
+        }
+
+    }
+
     private func startDownloadTask(
     private func startDownloadTask(
         context: DownloadingContext,
         context: DownloadingContext,
         callback: SessionDataTask.TaskCallback
         callback: SessionDataTask.TaskCallback
@@ -290,37 +321,21 @@ open class ImageDownloader {
             let (result, callbacks) = done
             let (result, callbacks) = done
 
 
             // Before processing the downloaded data.
             // Before processing the downloaded data.
-            do {
-                let value = try result.get()
-                self.delegate?.imageDownloader(
-                    self,
-                    didFinishDownloadingImageForURL: context.url,
-                    with: value.1,
-                    error: nil
-                )
-            } catch {
-                self.delegate?.imageDownloader(
-                    self,
-                    didFinishDownloadingImageForURL: context.url,
-                    with: nil,
-                    error: error
-                )
-            }
+            self.reportDidDownloadImageData(result: result, url: context.url)
 
 
             switch result {
             switch result {
             // Download finished. Now process the data to an image.
             // Download finished. Now process the data to an image.
             case .success(let (data, response)):
             case .success(let (data, response)):
                 let processor = ImageDataProcessor(
                 let processor = ImageDataProcessor(
-                    data: data, callbacks: callbacks, processingQueue: context.options.processingQueue)
-                processor.onImageProcessed.delegate(on: self) { (self, result) in
+                    data: data, callbacks: callbacks, processingQueue: context.options.processingQueue
+                )
+                processor.onImageProcessed.delegate(on: self) { (self, done) in
                     // `onImageProcessed` will be called for `callbacks.count` times, with each
                     // `onImageProcessed` will be called for `callbacks.count` times, with each
                     // `SessionDataTask.TaskCallback` as the input parameter.
                     // `SessionDataTask.TaskCallback` as the input parameter.
                     // result: Result<Image>, callback: SessionDataTask.TaskCallback
                     // result: Result<Image>, callback: SessionDataTask.TaskCallback
-                    let (result, callback) = result
+                    let (result, callback) = done
 
 
-                    if let image = try? result.get() {
-                        self.delegate?.imageDownloader(self, didDownload: image, for: context.url, with: response)
-                    }
+                    self.reportDidProcessImage(result: result, url: context.url, response: response)
 
 
                     let imageResult = result.map { ImageLoadingResult(image: $0, url: context.url, originalData: data) }
                     let imageResult = result.map { ImageLoadingResult(image: $0, url: context.url, originalData: data) }
                     let queue = callback.options.callbackQueue
                     let queue = callback.options.callbackQueue
@@ -335,7 +350,8 @@ open class ImageDownloader {
                 }
                 }
             }
             }
         }
         }
-        delegate?.imageDownloader(self, willDownloadImageForURL: context.url, with: context.request)
+
+        reportWillDownloadImage(url: context.url, request: context.request)
         sessionTask.resume()
         sessionTask.resume()
         return downloadTask
         return downloadTask
     }
     }