Ben Copsey

Merge branch 'master' into openresearch-fork

Conflicts:
	.gitignore
@@ -7,4 +7,5 @@ build @@ -7,4 +7,5 @@ build
7 *tmproj 7 *tmproj
8 .DS_Store 8 .DS_Store
9 profile 9 profile
10 - 10 +*.pbxuser
  11 +*.mode1v3
@@ -78,6 +78,7 @@ extern unsigned long const ASIWWANBandwidthThrottleAmount; @@ -78,6 +78,7 @@ extern unsigned long const ASIWWANBandwidthThrottleAmount;
78 78
79 // Another delegate that is also notified of request status changes and progress updates 79 // Another delegate that is also notified of request status changes and progress updates
80 // Generally, you won't use this directly, but ASINetworkQueue sets itself as the queue so it can proxy updates to its own delegates 80 // Generally, you won't use this directly, but ASINetworkQueue sets itself as the queue so it can proxy updates to its own delegates
  81 + // NOTE: WILL BE RETAINED BY THE REQUEST
81 id <ASIHTTPRequestDelegate, ASIProgressDelegate> queue; 82 id <ASIHTTPRequestDelegate, ASIProgressDelegate> queue;
82 83
83 // HTTP method to use (GET / POST / PUT / DELETE / HEAD). Defaults to GET 84 // HTTP method to use (GET / POST / PUT / DELETE / HEAD). Defaults to GET
@@ -153,6 +154,12 @@ extern unsigned long const ASIWWANBandwidthThrottleAmount; @@ -153,6 +154,12 @@ extern unsigned long const ASIWWANBandwidthThrottleAmount;
153 // When the request fails or completes successfully, complete will be true 154 // When the request fails or completes successfully, complete will be true
154 BOOL complete; 155 BOOL complete;
155 156
  157 + // external "finished" indicator, subject of KVO notifications; updates after 'complete'
  158 + BOOL finished;
  159 +
  160 + // True if our 'cancel' selector has been called
  161 + BOOL cancelled;
  162 +
156 // If an error occurs, error will contain an NSError 163 // If an error occurs, error will contain an NSError
157 // If error code is = ASIConnectionFailureErrorType (1, Connection failure occurred) - inspect [[error userInfo] objectForKey:NSUnderlyingErrorKey] for more information 164 // If error code is = ASIConnectionFailureErrorType (1, Connection failure occurred) - inspect [[error userInfo] objectForKey:NSUnderlyingErrorKey] for more information
158 NSError *error; 165 NSError *error;
@@ -709,6 +716,11 @@ extern unsigned long const ASIWWANBandwidthThrottleAmount; @@ -709,6 +716,11 @@ extern unsigned long const ASIWWANBandwidthThrottleAmount;
709 716
710 #endif 717 #endif
711 718
  719 +#pragma mark queue
  720 +
  721 +// Returns the shared queue
  722 ++ (NSOperationQueue *)sharedQueue;
  723 +
712 #pragma mark cache 724 #pragma mark cache
713 725
714 + (void)setDefaultCache:(id <ASICacheDelegate>)cache; 726 + (void)setDefaultCache:(id <ASICacheDelegate>)cache;
@@ -720,9 +732,15 @@ extern unsigned long const ASIWWANBandwidthThrottleAmount; @@ -720,9 +732,15 @@ extern unsigned long const ASIWWANBandwidthThrottleAmount;
720 #pragma mark network activity 732 #pragma mark network activity
721 733
722 + (BOOL)isNetworkInUse; 734 + (BOOL)isNetworkInUse;
723 -#if TARGET_OS_IPHONE 735 +
724 + (void)setShouldUpdateNetworkActivityIndicator:(BOOL)shouldUpdate; 736 + (void)setShouldUpdateNetworkActivityIndicator:(BOOL)shouldUpdate;
725 -#endif 737 +
  738 +// Shows the network activity spinner thing on iOS. You may wish to override this to do something else in Mac projects
  739 ++ (void)showNetworkActivityIndicator;
  740 +
  741 +// Hides the network activity spinner thing on iOS
  742 ++ (void)hideNetworkActivityIndicator;
  743 +
726 744
727 #pragma mark miscellany 745 #pragma mark miscellany
728 746
@@ -762,7 +780,7 @@ extern unsigned long const ASIWWANBandwidthThrottleAmount; @@ -762,7 +780,7 @@ extern unsigned long const ASIWWANBandwidthThrottleAmount;
762 @property (retain,setter=setURL:) NSURL *url; 780 @property (retain,setter=setURL:) NSURL *url;
763 @property (retain) NSURL *originalURL; 781 @property (retain) NSURL *originalURL;
764 @property (assign, nonatomic) id delegate; 782 @property (assign, nonatomic) id delegate;
765 -@property (assign, nonatomic) id queue; 783 +@property (retain, nonatomic) id queue;
766 @property (assign, nonatomic) id uploadProgressDelegate; 784 @property (assign, nonatomic) id uploadProgressDelegate;
767 @property (assign, nonatomic) id downloadProgressDelegate; 785 @property (assign, nonatomic) id downloadProgressDelegate;
768 @property (assign) BOOL useKeychainPersistence; 786 @property (assign) BOOL useKeychainPersistence;
This diff is collapsed. Click to expand it.
@@ -76,6 +76,7 @@ @@ -76,6 +76,7 @@
76 ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:@"http://allseeing-i.com/ASIHTTPRequest/tests/the_great_american_novel_%28abridged%29.txt"]]; 76 ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:@"http://allseeing-i.com/ASIHTTPRequest/tests/the_great_american_novel_%28abridged%29.txt"]];
77 [request startAsynchronous]; 77 [request startAsynchronous];
78 [request cancel]; 78 [request cancel];
  79 + [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:2.0]];
79 GHAssertNotNil([request error],@"Failed to cancel the request"); 80 GHAssertNotNil([request error],@"Failed to cancel the request");
80 81
81 // Test cancelling a redirected request works 82 // Test cancelling a redirected request works
@@ -85,6 +86,7 @@ @@ -85,6 +86,7 @@
85 86
86 [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:2.0]]; 87 [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:2.0]];
87 [request cancel]; 88 [request cancel];
  89 + [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:2.0]];
88 90
89 BOOL success = ([[[request url] absoluteString] isEqualToString:@"http://allseeing-i.com/ASIHTTPRequest/tests/the_great_american_novel.txt"]); 91 BOOL success = ([[[request url] absoluteString] isEqualToString:@"http://allseeing-i.com/ASIHTTPRequest/tests/the_great_american_novel.txt"]);
90 92
@@ -55,6 +55,11 @@ IMPORTANT @@ -55,6 +55,11 @@ IMPORTANT
55 55
56 - (void)testDelegateMethods 56 - (void)testDelegateMethods
57 { 57 {
  58 + [self performSelectorOnMainThread:@selector(runDelegateMethodsTest) withObject:nil waitUntilDone:YES];
  59 +}
  60 +
  61 +- (void)runDelegateMethodsTest
  62 +{
58 started = NO; 63 started = NO;
59 finished = NO; 64 finished = NO;
60 failed = NO; 65 failed = NO;
@@ -436,8 +441,6 @@ IMPORTANT @@ -436,8 +441,6 @@ IMPORTANT
436 success = ([request5 responseStatusCode] == 404); 441 success = ([request5 responseStatusCode] == 404);
437 GHAssertTrue(success,@"Failed to obtain the correct status code for request 5"); 442 GHAssertTrue(success,@"Failed to obtain the correct status code for request 5");
438 443
439 -  
440 -  
441 [requestThatShouldFail release]; 444 [requestThatShouldFail release];
442 445
443 } 446 }
@@ -616,10 +619,6 @@ IMPORTANT @@ -616,10 +619,6 @@ IMPORTANT
616 } 619 }
617 } 620 }
618 621
619 -  
620 -  
621 -  
622 -  
623 - (void)requestFailedExpectedly:(ASIHTTPRequest *)request 622 - (void)requestFailedExpectedly:(ASIHTTPRequest *)request
624 { 623 {
625 request_didfail = YES; 624 request_didfail = YES;
@@ -677,7 +676,8 @@ IMPORTANT @@ -677,7 +676,8 @@ IMPORTANT
677 } 676 }
678 677
679 NSURL *downloadURL = [NSURL URLWithString:@"http://allseeing-i.com/ASIHTTPRequest/tests/the_great_american_novel_%28young_readers_edition%29.txt"]; 678 NSURL *downloadURL = [NSURL URLWithString:@"http://allseeing-i.com/ASIHTTPRequest/tests/the_great_american_novel_%28young_readers_edition%29.txt"];
680 - ASINetworkQueue *networkQueue = [ASINetworkQueue queue]; 679 + ASINetworkQueue *networkQueue = [ASINetworkQueue queue];
  680 + [networkQueue setShouldCancelAllRequestsOnFailure:NO];
