Change current behavior. All the user cancelled code will trigger the callback (including both cache && download). The error code name changed to `SDWebImageErrorCancelled` to represent both cases
This commit is contained in:
parent
a2b3a57bb2
commit
6d4e166b8b
|
@ -403,7 +403,9 @@
|
|||
(!image && options & SDImageCacheQueryDiskDataSync));
|
||||
void(^queryDiskBlock)(void) = ^{
|
||||
if (operation.isCancelled) {
|
||||
// do not call the completion if cancelled
|
||||
if (doneBlock) {
|
||||
doneBlock(nil, nil, SDImageCacheTypeNone);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -128,7 +128,7 @@ typedef NSMutableDictionary<NSString *, id> SDCallbacksDictionary;
|
|||
if (self.isCancelled) {
|
||||
self.finished = YES;
|
||||
// Operation cancelled by user before sending the request
|
||||
[self callCompletionBlocksWithError:[NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorDownloadCancelled userInfo:nil]];
|
||||
[self callCompletionBlocksWithError:[NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorCancelled userInfo:nil]];
|
||||
[self reset];
|
||||
return;
|
||||
}
|
||||
|
@ -223,7 +223,7 @@ typedef NSMutableDictionary<NSString *, id> SDCallbacksDictionary;
|
|||
if (!self.isFinished) self.finished = YES;
|
||||
} else {
|
||||
// Operation cancelled by user before sending the request
|
||||
[self callCompletionBlocksWithError:[NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorDownloadCancelled userInfo:nil]];
|
||||
[self callCompletionBlocksWithError:[NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorCancelled userInfo:nil]];
|
||||
}
|
||||
|
||||
[self reset];
|
||||
|
|
|
@ -21,5 +21,5 @@ typedef NS_ERROR_ENUM(SDWebImageErrorDomain, SDWebImageError) {
|
|||
SDWebImageErrorCacheNotModified = 1002, // The remote location specify that the cached image is not modified, such as the HTTP response 304 code. It's useful for `SDWebImageRefreshCached`
|
||||
SDWebImageErrorInvalidDownloadOperation = 2000, // The image download operation is invalid, such as nil operation or unexpected error occur when operation initialized
|
||||
SDWebImageErrorInvalidDownloadStatusCode = 2001, // The image download response a invalid status code. You can check the status code in error's userInfo under `SDWebImageErrorDownloadStatusCodeKey`
|
||||
SDWebImageErrorDownloadCancelled = 2002, // The image download operation is cancelled by user before sending the request
|
||||
SDWebImageErrorCancelled = 2002, // The image loading operation is cancelled before finished, during either async disk cache query, or waiting before actual network request. For actual network request error, check `NSURLErrorDomain` error domain and code.
|
||||
};
|
||||
|
|
|
@ -193,6 +193,8 @@ static id<SDImageLoader> _defaultImageLoader;
|
|||
operation.cacheOperation = [self.imageCache queryImageForKey:key options:options context:context completion:^(UIImage * _Nullable cachedImage, NSData * _Nullable cachedData, SDImageCacheType cacheType) {
|
||||
@strongify(operation);
|
||||
if (!operation || operation.isCancelled) {
|
||||
// Image combined operation cancelled by user
|
||||
[self callCompletionBlockForOperation:operation completion:completedBlock error:[NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorCancelled userInfo:nil] url:url];
|
||||
[self safelyRemoveOperationFromRunning:operation];
|
||||
return;
|
||||
}
|
||||
|
@ -241,11 +243,13 @@ static id<SDImageLoader> _defaultImageLoader;
|
|||
operation.loaderOperation = [self.imageLoader requestImageWithURL:url options:options context:context progress:progressBlock completed:^(UIImage *downloadedImage, NSData *downloadedData, NSError *error, BOOL finished) {
|
||||
@strongify(operation);
|
||||
if (!operation || operation.isCancelled) {
|
||||
// Do nothing if the operation was cancelled
|
||||
// See #699 for more details
|
||||
// if we would call the completedBlock, there could be a race condition between this block and another completedBlock for the same object, so if this one is called second, we will overwrite the new data
|
||||
// Image combined operation cancelled by user
|
||||
[self callCompletionBlockForOperation:operation completion:completedBlock error:[NSError errorWithDomain:SDWebImageErrorDomain code:SDWebImageErrorCancelled userInfo:nil] url:url];
|
||||
} else if (cachedImage && options & SDWebImageRefreshCached && [error.domain isEqualToString:SDWebImageErrorDomain] && error.code == SDWebImageErrorCacheNotModified) {
|
||||
// Image refresh hit the NSURLCache cache, do not call the completion block
|
||||
} else if ([error.domain isEqualToString:SDWebImageErrorDomain] && error.code == SDWebImageErrorCancelled) {
|
||||
// Download operation cancelled by user before sending the request, don't block failed URL
|
||||
[self callCompletionBlockForOperation:operation completion:completedBlock error:error url:url];
|
||||
} else if (error) {
|
||||
[self callCompletionBlockForOperation:operation completion:completedBlock error:error url:url];
|
||||
BOOL shouldBlockFailedURL = [self shouldBlockFailedURLWithURL:url error:error];
|
||||
|
@ -376,7 +380,7 @@ static id<SDImageLoader> _defaultImageLoader;
|
|||
finished:(BOOL)finished
|
||||
url:(nullable NSURL *)url {
|
||||
dispatch_main_async_safe(^{
|
||||
if (operation && !operation.isCancelled && completionBlock) {
|
||||
if (completionBlock) {
|
||||
completionBlock(image, data, error, cacheType, finished, url);
|
||||
}
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue