// // Fetcher.m // PicCast // // Created by Matthew Handler on 4/26/11. // Copyright 2011 Earl Industries. All rights reserved. // #import "Fetcher.h" #import "PicCastAppDelegate.h" @implementation Fetcher @synthesize delegate, payload; + (Fetcher *) initWithString:(NSString *)string andDelegate:(id)d { return [Fetcher initWithString:string payload:nil andDelegate:d]; } + (Fetcher *) initWithString:(NSString *)string payload:(id)p andDelegate:(id )d { Fetcher *fetcher = [[[Fetcher alloc] init] autorelease]; fetcher.delegate = d; if (payload != nil) fetcher.payload = p; [fetcher setUrlAndConnect:string]; return fetcher; } - (Fetcher *) init { receivedData = [[NSMutableData data] retain]; return self; } - (void) setUrlAndConnect:(NSString *)string { NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:string] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.0]; if ([NSURLConnection connectionWithRequest:theRequest delegate:self]) { [receivedData setLength:0]; } else { [PicCastAppDelegate prompt:@"Error" withMessage:@"No internet connection" andButtonTitle:@"shucks" withDelegate:self]; } } - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { [receivedData setLength:0]; } - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { [receivedData appendData:data]; } - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { if (payload != nil && [(NSObject *)delegate respondsToSelector:@selector(connection:failedWithError:andPayload:)]) [delegate connection:connection failedWithError:error andPayload:payload]; else [delegate connection:connection failedWithError:error]; } - (void)connectionDidFinishLoading:(NSURLConnection *)connection { if (payload != nil && [(NSObject *)delegate respondsToSelector:@selector(connection:finishedWithData:andPayload:)]) [delegate connection:connection finishedWithData:receivedData andPayload:payload]; else [delegate connection:connection finishedWithData:receivedData]; } - (void) dealloc { [receivedData release]; [super dealloc]; } @end