Removing AFInternal category, opting instead to inline success and failure dispatch

Minor refactoring and reformatting of AFHTTPRequest subclasses

Changing AFXMLRequestOperation error to XMLError to match rest of subclasses
This commit is contained in:
Mattt Thompson 2012-02-20 20:22:46 -08:00
parent 64555e5dff
commit b723e5b75c
6 changed files with 97 additions and 87 deletions

View file

@ -74,12 +74,12 @@
@property (readonly) BOOL hasAcceptableContentType;
/**
The callback dispatch queue on success. If this is NULL (default), the main queue is used.
The callback dispatch queue on success. If `NULL` (default), the main queue is used.
*/
@property (nonatomic) dispatch_queue_t successCallbackQueue;
/**
The callback dispatch queue on failure. If this is NULL (default), the main queue is used.
The callback dispatch queue on failure. If `NULL` (default), the main queue is used.
*/
@property (nonatomic) dispatch_queue_t failureCallbackQueue;
@ -107,18 +107,3 @@
failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure;
@end
@interface AFHTTPRequestOperation (AFInternal)
/**
Executes the successBlock on the corresponding successCallbackQueue.
*/
- (void)dispatchSuccessBlock:(void (^)(AFHTTPRequestOperation *operation, id responseObject))successBlock responseObject:(id)responseObject;
/**
Executes the failureBlock on the corresponding failureCallbackQueue.
*/
- (void)dispatchFailureBlock:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failureBlock;
@end

View file

@ -49,8 +49,17 @@
[_acceptableStatusCodes release];
[_acceptableContentTypes release];
[_HTTPError release];
if (_successCallbackQueue) { dispatch_release(_successCallbackQueue), _successCallbackQueue=NULL;}
if (_failureCallbackQueue) { dispatch_release(_failureCallbackQueue), _failureCallbackQueue=NULL;}
if (_successCallbackQueue) {
dispatch_release(_successCallbackQueue);
_successCallbackQueue = NULL;
}
if (_failureCallbackQueue) {
dispatch_release(_failureCallbackQueue);
_failureCallbackQueue = NULL;
}
[super dealloc];
}
@ -92,7 +101,6 @@
- (void)setSuccessCallbackQueue:(dispatch_queue_t)successCallbackQueue {
if (successCallbackQueue != _successCallbackQueue) {
if (_successCallbackQueue) {
dispatch_release(_successCallbackQueue);
}
@ -106,7 +114,6 @@
- (void)setFailureCallbackQueue:(dispatch_queue_t)failureCallbackQueue {
if (failureCallbackQueue != _failureCallbackQueue) {
if (_failureCallbackQueue) {
dispatch_release(_failureCallbackQueue);
}
@ -127,9 +134,17 @@
}
if (self.error) {
[self dispatchFailureBlock:failure];
if (failure) {
dispatch_async(self.failureCallbackQueue ? self.failureCallbackQueue : dispatch_get_main_queue(), ^{
failure(self, self.error);
});
}
} else {
[self dispatchSuccessBlock:success responseObject:self.responseString];
if (success) {
dispatch_async(self.successCallbackQueue ? self.successCallbackQueue : dispatch_get_main_queue(), ^{
success(self, self.responseString);
});
}
}
};
}
@ -140,22 +155,4 @@
return YES;
}
#pragma mark - AFInternal
- (void)dispatchSuccessBlock:(void (^)(AFHTTPRequestOperation *operation, id responseObject))successBlock responseObject:(id)responseObject {
if (successBlock) {
dispatch_async(self.successCallbackQueue ? self.successCallbackQueue : dispatch_get_main_queue(), ^{
successBlock(self, responseObject);
});
}
}
- (void)dispatchFailureBlock:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failureBlock {
if (failureBlock) {
dispatch_async(self.failureCallbackQueue ? self.failureCallbackQueue : dispatch_get_main_queue(), ^{
failureBlock(self, self.error);
});
}
}
@end

View file

