Created
June 25, 2010 15:07
-
-
Save ddribin/452974 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#import "UrlDownloaderOperation.h" | |
@interface UrlDownloaderOperation () | |
- (void)finish; | |
@end | |
@implementation UrlDownloaderOperation | |
@synthesize url = _url; | |
@synthesize statusCode = _statusCode; | |
@synthesize data = _data; | |
@synthesize error = _error; | |
@synthesize isExecuting = _isExecuting; | |
@synthesize isFinished = _isFinished; | |
+ (id)urlDownloaderWithUrlString:(NSString *)urlString | |
{ | |
NSURL * url = [NSURL URLWithString:urlString]; | |
UrlDownloaderOperation * operation = [[self alloc] initWithUrl:url]; | |
return [operation autorelease]; | |
} | |
- (id)initWithUrl:(NSURL *)url | |
{ | |
self = [super init]; | |
if (self == nil) | |
return nil; | |
_url = [url copy]; | |
_isExecuting = NO; | |
_isFinished = NO; | |
return self; | |
} | |
- (void)dealloc | |
{ | |
[_url release]; | |
[_connection release]; | |
[_data release]; | |
[_error release]; | |
[super dealloc]; | |
} | |
- (BOOL)isConcurrent | |
{ | |
return YES; | |
} | |
- (void)start | |
{ | |
NSLog(@"opeartion for <%@> started.", _url); | |
[self willChangeValueForKey:@"isExecuting"]; | |
_isExecuting = YES; | |
[self didChangeValueForKey:@"isExecuting"]; | |
NSURLRequest * request = [NSURLRequest requestWithURL:_url]; | |
_connection = [[NSURLConnection alloc] initWithRequest:request | |
delegate:self]; | |
if (_connection == nil) | |
[self finish]; | |
} | |
- (void)finish | |
{ | |
NSLog(@"operation for <%@> finished. " | |
@"status code: %d, error: %@, data size: %u", | |
_url, _statusCode, _error, [_data length]); | |
[_connection release]; | |
_connection = nil; | |
[self willChangeValueForKey:@"isExecuting"]; | |
[self willChangeValueForKey:@"isFinished"]; | |
_isExecuting = NO; | |
_isFinished = YES; | |
[self didChangeValueForKey:@"isExecuting"]; | |
[self didChangeValueForKey:@"isFinished"]; | |
} | |
#pragma mark - | |
#pragma mark NSURLConnection delegate | |
- (void)connection:(NSURLConnection *)connection | |
didReceiveResponse:(NSURLResponse *)response | |
{ | |
[_data release]; | |
_data = [[NSMutableData alloc] init]; | |
NSHTTPURLResponse * httpResponse = (NSHTTPURLResponse *)response; | |
_statusCode = [httpResponse statusCode]; | |
} | |
- (void)connection:(NSURLConnection *)connection | |
didReceiveData:(NSData *)data | |
{ | |
[_data appendData:data]; | |
} | |
- (void)connectionDidFinishLoading:(NSURLConnection *)connection | |
{ | |
[self finish]; | |
} | |
- (void)connection:(NSURLConnection *)connection | |
didFailWithError:(NSError *)error | |
{ | |
_error = [error copy]; | |
[self finish]; | |
} | |
@end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment