Просмотр исходного кода

Write the files to disk not just memory, and add tests to cover that.

Claire Knight 10 лет назад
Родитель
Сommit
0f6d5a2bb8
2 измененных файлов с 8 добавлено и 3 удалено
  1. 5 3
      Sources/ImagePrefetcher.swift
  2. 3 0
      Tests/KingfisherTests/ImagePrefetcherTests.swift

+ 5 - 3
Sources/ImagePrefetcher.swift

@@ -98,7 +98,9 @@ public class ImagePrefetcher: NSObject {
         
         requestedCount++
         
-        KingfisherManager.sharedManager.downloader.downloadImageWithURL(urls[index], progressBlock: nil) { (image, error, imageURL, originalData) -> () in
+        let task = RetrieveImageTask()
+        let resource = Resource(downloadURL: urls[index])
+        KingfisherManager.sharedManager.downloadAndCacheImageWithURL(resource.downloadURL, forKey: resource.cacheKey, retrieveImageTask: task, progressBlock: nil, completionHandler: { image, error, cacheType, imageURL in
             self.finishedCount++
             
             if image == .None {
@@ -106,12 +108,12 @@ public class ImagePrefetcher: NSObject {
             }
             
             progressBlock?(completedURLs: self.finishedCount, allURLs: urls.count)
-
+            
             if urls.count > self.requestedCount {
                 self.startPrefetching(self.requestedCount, progressBlock: progressBlock, completionHandler: completionHandler)
             } else if self.finishedCount == self.requestedCount {
                 completionHandler?(completedURLs: self.finishedCount, skippedURLs: self.skippedCount)
             }
-        }
+        }, options: nil)
     }
 }

+ 3 - 0
Tests/KingfisherTests/ImagePrefetcherTests.swift

@@ -70,6 +70,9 @@ class ImagePrefetcherTests: XCTestCase {
         }) { (completedURLs, skippedURLs) -> () in
             expectation.fulfill()
             XCTAssertEqual(completedURLs, total, "all requests should have been completed, regardless of success")
+            KingfisherManager.sharedManager.cache.clearMemoryCache()  // Remove from the Memory cache to ensure it is on disk!
+            let cacheStatus = KingfisherManager.sharedManager.cache.isImageCachedForKey(Resource(downloadURL: urls[0]).cacheKey)
+            XCTAssertEqual(CacheType.Disk, cacheStatus.cacheType ?? CacheType.None, "prefetched images should be cached to disk")
         }
         
         waitForExpectationsWithTimeout(5, handler: nil)