Refactoring AFImageRequestOperation to use setCompletionBlockWithSuccess:failure

This commit is contained in:
Mattt Thompson 2011-11-21 10:23:36 -06:00
parent f28cf63a96
commit 5b5b32c5b8

View file

@ -79,41 +79,25 @@ static dispatch_queue_t image_request_operation_processing_queue() {
success:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image))success
failure:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error))failure
{
AFImageRequestOperation *operation = [[[AFImageRequestOperation alloc] initWithRequest:urlRequest] autorelease];
AFImageRequestOperation *requestOperation = [[[AFImageRequestOperation alloc] initWithRequest:urlRequest] autorelease];
[requestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
if (success) {
UIImage *image = responseObject;
operation.completionBlock = ^ {
if ([operation isCancelled]) {
return;
}
dispatch_async(image_request_operation_processing_queue(), ^(void) {
if (operation.error) {
if (failure) {
dispatch_async(dispatch_get_main_queue(), ^(void) {
failure(operation.request, operation.response, operation.error);
});
}
} else {
UIImage *image = operation.responseImage;
if (imageProcessingBlock) {
image = imageProcessingBlock(image);
}
if (success) {
dispatch_async(dispatch_get_main_queue(), ^(void) {
success(operation.request, operation.response, image);
});
}
if ([operation.request cachePolicy] != NSURLCacheStorageNotAllowed) {
[[AFImageCache sharedImageCache] cacheImageData:operation.responseData forURL:[operation.request URL] cacheName:cacheNameOrNil];
}
if (imageProcessingBlock) {
image = imageProcessingBlock(image);
}
});
};
return operation;
success(operation.request, operation.response, image);
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
if (failure) {
failure(operation.request, operation.response, error);
}
}];
return requestOperation;
}
#elif __MAC_OS_X_VERSION_MIN_REQUIRED
+ (AFImageRequestOperation *)imageRequestOperationWithRequest:(NSURLRequest *)urlRequest
@ -122,41 +106,24 @@ static dispatch_queue_t image_request_operation_processing_queue() {
success:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, NSImage *image))success
failure:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error))failure
{
AFImageRequestOperation *operation = [[[AFImageRequestOperation alloc] initWithRequest:urlRequest] autorelease];
AFImageRequestOperation *requestOperation = [[[AFImageRequestOperation alloc] initWithRequest:urlRequest] autorelease];
[requestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
if (success) {
NSImage *image = responseObject;
operation.completionBlock = ^ {
if ([operation isCancelled]) {
return;
}
dispatch_async(image_request_operation_processing_queue(), ^(void) {
if (operation.error) {
if (failure) {
dispatch_async(dispatch_get_main_queue(), ^(void) {
failure(operation.request, operation.response, operation.error);
});
}
} else {
NSImage *image = operation.responseImage;
if (imageProcessingBlock) {
image = imageProcessingBlock(image);
}
if (success) {
dispatch_async(dispatch_get_main_queue(), ^(void) {
success(operation.request, operation.response, image);
});
}
if ([operation.request cachePolicy] != NSURLCacheStorageNotAllowed) {
[[AFImageCache sharedImageCache] cacheImageData:operation.responseData forURL:[operation.request URL] cacheName:cacheNameOrNil];
}
if (imageProcessingBlock) {
image = imageProcessingBlock(image);
}
});
};
return operation;
success(operation.request, operation.response, image);
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
if (failure) {
failure(operation.request, operation.response, error);
}
}];
return requestOperation;
}
#endif
@ -253,4 +220,30 @@ static dispatch_queue_t image_request_operation_processing_queue() {
}
#endif
- (void)setCompletionBlockWithSuccess:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success
failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure
{
self.completionBlock = ^ {
if ([self isCancelled]) {
return;
}
dispatch_async(image_request_operation_processing_queue(), ^(void) {
if (self.error) {
if (failure) {
dispatch_async(dispatch_get_main_queue(), ^(void) {
failure(self, self.error);
});
}
} else {
if (success) {
dispatch_async(dispatch_get_main_queue(), ^(void) {
success(self, self.responseImage);
});
}
}
});
};
}
@end