681 681
682 ASIHTTPRequest *request = [[[ASIHTTPRequest alloc] initWithURL:downloadURL] autorelease]; 682 ASIHTTPRequest *request = [[[ASIHTTPRequest alloc] initWithURL:downloadURL] autorelease];
683 [request setDownloadDestinationPath:downloadPath]; 683 [request setDownloadDestinationPath:downloadPath];
@@ -1084,9 +1084,14 @@ IMPORTANT @@ -1084,9 +1084,14 @@ IMPORTANT
1084 GHAssertTrue(success,@"Failed to send credentials correctly? (Expected: '%@', got '%@')",expectedResponse,[[request responseString] lowercaseString]); 1084 GHAssertTrue(success,@"Failed to send credentials correctly? (Expected: '%@', got '%@')",expectedResponse,[[request responseString] lowercaseString]);
1085 } 1085 }
1086 1086
1087 -// Test for a bug where failing head requests would not notify the original request's delegate of the failure  
1088 - (void)testHEADFailure 1087 - (void)testHEADFailure
1089 { 1088 {
  1089 + [self performSelectorOnMainThread:@selector(runHEADFailureTest) withObject:nil waitUntilDone:YES];
  1090 +}
  1091 +
  1092 +// Test for a bug where failing head requests would not notify the original request's delegate of the failure
  1093 +- (void)runHEADFailureTest
  1094 +{
1090 headFailed = NO; 1095 headFailed = NO;
1091 ASINetworkQueue *queue = [ASINetworkQueue queue]; 1096 ASINetworkQueue *queue = [ASINetworkQueue queue];
1092 [queue setShowAccurateProgress:YES]; 1097 [queue setShowAccurateProgress:YES];
@@ -2,15 +2,18 @@ ASIHTTPRequest donors: @@ -2,15 +2,18 @@ ASIHTTPRequest donors:
2 2
3 Stephan Burlot (http://www.coriolis.ch) 3 Stephan Burlot (http://www.coriolis.ch)
4 Jack Cardinal (http://www.intomotion.com) 4 Jack Cardinal (http://www.intomotion.com)
  5 +Wonki Chung
5 Matt Coneybeare (http://urbanapps.com) 6 Matt Coneybeare (http://urbanapps.com)
6 Connected Bits LLC (http://www.connectedbits.com) 7 Connected Bits LLC (http://www.connectedbits.com)
7 Nathan de Vries (http://www.atnan.com) 8 Nathan de Vries (http://www.atnan.com)
8 Hunter Hillegas 9 Hunter Hillegas
  10 +Felix Holmgren
9 Jaanus Kase 11 Jaanus Kase
10 Thomas Kiesl (http://kiesl.eu) 12 Thomas Kiesl (http://kiesl.eu)
11 John Paul May (http://smhk.com) 13 John Paul May (http://smhk.com)
12 Jirapong Nanta (http://bananacoding.com) 14 Jirapong Nanta (http://bananacoding.com)
13 -Francesco Segala (http://youarchive.it) 15 +Alessandro Segala (http://letsdev.it)
  16 +Dan Zeitman
14 17
15 Many thanks! 18 Many thanks!
16 19
@@ -12,6 +12,7 @@ @@ -12,6 +12,7 @@
12 </object> 12 </object>
13 <object class="NSMutableArray" key="IBDocument.EditedObjectIDs"> 13 <object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
14 <bool key="EncodedWithXMLCoder">YES</bool> 14 <bool key="EncodedWithXMLCoder">YES</bool>
  15 + <integer value="60"/>
15 </object> 16 </object>
16 <object class="NSArray" key="IBDocument.PluginDependencies"> 17 <object class="NSArray" key="IBDocument.PluginDependencies">
17 <bool key="EncodedWithXMLCoder">YES</bool> 18 <bool key="EncodedWithXMLCoder">YES</bool>
@@ -107,7 +108,7 @@ @@ -107,7 +108,7 @@
107 </object> 108 </object>
108 <object class="IBUIViewController" key="IBUIDetailViewController" id="383891141"> 109 <object class="IBUIViewController" key="IBUIDetailViewController" id="383891141">
109 <reference key="IBUIParentViewController" ref="619662148"/> 110 <reference key="IBUIParentViewController" ref="619662148"/>
110 - <string key="IBUINibName">Synchronous</string> 111 + <string key="IBUINibName">Sample</string>
111 <object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"> 112 <object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics">
112 <int key="IBUIStatusBarStyle">2</int> 113 <int key="IBUIStatusBarStyle">2</int>
113 </object> 114 </object>
@@ -279,14 +280,14 @@ @@ -279,14 +280,14 @@
279 <bool key="EncodedWithXMLCoder">YES</bool> 280 <bool key="EncodedWithXMLCoder">YES</bool>
280 </object> 281 </object>
281 </object> 282 </object>
282 - <string>{{374, 13}, {768, 1024}}</string> 283 + <string>{{682, 13}, {768, 1024}}</string>
283 <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string> 284 <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
284 <integer value="1"/> 285 <integer value="1"/>
285 <string>iPadSampleAppDelegate</string> 286 <string>iPadSampleAppDelegate</string>
286 <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string> 287 <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
287 <string>SynchronousViewController</string> 288 <string>SynchronousViewController</string>
288 <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string> 289 <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
289 - <string>{{329, 308}, {1024, 768}}</string> 290 + <string>{{571, 157}, {1024, 768}}</string>
290 <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string> 291 <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
291 <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string> 292 <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
292 <string>RootViewController</string> 293 <string>RootViewController</string>
@@ -339,7 +340,7 @@ @@ -339,7 +340,7 @@
339 </object> 340 </object>
340 <object class="IBClassDescriptionSource" key="sourceIdentifier"> 341 <object class="IBClassDescriptionSource" key="sourceIdentifier">
341 <string key="majorKey">IBProjectSource</string> 342 <string key="majorKey">IBProjectSource</string>
342 - <string key="minorKey">RootViewController.h</string> 343 + <string key="minorKey">iPhone Sample/RootViewController.h</string>
343 </object> 344 </object>
344 </object> 345 </object>
345 <object class="IBPartialClassDescription"> 346 <object class="IBPartialClassDescription">
@@ -379,7 +380,7 @@ @@ -379,7 +380,7 @@
379 </object> 380 </object>
380 <object class="IBClassDescriptionSource" key="sourceIdentifier"> 381 <object class="IBClassDescriptionSource" key="sourceIdentifier">
381 <string key="majorKey">IBProjectSource</string> 382 <string key="majorKey">IBProjectSource</string>
382 - <string key="minorKey">SampleViewController.h</string> 383 + <string key="minorKey">iPhone Sample/SampleViewController.h</string>
383 </object> 384 </object>
384 </object> 385 </object>
385 <object class="IBPartialClassDescription"> 386 <object class="IBPartialClassDescription">
@@ -438,7 +439,7 @@ @@ -438,7 +439,7 @@
438 </object> 439 </object>
439 <object class="IBClassDescriptionSource" key="sourceIdentifier"> 440 <object class="IBClassDescriptionSource" key="sourceIdentifier">
440 <string key="majorKey">IBProjectSource</string> 441 <string key="majorKey">IBProjectSource</string>
441 - <string key="minorKey">iPadSampleAppDelegate.h</string> 442 + <string key="minorKey">iPhone Sample/iPadSampleAppDelegate.h</string>
442 </object> 443 </object>
443 </object> 444 </object>
444 </object> 445 </object>