@ -109,11 +109,11 @@ static dispatch_queue_t image_request_operation_processing_queue() {
[requestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
if (success) {
NSImage *image = responseObject;
if (imageProcessingBlock) {
image = imageProcessingBlock(image);
}
success(operation.request, operation.response, image);
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
@ -230,9 +230,17 @@ static dispatch_queue_t image_request_operation_processing_queue() {
dispatch_async(image_request_operation_processing_queue(), ^(void) {
if (self.error) {
[self dispatchFailureBlock:failure];
if (failure) {
dispatch_async(self.failureCallbackQueue ? self.failureCallbackQueue : dispatch_get_main_queue(), ^{
failure(self, self.error);
});
}
} else {
[self dispatchSuccessBlock:success responseObject:self.responseImage];
if (success) {
dispatch_async(self.successCallbackQueue ? self.successCallbackQueue : dispatch_get_main_queue(), ^{
success(self, self.responseImage);
});
}
}
});
};

View file

@ -124,15 +124,27 @@ static dispatch_queue_t json_request_operation_processing_queue() {
}
if (self.error) {
[self dispatchFailureBlock:failure];
if (failure) {
dispatch_async(self.failureCallbackQueue ? self.failureCallbackQueue : dispatch_get_main_queue(), ^{
failure(self, self.error);
});
}
} else {
dispatch_async(json_request_operation_processing_queue(), ^(void) {
id JSON = self.responseJSON;
if (self.JSONError) {
[self dispatchFailureBlock:failure];
if (failure) {
dispatch_async(self.failureCallbackQueue ? self.failureCallbackQueue : dispatch_get_main_queue(), ^{
failure(self, self.error);
});
}
} else {
[self dispatchSuccessBlock:success responseObject:JSON];
if (success) {
dispatch_async(self.successCallbackQueue ? self.successCallbackQueue : dispatch_get_main_queue(), ^{
success(self, JSON);
});
}
}
});
}

View file

@ -124,15 +124,27 @@ static dispatch_queue_t property_list_request_operation_processing_queue() {
}
if (self.error) {
[self dispatchFailureBlock:failure];
if (failure) {
dispatch_async(self.failureCallbackQueue ? self.failureCallbackQueue : dispatch_get_main_queue(), ^{
failure(self, self.error);
});
}
} else {
dispatch_async(property_list_request_operation_processing_queue(), ^(void) {
id propertyList = self.responsePropertyList;
if (self.propertyListError) {
[self dispatchFailureBlock:failure];
}else {
[self dispatchSuccessBlock:success responseObject:propertyList];
if (failure) {
dispatch_async(self.failureCallbackQueue ? self.failureCallbackQueue : dispatch_get_main_queue(), ^{
failure(self, self.error);
});
}
} else {
if (success) {
dispatch_async(self.successCallbackQueue ? self.successCallbackQueue : dispatch_get_main_queue(), ^{
success(self, propertyList);
});
}
}
});
}

View file

@ -24,7 +24,6 @@
#include <Availability.h>
#if __MAC_OS_X_VERSION_MIN_REQUIRED
static dispatch_queue_t af_xml_request_operation_processing_queue;
static dispatch_queue_t xml_request_operation_processing_queue() {
if (af_xml_request_operation_processing_queue == NULL) {
@ -33,14 +32,13 @@ static dispatch_queue_t xml_request_operation_processing_queue() {
return af_xml_request_operation_processing_queue;
}
#endif
@interface AFXMLRequestOperation ()
@property (readwrite, nonatomic, retain) NSXMLParser *responseXMLParser;
#if __MAC_OS_X_VERSION_MIN_REQUIRED
@property (readwrite, nonatomic, retain) NSXMLDocument *responseXMLDocument;
#endif
@property (readwrite, nonatomic, retain) NSError *error;
@property (readwrite, nonatomic, retain) NSError *XMLError;
+ (NSSet *)defaultAcceptableContentTypes;
+ (NSSet *)defaultAcceptablePathExtensions;
@ -51,7 +49,7 @@ static dispatch_queue_t xml_request_operation_processing_queue() {
#if __MAC_OS_X_VERSION_MIN_REQUIRED
@synthesize responseXMLDocument = _responseXMLDocument;
#endif
@synthesize error = _XMLError;
@synthesize XMLError = _XMLError;
+ (AFXMLRequestOperation *)XMLParserRequestOperationWithRequest:(NSURLRequest *)urlRequest
success:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, NSXMLParser *XMLParser))success
@ -76,34 +74,20 @@ static dispatch_queue_t xml_request_operation_processing_queue() {
success:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, NSXMLDocument *document))success
failure:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, NSXMLDocument *document))failure
{
AFXMLRequestOperation *operation = [[[self alloc] initWithRequest:urlRequest] autorelease];
operation.completionBlock = ^ {
if ([operation isCancelled]) {
return;
AFXMLRequestOperation *requestOperation = [[[self alloc] initWithRequest:urlRequest] autorelease];
[requestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, __unused id responseObject) {
if (success) {
NSXMLDocument *XMLDocument = [(AFXMLRequestOperation *)operation responseXMLDocument];
success(operation.request, operation.response, XMLDocument);
}
if (operation.error) {
if (failure) {
NSXMLDocument *XMLDocument = operation.responseXMLDocument;
dispatch_async(dispatch_get_main_queue(), ^(void) {
failure(operation.request, operation.response, operation.error, XMLDocument);
});
}
} else {
dispatch_async(xml_request_operation_processing_queue(), ^(void) {
if (success) {
NSXMLDocument *XMLDocument = operation.responseXMLDocument;
dispatch_async(dispatch_get_main_queue(), ^(void) {
success(operation.request, operation.response, XMLDocument);
});
}
});
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
if (failure) {
NSXMLDocument *XMLDocument = [(AFXMLRequestOperation *)operation responseXMLDocument];
failure(operation.request, operation.response, error, XMLDocument);
}
};
}];
return operation;
return requestOperation;
}
#endif
@ -151,7 +135,7 @@ static dispatch_queue_t xml_request_operation_processing_queue() {
if (!_responseXMLDocument && [self.responseData length] > 0 && [self isFinished]) {
NSError *error = nil;
self.responseXMLDocument = [[[NSXMLDocument alloc] initWithData:self.responseData options:0 error:&error] autorelease];
self.error = error;
self.XMLError = error;
}
return _responseXMLDocument;
@ -186,11 +170,23 @@ static dispatch_queue_t xml_request_operation_processing_queue() {
return;
}
if (self.error) {
[self dispatchFailureBlock:failure];
} else {
[self dispatchSuccessBlock:success responseObject:self.responseXMLParser];
}
dispatch_async(xml_request_operation_processing_queue(), ^(void) {
NSXMLParser *XMLParser = self.responseXMLParser;
if (self.error) {
if (failure) {
dispatch_async(self.failureCallbackQueue ? self.failureCallbackQueue : dispatch_get_main_queue(), ^{
failure(self, self.error);
});
}
} else {
if (success) {
dispatch_async(self.successCallbackQueue ? self.successCallbackQueue : dispatch_get_main_queue(), ^{
success(self, XMLParser);
});
}
}
});
};
}