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

This commit is contained in:
Olivier Poitrey 2013-02-17 02:43:46 +01:00
parent ebd63a88c1
commit 350c0bea9a
2 changed files with 21 additions and 0 deletions

View File

@ -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 File

@ -17,6 +17,7 @@
@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 @@
else if (self.finishedCount == self.requestedCount)
{
[self reportStatus];
if (self.completionBlock)
{
self.completionBlock(self.finishedCount, self.skippedCount);
self.completionBlock = nil;
}
}
}];
}
@ -90,10 +96,16 @@
}
- (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;