Permalink
Browse files

Add completion block support to `SDWebImagePrefetcher` (fix #127)

  • Loading branch information...
1 parent bd4364f commit 9628a7d70080111bfbaa3ac7934409d77a592a68 @rs rs committed with Jack Tihon Feb 17, 2013
Showing with 21 additions and 0 deletions.
  1. +9 −0 SDWebImage/SDWebImagePrefetcher.h
  2. +12 −0 SDWebImage/SDWebImagePrefetcher.m
View
9 SDWebImage/SDWebImagePrefetcher.h
@@ -39,6 +39,15 @@
*/
- (void)prefetchURLs:(NSArray *)urls;
+/**
+ * Assign list of URLs to let SDWebImagePrefetcher to queue the prefetching,
+ * currently one image is downloaded at a time,
+ * and skips images for failed downloads and proceed to the next image in the list
+ *
+ * @param urls list of URLs to prefetch
+ * @param completionBlock block to be called when prefetching is completed
+ */
+- (void)prefetchURLs:(NSArray *)urls completed:(void (^)(NSUInteger finishedCount, NSUInteger skippedCount))completionBlock;
/**
* Remove and cancel queued list
View
12 SDWebImage/SDWebImagePrefetcher.m
@@ -17,6 +17,7 @@ @interface SDWebImagePrefetcher ()
@property (assign, nonatomic) NSUInteger skippedCount;
@property (assign, nonatomic) NSUInteger finishedCount;
@property (assign, nonatomic) NSTimeInterval startedTime;
+@property (SDDispatchQueueSetterSementics, nonatomic) void (^completionBlock)(NSUInteger, NSUInteger);
@end
@@ -79,6 +80,11 @@ - (void)startPrefetchingAtIndex:(NSUInteger)index
else if (self.finishedCount == self.requestedCount)
{
[self reportStatus];
+ if (self.completionBlock)
+ {
+ self.completionBlock(self.finishedCount, self.skippedCount);
+ self.completionBlock = nil;
+ }
}
}];
}
@@ -91,9 +97,15 @@ - (void)reportStatus
- (void)prefetchURLs:(NSArray *)urls
{
+ [self prefetchURLs:urls completed:nil];
+}
+
+- (void)prefetchURLs:(NSArray *)urls completed:(void (^)(NSUInteger, NSUInteger))completionBlock
+{
[self cancelPrefetching]; // Prevent duplicate prefetch request
self.startedTime = CFAbsoluteTimeGetCurrent();
self.prefetchURLs = urls;
+ self.completionBlock = completionBlock;
// Starts prefetching from the very first image on the list with the max allowed concurrency
NSUInteger listCount = self.prefetchURLs.count;

0 comments on commit 9628a7d

Please sign in to comment.