Disk cache now uses the raw image data returned from the server.
This preserves the image quality and retains some image attributes, such as the alpha channel (for non-jpeg images).
This commit is contained in:
parent
d30c2ae209
commit
5c94f17a17
|
@ -20,7 +20,7 @@ extern NSString *const SDWebImageDownloadStartNotification;
|
||||||
extern NSString *const SDWebImageDownloadStopNotification;
|
extern NSString *const SDWebImageDownloadStopNotification;
|
||||||
|
|
||||||
typedef void(^SDWebImageDownloaderProgressBlock)(NSUInteger receivedSize, long long expectedSize);
|
typedef void(^SDWebImageDownloaderProgressBlock)(NSUInteger receivedSize, long long expectedSize);
|
||||||
typedef void(^SDWebImageDownloaderCompletedBlock)(UIImage *image, NSError *error, BOOL finished);
|
typedef void(^SDWebImageDownloaderCompletedBlock)(UIImage *image, NSData *data, NSError *error, BOOL finished);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Asynchronous downloader dedicated and optimized for image loading.
|
* Asynchronous downloader dedicated and optimized for image loading.
|
||||||
|
|
|
@ -91,7 +91,7 @@ NSString *const kCompletedCallbackKey = @"completed";
|
||||||
return _downloadQueue.maxConcurrentOperationCount;
|
return _downloadQueue.maxConcurrentOperationCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (id<SDWebImageOperation>)downloadImageWithURL:(NSURL *)url options:(SDWebImageDownloaderOptions)options progress:(void (^)(NSUInteger, long long))progressBlock completed:(void (^)(UIImage *, NSError *, BOOL))completedBlock
|
- (id<SDWebImageOperation>)downloadImageWithURL:(NSURL *)url options:(SDWebImageDownloaderOptions)options progress:(void (^)(NSUInteger, long long))progressBlock completed:(void (^)(UIImage *, NSData *, NSError *, BOOL))completedBlock
|
||||||
{
|
{
|
||||||
__block SDWebImageDownloaderOperation *operation;
|
__block SDWebImageDownloaderOperation *operation;
|
||||||
__weak SDWebImageDownloader *wself = self;
|
__weak SDWebImageDownloader *wself = self;
|
||||||
|
@ -114,7 +114,7 @@ NSString *const kCompletedCallbackKey = @"completed";
|
||||||
if (callback) callback(receivedSize, expectedSize);
|
if (callback) callback(receivedSize, expectedSize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
completed:^(UIImage *image, NSError *error, BOOL finished)
|
completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished)
|
||||||
{
|
{
|
||||||
if (!wself) return;
|
if (!wself) return;
|
||||||
SDWebImageDownloader *sself = wself;
|
SDWebImageDownloader *sself = wself;
|
||||||
|
@ -122,7 +122,7 @@ NSString *const kCompletedCallbackKey = @"completed";
|
||||||
for (NSDictionary *callbacks in callbacksForURL)
|
for (NSDictionary *callbacks in callbacksForURL)
|
||||||
{
|
{
|
||||||
SDWebImageDownloaderCompletedBlock callback = callbacks[kCompletedCallbackKey];
|
SDWebImageDownloaderCompletedBlock callback = callbacks[kCompletedCallbackKey];
|
||||||
if (callback) callback(image, error, finished);
|
if (callback) callback(image, data, error, finished);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
cancelled:^
|
cancelled:^
|
||||||
|
@ -137,7 +137,7 @@ NSString *const kCompletedCallbackKey = @"completed";
|
||||||
return operation;
|
return operation;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)addProgressCallback:(void (^)(NSUInteger, long long))progressBlock andCompletedBlock:(void (^)(UIImage *, NSError *, BOOL))completedBlock forURL:(NSURL *)url createCallback:(void (^)())createCallback
|
- (void)addProgressCallback:(void (^)(NSUInteger, long long))progressBlock andCompletedBlock:(void (^)(UIImage *, NSData *data, NSError *, BOOL))completedBlock forURL:(NSURL *)url createCallback:(void (^)())createCallback
|
||||||
{
|
{
|
||||||
dispatch_barrier_sync(self.barrierQueue, ^
|
dispatch_barrier_sync(self.barrierQueue, ^
|
||||||
{
|
{
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
size_t width, height;
|
size_t width, height;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (id)initWithRequest:(NSURLRequest *)request queue:(dispatch_queue_t)queue options:(SDWebImageDownloaderOptions)options progress:(void (^)(NSUInteger, long long))progressBlock completed:(void (^)(UIImage *, NSError *, BOOL))completedBlock cancelled:(void (^)())cancelBlock
|
- (id)initWithRequest:(NSURLRequest *)request queue:(dispatch_queue_t)queue options:(SDWebImageDownloaderOptions)options progress:(void (^)(NSUInteger, long long))progressBlock completed:(void (^)(UIImage *, NSData *, NSError *, BOOL))completedBlock cancelled:(void (^)())cancelBlock
|
||||||
{
|
{
|
||||||
if ((self = [super init]))
|
if ((self = [super init]))
|
||||||
{
|
{
|
||||||
|
@ -77,7 +77,7 @@
|
||||||
{
|
{
|
||||||
if (self.completedBlock)
|
if (self.completedBlock)
|
||||||
{
|
{
|
||||||
self.completedBlock(nil, [NSError errorWithDomain:NSURLErrorDomain code:0 userInfo:@{NSLocalizedDescriptionKey: @"Connection can't be initialized"}], YES);
|
self.completedBlock(nil, nil, [NSError errorWithDomain:NSURLErrorDomain code:0 userInfo:@{NSLocalizedDescriptionKey: @"Connection can't be initialized"}], YES);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -158,7 +158,7 @@
|
||||||
|
|
||||||
if (self.completedBlock)
|
if (self.completedBlock)
|
||||||
{
|
{
|
||||||
self.completedBlock(nil, [NSError errorWithDomain:NSURLErrorDomain code:[((NSHTTPURLResponse *)response) statusCode] userInfo:nil], YES);
|
self.completedBlock(nil, nil, [NSError errorWithDomain:NSURLErrorDomain code:[((NSHTTPURLResponse *)response) statusCode] userInfo:nil], YES);
|
||||||
}
|
}
|
||||||
|
|
||||||
[self done];
|
[self done];
|
||||||
|
@ -228,7 +228,7 @@
|
||||||
{
|
{
|
||||||
UIImage *image = [UIImage decodedImageWithImage:SDScaledImageForPath(self.request.URL.absoluteString, [UIImage imageWithCGImage:partialImageRef])];
|
UIImage *image = [UIImage decodedImageWithImage:SDScaledImageForPath(self.request.URL.absoluteString, [UIImage imageWithCGImage:partialImageRef])];
|
||||||
CGImageRelease(partialImageRef);
|
CGImageRelease(partialImageRef);
|
||||||
if (self.completedBlock) self.completedBlock(image, nil, NO);
|
if (self.completedBlock) self.completedBlock(image, nil, nil, NO);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -251,7 +251,7 @@
|
||||||
UIImage *image = [UIImage decodedImageWithImage:SDScaledImageForPath(self.request.URL.absoluteString, self.imageData)];
|
UIImage *image = [UIImage decodedImageWithImage:SDScaledImageForPath(self.request.URL.absoluteString, self.imageData)];
|
||||||
dispatch_async(dispatch_get_main_queue(), ^
|
dispatch_async(dispatch_get_main_queue(), ^
|
||||||
{
|
{
|
||||||
completionBlock(image, nil, YES);
|
completionBlock(image, self.imageData, nil, YES);
|
||||||
completionBlock = nil;
|
completionBlock = nil;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -266,7 +266,7 @@
|
||||||
|
|
||||||
if (self.completedBlock)
|
if (self.completedBlock)
|
||||||
{
|
{
|
||||||
self.completedBlock(nil, error, YES);
|
self.completedBlock(nil, nil, error, YES);
|
||||||
}
|
}
|
||||||
|
|
||||||
[self done];
|
[self done];
|
||||||
|
|
|
@ -97,7 +97,7 @@
|
||||||
SDWebImageDownloaderOptions downloaderOptions = 0;
|
SDWebImageDownloaderOptions downloaderOptions = 0;
|
||||||
if (options & SDWebImageLowPriority) downloaderOptions |= SDWebImageDownloaderLowPriority;
|
if (options & SDWebImageLowPriority) downloaderOptions |= SDWebImageDownloaderLowPriority;
|
||||||
if (options & SDWebImageProgressiveDownload) downloaderOptions |= SDWebImageDownloaderProgressiveDownload;
|
if (options & SDWebImageProgressiveDownload) downloaderOptions |= SDWebImageDownloaderProgressiveDownload;
|
||||||
__block id<SDWebImageOperation> subOperation = [self.imageDownloader downloadImageWithURL:url options:downloaderOptions progress:progressBlock completed:^(UIImage *downloadedImage, NSError *error, BOOL finished)
|
__block id<SDWebImageOperation> subOperation = [self.imageDownloader downloadImageWithURL:url options:downloaderOptions progress:progressBlock completed:^(UIImage *downloadedImage, NSData *data, NSError *error, BOOL finished)
|
||||||
{
|
{
|
||||||
dispatch_async(dispatch_get_main_queue(), ^
|
dispatch_async(dispatch_get_main_queue(), ^
|
||||||
{
|
{
|
||||||
|
@ -109,7 +109,7 @@
|
||||||
}
|
}
|
||||||
else if (downloadedImage && finished)
|
else if (downloadedImage && finished)
|
||||||
{
|
{
|
||||||
[self.imageCache storeImage:downloadedImage forKey:key];
|
[self.imageCache storeImage:downloadedImage imageData:data forKey:key toDisk:YES];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (finished)
|
if (finished)
|
||||||
|
|
Loading…
Reference in New Issue