Ben Copsey

* Prevent timeouts in low bandwidth situations when upload size > 128KB

* Ignore first 128KB of upload progress in upload progress delegates, to prevent erroneous reporting of progress
* Remove silly debug code that broke accurate progress on iPhone
@@ -10,7 +10,11 @@ @@ -10,7 +10,11 @@
10 // Portions are based on the ImageClient example from Apple: 10 // Portions are based on the ImageClient example from Apple:
11 // See: http://developer.apple.com/samplecode/ImageClient/listing37.html 11 // See: http://developer.apple.com/samplecode/ImageClient/listing37.html
12 12
13 -#import <CFNetwork/CFNetwork.h> 13 +
  14 +// Dammit, importing frameworks when you are targetting two platforms is a PITA
  15 +#if TARGET_OS_IPHONE
  16 + #import <CFNetwork/CFNetwork.h>
  17 +#endif
14 18
15 typedef enum _ASINetworkErrorType { 19 typedef enum _ASINetworkErrorType {
16 ASIConnectionFailureErrorType = 1, 20 ASIConnectionFailureErrorType = 1,
@@ -160,6 +164,8 @@ typedef enum _ASINetworkErrorType { @@ -160,6 +164,8 @@ typedef enum _ASINetworkErrorType {
160 164
161 // Prevents the body of the post being built more than once (largely for subclasses) 165 // Prevents the body of the post being built more than once (largely for subclasses)
162 BOOL haveBuiltPostBody; 166 BOOL haveBuiltPostBody;
  167 +
  168 + unsigned long long uploadBufferSize;
163 } 169 }
164 170
165 #pragma mark init / dealloc 171 #pragma mark init / dealloc
@@ -298,4 +304,5 @@ typedef enum _ASINetworkErrorType { @@ -298,4 +304,5 @@ typedef enum _ASINetworkErrorType {
298 @property (retain) ASIHTTPRequest *mainRequest; 304 @property (retain) ASIHTTPRequest *mainRequest;
299 @property (assign) BOOL showAccurateProgress; 305 @property (assign) BOOL showAccurateProgress;
300 @property (assign,readonly) unsigned long long totalBytesRead; 306 @property (assign,readonly) unsigned long long totalBytesRead;
  307 +@property (assign) unsigned long long uploadBufferSize;
301 @end 308 @end
@@ -71,6 +71,7 @@ static NSError *ASIUnableToCreateRequestError; @@ -71,6 +71,7 @@ static NSError *ASIUnableToCreateRequestError;
71 requestAuthentication = NULL; 71 requestAuthentication = NULL;
72 haveBuiltPostBody = NO; 72 haveBuiltPostBody = NO;
73 request = NULL; 73 request = NULL;
  74 + [self setUploadBufferSize:0];
74 [self setResponseHeaders:nil]; 75 [self setResponseHeaders:nil];
75 [self setTimeOutSeconds:10]; 76 [self setTimeOutSeconds:10];
76 [self setUseKeychainPersistance:NO]; 77 [self setUseKeychainPersistance:NO];
@@ -184,6 +185,11 @@ static NSError *ASIUnableToCreateRequestError; @@ -184,6 +185,11 @@ static NSError *ASIUnableToCreateRequestError;
184 185
185 complete = NO; 186 complete = NO;
186 187
  188 + if (!url) {
  189 + [self failWithError:ASIUnableToCreateRequestError];
  190 + return;
  191 + }
  192 +
187 // Create a new HTTP request. 193 // Create a new HTTP request.
188 request = CFHTTPMessageCreateRequest(kCFAllocatorDefault, (CFStringRef)requestMethod, (CFURLRef)url, kCFHTTPVersion1_1); 194 request = CFHTTPMessageCreateRequest(kCFAllocatorDefault, (CFStringRef)requestMethod, (CFURLRef)url, kCFHTTPVersion1_1);
189 if (!request) { 195 if (!request) {
@@ -346,8 +352,12 @@ static NSError *ASIUnableToCreateRequestError; @@ -346,8 +352,12 @@ static NSError *ASIUnableToCreateRequestError;
346 NSDate *now = [NSDate date]; 352 NSDate *now = [NSDate date];
347 353
348 // See if we need to timeout 354 // See if we need to timeout
349 - if (lastActivityTime && timeOutSeconds > 0) { 355 + if (lastActivityTime && timeOutSeconds > 0 && [now timeIntervalSinceDate:lastActivityTime] > timeOutSeconds) {
350 - if ([now timeIntervalSinceDate:lastActivityTime] > timeOutSeconds) { 356 +
  357 + // Prevent timeouts before 128KB has been sent when the size of data to upload is greater than 128KB
  358 + // This is to workaround the fact that kCFStreamPropertyHTTPRequestBytesWrittenCount is the amount written to the buffer, not the amount actually sent
  359 + // This workaround prevents erroneous timeouts in low bandwidth situations (eg iPhone)
  360 + if (contentLength <= uploadBufferSize || (uploadBufferSize > 0 && lastBytesSent > uploadBufferSize)) {
351 [self failWithError:ASIRequestTimedOutError]; 361 [self failWithError:ASIRequestTimedOutError];
352 [self cancelLoad]; 362 [self cancelLoad];
353 complete = YES; 363 complete = YES;
@@ -474,6 +484,25 @@ static NSError *ASIUnableToCreateRequestError; @@ -474,6 +484,25 @@ static NSError *ASIUnableToCreateRequestError;
474 return; 484 return;
475 } 485 }
476 unsigned long long byteCount = [[(NSNumber *)CFReadStreamCopyProperty (readStream, kCFStreamPropertyHTTPRequestBytesWrittenCount) autorelease] unsignedLongLongValue]; 486 unsigned long long byteCount = [[(NSNumber *)CFReadStreamCopyProperty (readStream, kCFStreamPropertyHTTPRequestBytesWrittenCount) autorelease] unsignedLongLongValue];
  487 +
  488 + // If this is the first time we've written to the buffer, byteCount will be the size of the buffer (currently seems to be 128KB on both Mac and iPhone)
  489 + // We will remove this from any progress display, as kCFStreamPropertyHTTPRequestBytesWrittenCount does not tell us how much data has actually be written
  490 + if (byteCount > 0 && uploadBufferSize == 0 && byteCount != postLength) {
  491 + [self setUploadBufferSize:byteCount];
  492 + SEL selector = @selector(setUploadBufferSize:);
  493 + if ([uploadProgressDelegate respondsToSelector:selector]) {
  494 + NSMethodSignature *signature = nil;
  495 + signature = [[uploadProgressDelegate class] instanceMethodSignatureForSelector:selector];
  496 + NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
  497 + [invocation setTarget:uploadProgressDelegate];
  498 + [invocation setSelector:selector];
  499 + [invocation setArgument:&byteCount atIndex:2];
  500 + [invocation invoke];
  501 + }
  502 + }
  503 +
  504 +
  505 +
477 [cancelledLock unlock]; 506 [cancelledLock unlock];
478 if (byteCount > lastBytesSent) { 507 if (byteCount > lastBytesSent) {
479 [self setLastActivityTime:[NSDate date]]; 508 [self setLastActivityTime:[NSDate date]];
@@ -485,7 +514,13 @@ static NSError *ASIUnableToCreateRequestError; @@ -485,7 +514,13 @@ static NSError *ASIUnableToCreateRequestError;
485 if ([uploadProgressDelegate respondsToSelector:@selector(incrementUploadProgressBy:)]) { 514 if ([uploadProgressDelegate respondsToSelector:@selector(incrementUploadProgressBy:)]) {
486 unsigned long long value = 0; 515 unsigned long long value = 0;
487 if (showAccurateProgress) { 516 if (showAccurateProgress) {
488 - value = byteCount-lastBytesSent; 517 + if (byteCount == postLength) {
  518 + value = byteCount+uploadBufferSize;
  519 + } else if (lastBytesSent > 0) {
  520 + value = ((byteCount-uploadBufferSize)-(lastBytesSent-uploadBufferSize));
  521 + } else {
  522 + value = 0;
  523 + }
489 } else { 524 } else {
490 value = 1; 525 value = 1;
491 updatedProgress = YES; 526 updatedProgress = YES;
@@ -501,7 +536,7 @@ static NSError *ASIUnableToCreateRequestError; @@ -501,7 +536,7 @@ static NSError *ASIUnableToCreateRequestError;
501 536
502 // We aren't using a queue, we should just set progress of the indicator 537 // We aren't using a queue, we should just set progress of the indicator
503 } else { 538 } else {
504 - [ASIHTTPRequest setProgress:(double)(1.0*byteCount/postLength) forProgressIndicator:uploadProgressDelegate]; 539 + [ASIHTTPRequest setProgress:(double)(1.0*(byteCount-uploadBufferSize)/(postLength-uploadBufferSize)) forProgressIndicator:uploadProgressDelegate];
505 } 540 }
506 541
507 } 542 }
@@ -614,7 +649,6 @@ static NSError *ASIUnableToCreateRequestError; @@ -614,7 +649,6 @@ static NSError *ASIUnableToCreateRequestError;
614 [invocation setSelector:selector]; 649 [invocation setSelector:selector];
615 float progressFloat = (float)progress; // UIProgressView wants a float for the progress parameter 650 float progressFloat = (float)progress; // UIProgressView wants a float for the progress parameter
616 [invocation setArgument:&progressFloat atIndex:2]; 651 [invocation setArgument:&progressFloat atIndex:2];
617 - [invocation invokeWithTarget:indicator];  
618 652
619 // If we're running in the main thread, update the progress straight away. Otherwise, it's not that urgent 653 // If we're running in the main thread, update the progress straight away. Otherwise, it's not that urgent
620 [invocation performSelectorOnMainThread:@selector(invokeWithTarget:) withObject:indicator waitUntilDone:[NSThread isMainThread]]; 654 [invocation performSelectorOnMainThread:@selector(invokeWithTarget:) withObject:indicator waitUntilDone:[NSThread isMainThread]];
@@ -1146,4 +1180,5 @@ static NSError *ASIUnableToCreateRequestError; @@ -1146,4 +1180,5 @@ static NSError *ASIUnableToCreateRequestError;
1146 @synthesize totalBytesRead; 1180 @synthesize totalBytesRead;
1147 @synthesize showAccurateProgress; 1181 @synthesize showAccurateProgress;
1148 @synthesize totalBytesRead; 1182 @synthesize totalBytesRead;
  1183 +@synthesize uploadBufferSize;
1149 @end 1184 @end
@@ -74,6 +74,11 @@ @@ -74,6 +74,11 @@
74 // Called during a request when authorisation fails to cancel any progress so far 74 // Called during a request when authorisation fails to cancel any progress so far
75 - (void)decrementUploadProgressBy:(unsigned long long)bytes; 75 - (void)decrementUploadProgressBy:(unsigned long long)bytes;
76 76
  77 +// Called when the first chunk of data is written to the upload buffer
  78 +// We ignore the first part chunk when tracking upload progress, as kCFStreamPropertyHTTPRequestBytesWrittenCount reports the amount of data written to the buffer, not the amount sent
  79 +// This is to workaround the first 128KB of data appearing in an upload progress delegate immediately
  80 +- (void)setUploadBufferSize:(unsigned long long)bytes;
  81 +
77 // All ASINetworkQueues are paused when created so that total size can be calculated before the queue starts 82 // All ASINetworkQueues are paused when created so that total size can be calculated before the queue starts
78 // This method will start the queue 83 // This method will start the queue
79 - (void)go; 84 - (void)go;
@@ -193,6 +193,16 @@ @@ -193,6 +193,16 @@
193 } 193 }
194 } 194 }
195 195
  196 +
  197 +- (void)setUploadBufferSize:(unsigned long long)bytes
  198 +{
  199 + if (!uploadProgressDelegate) {
  200 + return;
  201 + }
  202 + uploadProgressTotalBytes -= bytes;
  203 + [self incrementUploadProgressBy:0];
  204 +}
  205 +
196 - (void)incrementUploadSizeBy:(unsigned long long)bytes 206 - (void)incrementUploadSizeBy:(unsigned long long)bytes
197 { 207 {
198 if (!uploadProgressDelegate) { 208 if (!uploadProgressDelegate) {
1 <?xml version="1.0" encoding="UTF-8"?> 1 <?xml version="1.0" encoding="UTF-8"?>
2 -<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.02"> 2 +<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.03">
3 <data> 3 <data>
4 <int key="IBDocument.SystemTarget">1050</int> 4 <int key="IBDocument.SystemTarget">1050</int>
5 - <string key="IBDocument.SystemVersion">9F33</string> 5 + <string key="IBDocument.SystemVersion">9G55</string>
6 - <string key="IBDocument.InterfaceBuilderVersion">672</string> 6 + <string key="IBDocument.InterfaceBuilderVersion">677</string>
7 - <string key="IBDocument.AppKitVersion">949.34</string> 7 + <string key="IBDocument.AppKitVersion">949.43</string>
8 - <string key="IBDocument.HIToolboxVersion">352.00</string> 8 + <string key="IBDocument.HIToolboxVersion">353.00</string>
9 <object class="NSMutableArray" key="IBDocument.EditedObjectIDs"> 9 <object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
10 <bool key="EncodedWithXMLCoder">YES</bool> 10 <bool key="EncodedWithXMLCoder">YES</bool>
11 - <integer value="440"/> 11 + <integer value="444"/>
12 </object> 12 </object>
13 <object class="NSArray" key="IBDocument.PluginDependencies"> 13 <object class="NSArray" key="IBDocument.PluginDependencies">
14 <bool key="EncodedWithXMLCoder">YES</bool> 14 <bool key="EncodedWithXMLCoder">YES</bool>
15 <string>com.apple.InterfaceBuilderKit</string> 15 <string>com.apple.InterfaceBuilderKit</string>
16 <string>com.apple.InterfaceBuilder.CocoaPlugin</string> 16 <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
17 </object> 17 </object>
  18 + <object class="NSMutableDictionary" key="IBDocument.Metadata">
  19 + <bool key="EncodedWithXMLCoder">YES</bool>
  20 + <object class="NSArray" key="dict.sortedKeys">
  21 + <bool key="EncodedWithXMLCoder">YES</bool>
  22 + </object>
  23 + <object class="NSMutableArray" key="dict.values">
  24 + <bool key="EncodedWithXMLCoder">YES</bool>
  25 + </object>
  26 + </object>
18 <object class="NSMutableArray" key="IBDocument.RootObjects" id="1048"> 27 <object class="NSMutableArray" key="IBDocument.RootObjects" id="1048">
19 <bool key="EncodedWithXMLCoder">YES</bool> 28 <bool key="EncodedWithXMLCoder">YES</bool>
20 <object class="NSCustomObject" id="1021"> 29 <object class="NSCustomObject" id="1021">
@@ -1055,7 +1064,7 @@ cmVhZC4</string> @@ -1055,7 +1064,7 @@ cmVhZC4</string>
1055 <object class="NSTabViewItem" id="725395930"> 1064 <object class="NSTabViewItem" id="725395930">
1056 <string key="NSIdentifier">Item 2</string> 1065 <string key="NSIdentifier">Item 2</string>
1057 <object class="NSView" key="NSView" id="624078948"> 1066 <object class="NSView" key="NSView" id="624078948">
1058 - <reference key="NSNextResponder" ref="495298985"/> 1067 + <nil key="NSNextResponder"/>
1059 <int key="NSvFlags">256</int> 1068 <int key="NSvFlags">256</int>
1060 <object class="NSMutableArray" key="NSSubviews"> 1069 <object class="NSMutableArray" key="NSSubviews">
1061 <bool key="EncodedWithXMLCoder">YES</bool> 1070 <bool key="EncodedWithXMLCoder">YES</bool>
@@ -1208,7 +1217,6 @@ cmVhZC4</string> @@ -1208,7 +1217,6 @@ cmVhZC4</string>
1208 </object> 1217 </object>
1209 </object> 1218 </object>
1210 <string key="NSFrame">{{10, 33}, {441, 243}}</string> 1219 <string key="NSFrame">{{10, 33}, {441, 243}}</string>
1211 - <reference key="NSSuperview" ref="495298985"/>  
1212 </object> 1220 </object>
1213 <string key="NSLabel">Queue</string> 1221 <string key="NSLabel">Queue</string>
1214 <reference key="NSColor" ref="482475293"/> 1222 <reference key="NSColor" ref="482475293"/>
@@ -1323,7 +1331,7 @@ c3N3b3JkLCBlbnRlciAndG9wc2VjcmV0JyBmb3IgYm90aC4</string> @@ -1323,7 +1331,7 @@ c3N3b3JkLCBlbnRlciAndG9wc2VjcmV0JyBmb3IgYm90aC4</string>
1323 <object class="NSTabViewItem" id="409502867"> 1331 <object class="NSTabViewItem" id="409502867">
1324 <string key="NSIdentifier">Item 4</string> 1332 <string key="NSIdentifier">Item 4</string>
1325 <object class="NSView" key="NSView" id="408528501"> 1333 <object class="NSView" key="NSView" id="408528501">
1326 - <nil key="NSNextResponder"/> 1334 + <reference key="NSNextResponder" ref="495298985"/>
1327 <int key="NSvFlags">256</int> 1335 <int key="NSvFlags">256</int>
1328 <object class="NSMutableArray" key="NSSubviews"> 1336 <object class="NSMutableArray" key="NSSubviews">
1329 <bool key="EncodedWithXMLCoder">YES</bool> 1337 <bool key="EncodedWithXMLCoder">YES</bool>
@@ -1365,20 +1373,21 @@ c3N3b3JkLCBlbnRlciAndG9wc2VjcmV0JyBmb3IgYm90aC4</string> @@ -1365,20 +1373,21 @@ c3N3b3JkLCBlbnRlciAndG9wc2VjcmV0JyBmb3IgYm90aC4</string>
1365 </object> 1373 </object>
1366 </object> 1374 </object>
1367 <string key="NSFrame">{{10, 33}, {441, 243}}</string> 1375 <string key="NSFrame">{{10, 33}, {441, 243}}</string>
  1376 + <reference key="NSSuperview" ref="495298985"/>
1368 </object> 1377 </object>
1369 <string key="NSLabel">Upload</string> 1378 <string key="NSLabel">Upload</string>
1370 <reference key="NSColor" ref="482475293"/> 1379 <reference key="NSColor" ref="482475293"/>
1371 <reference key="NSTabView" ref="495298985"/> 1380 <reference key="NSTabView" ref="495298985"/>
1372 </object> 1381 </object>
1373 </object> 1382 </object>
1374 - <reference key="NSSelectedTabViewItem" ref="725395930"/> 1383 + <reference key="NSSelectedTabViewItem" ref="409502867"/>
1375 <reference key="NSFont" ref="584670792"/> 1384 <reference key="NSFont" ref="584670792"/>
1376 <int key="NSTvFlags">0</int> 1385 <int key="NSTvFlags">0</int>
1377 <bool key="NSAllowTruncatedLabels">YES</bool> 1386 <bool key="NSAllowTruncatedLabels">YES</bool>
1378 <bool key="NSDrawsBackground">YES</bool> 1387 <bool key="NSDrawsBackground">YES</bool>
1379 <object class="NSMutableArray" key="NSSubviews"> 1388 <object class="NSMutableArray" key="NSSubviews">
1380 <bool key="EncodedWithXMLCoder">YES</bool> 1389 <bool key="EncodedWithXMLCoder">YES</bool>
1381 - <reference ref="624078948"/> 1390 + <reference ref="408528501"/>
1382 </object> 1391 </object>
1383 </object> 1392 </object>
1384 </object> 1393 </object>
@@ -3420,7 +3429,6 @@ c3N3b3JkLCBlbnRlciAndG9wc2VjcmV0JyBmb3IgYm90aC4</string> @@ -3420,7 +3429,6 @@ c3N3b3JkLCBlbnRlciAndG9wc2VjcmV0JyBmb3IgYm90aC4</string>
3420 <string>354.IBPluginDependency</string> 3429 <string>354.IBPluginDependency</string>
3421 <string>354.ImportedFromIB2</string> 3430 <string>354.ImportedFromIB2</string>
3422 <string>371.IBEditorWindowLastContentRect</string> 3431 <string>371.IBEditorWindowLastContentRect</string>
3423 - <string>371.IBPluginDependency</string>  
3424 <string>371.IBWindowTemplateEditedContentRect</string> 3432 <string>371.IBWindowTemplateEditedContentRect</string>
3425 <string>371.NSWindowTemplate.visibleAtLaunch</string> 3433 <string>371.NSWindowTemplate.visibleAtLaunch</string>
3426 <string>371.editorWindowContentRectSynchronizationRect</string> 3434 <string>371.editorWindowContentRectSynchronizationRect</string>
@@ -3428,7 +3436,6 @@ c3N3b3JkLCBlbnRlciAndG9wc2VjcmV0JyBmb3IgYm90aC4</string> @@ -3428,7 +3436,6 @@ c3N3b3JkLCBlbnRlciAndG9wc2VjcmV0JyBmb3IgYm90aC4</string>
3428 <string>381.IBPluginDependency</string> 3436 <string>381.IBPluginDependency</string>
3429 <string>384.IBPluginDependency</string> 3437 <string>384.IBPluginDependency</string>
3430 <string>390.IBEditorWindowLastContentRect</string> 3438 <string>390.IBEditorWindowLastContentRect</string>
3431 - <string>390.IBPluginDependency</string>  
3432 <string>390.IBWindowTemplateEditedContentRect</string> 3439 <string>390.IBWindowTemplateEditedContentRect</string>
3433 <string>390.NSWindowTemplate.visibleAtLaunch</string> 3440 <string>390.NSWindowTemplate.visibleAtLaunch</string>
3434 <string>390.editorWindowContentRectSynchronizationRect</string> 3441 <string>390.editorWindowContentRectSynchronizationRect</string>
@@ -3458,6 +3465,12 @@ c3N3b3JkLCBlbnRlciAndG9wc2VjcmV0JyBmb3IgYm90aC4</string> @@ -3458,6 +3465,12 @@ c3N3b3JkLCBlbnRlciAndG9wc2VjcmV0JyBmb3IgYm90aC4</string>
3458 <string>436.IBPluginDependency</string> 3465 <string>436.IBPluginDependency</string>
3459 <string>437.IBPluginDependency</string> 3466 <string>437.IBPluginDependency</string>
3460 <string>438.IBPluginDependency</string> 3467 <string>438.IBPluginDependency</string>
  3468 + <string>439.IBPluginDependency</string>
  3469 + <string>440.IBPluginDependency</string>
  3470 + <string>441.IBPluginDependency</string>
  3471 + <string>442.IBPluginDependency</string>
  3472 + <string>443.IBPluginDependency</string>
  3473 + <string>444.IBPluginDependency</string>
3461 <string>451.IBPluginDependency</string> 3474 <string>451.IBPluginDependency</string>
3462 <string>452.IBPluginDependency</string> 3475 <string>452.IBPluginDependency</string>
3463 <string>453.IBPluginDependency</string> 3476 <string>453.IBPluginDependency</string>
@@ -3673,7 +3686,6 @@ c3N3b3JkLCBlbnRlciAndG9wc2VjcmV0JyBmb3IgYm90aC4</string> @@ -3673,7 +3686,6 @@ c3N3b3JkLCBlbnRlciAndG9wc2VjcmV0JyBmb3IgYm90aC4</string>
3673 <string>com.apple.InterfaceBuilder.CocoaPlugin</string> 3686 <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
3674 <reference ref="9"/> 3687 <reference ref="9"/>
3675 <string>{{267, 307}, {480, 337}}</string> 3688 <string>{{267, 307}, {480, 337}}</string>
3676 - <string>com.apple.InterfaceBuilder.CocoaPlugin</string>  
3677 <string>{{267, 307}, {480, 337}}</string> 3689 <string>{{267, 307}, {480, 337}}</string>
3678 <reference ref="9"/> 3690 <reference ref="9"/>
3679 <string>{{235, -51}, {480, 337}}</string> 3691 <string>{{235, -51}, {480, 337}}</string>
@@ -3681,7 +3693,6 @@ c3N3b3JkLCBlbnRlciAndG9wc2VjcmV0JyBmb3IgYm90aC4</string> @@ -3681,7 +3693,6 @@ c3N3b3JkLCBlbnRlciAndG9wc2VjcmV0JyBmb3IgYm90aC4</string>
3681 <string>com.apple.InterfaceBuilder.CocoaPlugin</string> 3693 <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
3682 <string>com.apple.InterfaceBuilder.CocoaPlugin</string> 3694 <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
3683 <string>{{21, 629}, {279, 182}}</string> 3695 <string>{{21, 629}, {279, 182}}</string>
3684 - <string>com.apple.InterfaceBuilder.CocoaPlugin</string>  
3685 <string>{{21, 629}, {279, 182}}</string> 3696 <string>{{21, 629}, {279, 182}}</string>
3686 <integer value="0"/> 3697 <integer value="0"/>
3687 <string>{{793, -129}, {279, 182}}</string> 3698 <string>{{793, -129}, {279, 182}}</string>
@@ -3746,6 +3757,12 @@ c3N3b3JkLCBlbnRlciAndG9wc2VjcmV0JyBmb3IgYm90aC4</string> @@ -3746,6 +3757,12 @@ c3N3b3JkLCBlbnRlciAndG9wc2VjcmV0JyBmb3IgYm90aC4</string>
3746 <string>com.apple.InterfaceBuilder.CocoaPlugin</string> 3757 <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
3747 <string>com.apple.InterfaceBuilder.CocoaPlugin</string> 3758 <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
3748 <string>com.apple.InterfaceBuilder.CocoaPlugin</string> 3759 <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
  3760 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
  3761 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
  3762 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
  3763 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
  3764 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
  3765 + <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
3749 <reference ref="9"/> 3766 <reference ref="9"/>
3750 <string>com.apple.InterfaceBuilder.CocoaPlugin</string> 3767 <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
3751 <string>com.apple.InterfaceBuilder.CocoaPlugin</string> 3768 <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -9,7 +9,7 @@ It provides: @@ -9,7 +9,7 @@ It provides:
9 * Easy access to request and response HTTP headers 9 * Easy access to request and response HTTP headers
10 * Progress delegates (NSProgressIndicators and UIProgressViews) to show information about download AND upload progress 10 * Progress delegates (NSProgressIndicators and UIProgressViews) to show information about download AND upload progress
11 * Auto-magic management of upload and download progress indicators for operation queues 11 * Auto-magic management of upload and download progress indicators for operation queues
12 -* Basic + Digest authentication support, credentials are automatically for the duration of a session, and can be stored for later in the Keychain. 12 +* Basic + Digest authentication support, credentials are automatically re-used for the duration of a session, and can be stored for later in the Keychain.
13 * Cookie support 13 * Cookie support
14 * Based on NSOperation to make queuing requests and background operation easy 14 * Based on NSOperation to make queuing requests and background operation easy
15 * Basic unit tests (more to come!) 15 * Basic unit tests (more to come!)
  1 +//
  2 +// UploadViewController.h
  3 +// asi-http-request
  4 +//
  5 +// Created by Ben Copsey on 31/12/2008.
  6 +// Copyright 2008 All-Seeing Interactive. All rights reserved.
  7 +//
  8 +
  9 +#import <UIKit/UIKit.h>
  10 +
  11 +@class ASINetworkQueue;
  12 +
  13 +@interface UploadViewController : UIViewController {
  14 + ASINetworkQueue *networkQueue;
  15 + IBOutlet UIProgressView *progressIndicator;
  16 +}
  17 +
  18 +- (IBAction)performLargeUpload:(id)sender;
  19 +
  20 +@end
  1 +//
  2 +// UploadViewController.m
  3 +// asi-http-request
  4 +//
  5 +// Created by Ben Copsey on 31/12/2008.
  6 +// Copyright 2008 All-Seeing Interactive. All rights reserved.
  7 +//
  8 +
  9 +#import "UploadViewController.h"
  10 +#import "ASIFormDataRequest.h"
  11 +#import "ASINetworkQueue.h"
  12 +
  13 +@implementation UploadViewController
  14 +
  15 +
  16 +- (void)awakeFromNib
  17 +{
  18 + networkQueue = [[ASINetworkQueue alloc] init];
  19 +}
  20 +
  21 +- (IBAction)performLargeUpload:(id)sender
  22 +{
  23 + [networkQueue cancelAllOperations];
  24 + [networkQueue setShowAccurateProgress:YES];
  25 + [networkQueue setUploadProgressDelegate:progressIndicator];
  26 + [networkQueue setDelegate:self];
  27 +
  28 + ASIFormDataRequest *request = [[[ASIFormDataRequest alloc] initWithURL:[NSURL URLWithString:@"http://allseeing-i.com/ignore"]] autorelease];
  29 + [request setPostValue:@"test" forKey:@"value1"];
  30 + [request setPostValue:@"test" forKey:@"value2"];
  31 + [request setPostValue:@"test" forKey:@"value3"];
  32 + [request setTimeOutSeconds:20];
  33 + [request setData:[NSMutableData dataWithLength:1024*1024] forKey:@"1mb-of-crap"];
  34 +
  35 + [networkQueue addOperation:request];
  36 + [networkQueue go];
  37 +}
  38 +
  39 +- (void)dealloc {
  40 + [networkQueue release];
  41 + [super dealloc];
  42 +}
  43 +
  44 +@end
This diff was suppressed by a .gitattributes entry.
1 <?xml version="1.0" encoding="UTF-8"?> 1 <?xml version="1.0" encoding="UTF-8"?>
2 -<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="7.02"> 2 +<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="7.03">
3 <data> 3 <data>
4 <int key="IBDocument.SystemTarget">528</int> 4 <int key="IBDocument.SystemTarget">528</int>
5 - <string key="IBDocument.SystemVersion">9F33</string> 5 + <string key="IBDocument.SystemVersion">9G55</string>
6 - <string key="IBDocument.InterfaceBuilderVersion">672</string> 6 + <string key="IBDocument.InterfaceBuilderVersion">677</string>
7 - <string key="IBDocument.AppKitVersion">949.34</string> 7 + <string key="IBDocument.AppKitVersion">949.43</string>
8 - <string key="IBDocument.HIToolboxVersion">352.00</string> 8 + <string key="IBDocument.HIToolboxVersion">353.00</string>
9 <object class="NSMutableArray" key="IBDocument.EditedObjectIDs"> 9 <object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
10 <bool key="EncodedWithXMLCoder">YES</bool> 10 <bool key="EncodedWithXMLCoder">YES</bool>
11 <integer value="106"/> 11 <integer value="106"/>
@@ -14,6 +14,15 @@ @@ -14,6 +14,15 @@
14 <bool key="EncodedWithXMLCoder">YES</bool> 14 <bool key="EncodedWithXMLCoder">YES</bool>
15 <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string> 15 <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
16 </object> 16 </object>
  17 + <object class="NSMutableDictionary" key="IBDocument.Metadata">
  18 + <bool key="EncodedWithXMLCoder">YES</bool>
  19 + <object class="NSArray" key="dict.sortedKeys">
  20 + <bool key="EncodedWithXMLCoder">YES</bool>
  21 + </object>
  22 + <object class="NSMutableArray" key="dict.values">
  23 + <bool key="EncodedWithXMLCoder">YES</bool>
  24 + </object>
  25 + </object>
17 <object class="NSMutableArray" key="IBDocument.RootObjects" id="1000"> 26 <object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
18 <bool key="EncodedWithXMLCoder">YES</bool> 27 <bool key="EncodedWithXMLCoder">YES</bool>
19 <object class="IBProxyObject" id="841351856"> 28 <object class="IBProxyObject" id="841351856">
@@ -40,13 +49,13 @@ @@ -40,13 +49,13 @@
40 <object class="IBUITabBarController" id="1034742383"> 49 <object class="IBUITabBarController" id="1034742383">
41 <object class="IBUISimulatedTabBarMetrics" key="IBUISimulatedBottomBarMetrics"/> 50 <object class="IBUISimulatedTabBarMetrics" key="IBUISimulatedBottomBarMetrics"/>
42 <object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/> 51 <object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
43 - <object class="IBUIViewController" key="IBUISelectedViewController" id="268481961"> 52 + <object class="IBUIViewController" key="IBUISelectedViewController" id="629097222">
44 - <object class="IBUITabBarItem" key="IBUITabBarItem" id="807309489"> 53 + <object class="IBUITabBarItem" key="IBUITabBarItem" id="859844916">
45 - <string key="IBUITitle">Queue</string> 54 + <string key="IBUITitle">Upload</string>
46 <reference key="IBUITabBar"/> 55 <reference key="IBUITabBar"/>
47 </object> 56 </object>
48 <reference key="IBUIParentViewController" ref="1034742383"/> 57 <reference key="IBUIParentViewController" ref="1034742383"/>
49 - <string key="IBUINibName">Queue</string> 58 + <string key="IBUINibName">UploadProgress</string>
50 </object> 59 </object>
51 <object class="NSMutableArray" key="IBUIViewControllers"> 60 <object class="NSMutableArray" key="IBUIViewControllers">
52 <bool key="EncodedWithXMLCoder">YES</bool> 61 <bool key="EncodedWithXMLCoder">YES</bool>
@@ -58,7 +67,15 @@ @@ -58,7 +67,15 @@
58 <reference key="IBUIParentViewController" ref="1034742383"/> 67 <reference key="IBUIParentViewController" ref="1034742383"/>
59 <string key="IBUINibName">Synchronous</string> 68 <string key="IBUINibName">Synchronous</string>
60 </object> 69 </object>
61 - <reference ref="268481961"/> 70 + <object class="IBUIViewController" id="268481961">
  71 + <object class="IBUITabBarItem" key="IBUITabBarItem" id="807309489">
  72 + <string key="IBUITitle">Queue</string>
  73 + <reference key="IBUITabBar"/>
  74 + </object>
  75 + <reference key="IBUIParentViewController" ref="1034742383"/>
  76 + <string key="IBUINibName">Queue</string>
  77 + </object>
  78 + <reference ref="629097222"/>
62 </object> 79 </object>
63 <object class="IBUITabBar" key="IBUITabBar" id="795333663"> 80 <object class="IBUITabBar" key="IBUITabBar" id="795333663">
64 <nil key="NSNextResponder"/> 81 <nil key="NSNextResponder"/>
@@ -138,6 +155,7 @@ @@ -138,6 +155,7 @@
138 <reference ref="795333663"/> 155 <reference ref="795333663"/>
139 <reference ref="1024858337"/> 156 <reference ref="1024858337"/>
140 <reference ref="268481961"/> 157 <reference ref="268481961"/>
  158 + <reference ref="629097222"/>
141 </object> 159 </object>
142 <reference key="parent" ref="957960031"/> 160 <reference key="parent" ref="957960031"/>
143 </object> 161 </object>
@@ -179,6 +197,20 @@ @@ -179,6 +197,20 @@
179 <reference key="object" ref="532797962"/> 197 <reference key="object" ref="532797962"/>
180 <reference key="parent" ref="957960031"/> 198 <reference key="parent" ref="957960031"/>
181 </object> 199 </object>
  200 + <object class="IBObjectRecord">
  201 + <int key="objectID">124</int>
  202 + <reference key="object" ref="629097222"/>
  203 + <object class="NSMutableArray" key="children">
  204 + <bool key="EncodedWithXMLCoder">YES</bool>
  205 + <reference ref="859844916"/>
  206 + </object>
  207 + <reference key="parent" ref="1034742383"/>
  208 + </object>
  209 + <object class="IBObjectRecord">
  210 + <int key="objectID">125</int>
  211 + <reference key="object" ref="859844916"/>
  212 + <reference key="parent" ref="629097222"/>
  213 + </object>
182 </object> 214 </object>
183 </object> 215 </object>
184 <object class="NSMutableDictionary" key="flattenedProperties"> 216 <object class="NSMutableDictionary" key="flattenedProperties">
@@ -196,6 +228,7 @@ @@ -196,6 +228,7 @@
196 <string>109.IBPluginDependency</string> 228 <string>109.IBPluginDependency</string>
197 <string>110.IBPluginDependency</string> 229 <string>110.IBPluginDependency</string>
198 <string>111.IBPluginDependency</string> 230 <string>111.IBPluginDependency</string>
  231 + <string>124.CustomClassName</string>
199 <string>2.IBAttributePlaceholdersKey</string> 232 <string>2.IBAttributePlaceholdersKey</string>
200 <string>2.IBEditorWindowLastContentRect</string> 233 <string>2.IBEditorWindowLastContentRect</string>
201 <string>2.IBPluginDependency</string> 234 <string>2.IBPluginDependency</string>
@@ -215,6 +248,7 @@ @@ -215,6 +248,7 @@
215 <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string> 248 <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
216 <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string> 249 <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
217 <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string> 250 <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
  251 + <string>UploadViewController</string>
218 <object class="NSMutableDictionary"> 252 <object class="NSMutableDictionary">
219 <bool key="EncodedWithXMLCoder">YES</bool> 253 <bool key="EncodedWithXMLCoder">YES</bool>
220 <object class="NSArray" key="dict.sortedKeys"> 254 <object class="NSArray" key="dict.sortedKeys">
@@ -250,7 +284,7 @@ @@ -250,7 +284,7 @@
250 </object> 284 </object>
251 </object> 285 </object>
252 <nil key="sourceID"/> 286 <nil key="sourceID"/>
253 - <int key="maxID">123</int> 287 + <int key="maxID">125</int>
254 </object> 288 </object>
255 <object class="IBClassDescriber" key="IBDocument.Classes"> 289 <object class="IBClassDescriber" key="IBDocument.Classes">
256 <object class="NSMutableArray" key="referencedPartialClassDescriptions"> 290 <object class="NSMutableArray" key="referencedPartialClassDescriptions">
@@ -266,6 +300,7 @@ @@ -266,6 +300,7 @@
266 <bool key="EncodedWithXMLCoder">YES</bool> 300 <bool key="EncodedWithXMLCoder">YES</bool>
267 <object class="NSMutableArray" key="dict.sortedKeys"> 301 <object class="NSMutableArray" key="dict.sortedKeys">
268 <bool key="EncodedWithXMLCoder">YES</bool> 302 <bool key="EncodedWithXMLCoder">YES</bool>
  303 + <string>accurateProgress</string>
269 <string>imageView1</string> 304 <string>imageView1</string>
270 <string>imageView2</string> 305 <string>imageView2</string>
271 <string>imageView3</string> 306 <string>imageView3</string>
@@ -273,6 +308,7 @@ @@ -273,6 +308,7 @@
273 </object> 308 </object>
274 <object class="NSMutableArray" key="dict.values"> 309 <object class="NSMutableArray" key="dict.values">
275 <bool key="EncodedWithXMLCoder">YES</bool> 310 <bool key="EncodedWithXMLCoder">YES</bool>
  311 + <string>UISwitch</string>
276 <string>UIImageView</string> 312 <string>UIImageView</string>
277 <string>UIImageView</string> 313 <string>UIImageView</string>
278 <string>UIImageView</string> 314 <string>UIImageView</string>
@@ -301,6 +337,22 @@ @@ -301,6 +337,22 @@
301 </object> 337 </object>
302 </object> 338 </object>
303 <object class="IBPartialClassDescription"> 339 <object class="IBPartialClassDescription">
  340 + <string key="className">UploadViewController</string>
  341 + <string key="superclassName">UIViewController</string>
  342 + <object class="NSMutableDictionary" key="actions">
  343 + <string key="NS.key.0">performLargeUpload:</string>
  344 + <string key="NS.object.0">id</string>
  345 + </object>
  346 + <object class="NSMutableDictionary" key="outlets">
  347 + <string key="NS.key.0">progressIndicator</string>
  348 + <string key="NS.object.0">UIProgressView</string>
  349 + </object>
  350 + <object class="IBClassDescriptionSource" key="sourceIdentifier">
  351 + <string key="majorKey">IBProjectSource</string>
  352 + <string key="minorKey">UploadViewController.h</string>
  353 + </object>
  354 + </object>
  355 + <object class="IBPartialClassDescription">
304 <string key="className">iPhoneSampleAppDelegate</string> 356 <string key="className">iPhoneSampleAppDelegate</string>
305 <string key="superclassName">NSObject</string> 357 <string key="superclassName">NSObject</string>
306 <object class="NSMutableDictionary" key="outlets"> 358 <object class="NSMutableDictionary" key="outlets">
1 <?xml version="1.0" encoding="UTF-8"?> 1 <?xml version="1.0" encoding="UTF-8"?>
2 -<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="7.02"> 2 +<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="7.03">
3 <data> 3 <data>
4 <int key="IBDocument.SystemTarget">528</int> 4 <int key="IBDocument.SystemTarget">528</int>
5 - <string key="IBDocument.SystemVersion">9F33</string> 5 + <string key="IBDocument.SystemVersion">9G55</string>
6 - <string key="IBDocument.InterfaceBuilderVersion">672</string> 6 + <string key="IBDocument.InterfaceBuilderVersion">677</string>
7 - <string key="IBDocument.AppKitVersion">949.34</string> 7 + <string key="IBDocument.AppKitVersion">949.43</string>
8 - <string key="IBDocument.HIToolboxVersion">352.00</string> 8 + <string key="IBDocument.HIToolboxVersion">353.00</string>
9 <object class="NSMutableArray" key="IBDocument.EditedObjectIDs"> 9 <object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
10 <bool key="EncodedWithXMLCoder">YES</bool> 10 <bool key="EncodedWithXMLCoder">YES</bool>
11 <integer value="1"/> 11 <integer value="1"/>
@@ -14,6 +14,15 @@ @@ -14,6 +14,15 @@
14 <bool key="EncodedWithXMLCoder">YES</bool> 14 <bool key="EncodedWithXMLCoder">YES</bool>
15 <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string> 15 <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
16 </object> 16 </object>
  17 + <object class="NSMutableDictionary" key="IBDocument.Metadata">
  18 + <bool key="EncodedWithXMLCoder">YES</bool>
  19 + <object class="NSArray" key="dict.sortedKeys">
  20 + <bool key="EncodedWithXMLCoder">YES</bool>
  21 + </object>
  22 + <object class="NSMutableArray" key="dict.values">
  23 + <bool key="EncodedWithXMLCoder">YES</bool>
  24 + </object>
  25 + </object>
17 <object class="NSMutableArray" key="IBDocument.RootObjects" id="1000"> 26 <object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
18 <bool key="EncodedWithXMLCoder">YES</bool> 27 <bool key="EncodedWithXMLCoder">YES</bool>
19 <object class="IBProxyObject" id="372490531"> 28 <object class="IBProxyObject" id="372490531">
@@ -237,9 +246,9 @@ @@ -237,9 +246,9 @@
237 <reference ref="138477738"/> 246 <reference ref="138477738"/>
238 <reference ref="496427125"/> 247 <reference ref="496427125"/>
239 <reference ref="602749642"/> 248 <reference ref="602749642"/>
240 - <reference ref="963091686"/>  
241 <reference ref="365204290"/> 249 <reference ref="365204290"/>
242 <reference ref="104706742"/> 250 <reference ref="104706742"/>
  251 + <reference ref="963091686"/>
243 </object> 252 </object>
244 <reference key="parent" ref="360949347"/> 253 <reference key="parent" ref="360949347"/>
245 </object> 254 </object>
@@ -317,7 +326,7 @@ @@ -317,7 +326,7 @@
317 <bool key="EncodedWithXMLCoder">YES</bool> 326 <bool key="EncodedWithXMLCoder">YES</bool>
318 <string>QueueViewController</string> 327 <string>QueueViewController</string>
319 <string>UIResponder</string> 328 <string>UIResponder</string>
320 - <string>{{901, 368}, {320, 480}}</string> 329 + <string>{{639, 368}, {320, 480}}</string>
321 <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string> 330 <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
322 <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string> 331 <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
323 <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string> 332 <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
1 <?xml version="1.0" encoding="UTF-8"?> 1 <?xml version="1.0" encoding="UTF-8"?>
2 -<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="7.02"> 2 +<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="7.03">
3 <data> 3 <data>
4 <int key="IBDocument.SystemTarget">528</int> 4 <int key="IBDocument.SystemTarget">528</int>
5 - <string key="IBDocument.SystemVersion">9F33</string> 5 + <string key="IBDocument.SystemVersion">9G55</string>
6 - <string key="IBDocument.InterfaceBuilderVersion">672</string> 6 + <string key="IBDocument.InterfaceBuilderVersion">677</string>
7 - <string key="IBDocument.AppKitVersion">949.34</string> 7 + <string key="IBDocument.AppKitVersion">949.43</string>
8 - <string key="IBDocument.HIToolboxVersion">352.00</string> 8 + <string key="IBDocument.HIToolboxVersion">353.00</string>
9 <object class="NSMutableArray" key="IBDocument.EditedObjectIDs"> 9 <object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
10 <bool key="EncodedWithXMLCoder">YES</bool> 10 <bool key="EncodedWithXMLCoder">YES</bool>
11 <integer value="1"/> 11 <integer value="1"/>
@@ -14,6 +14,15 @@ @@ -14,6 +14,15 @@
14 <bool key="EncodedWithXMLCoder">YES</bool> 14 <bool key="EncodedWithXMLCoder">YES</bool>
15 <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string> 15 <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
16 </object> 16 </object>
  17 + <object class="NSMutableDictionary" key="IBDocument.Metadata">
  18 + <bool key="EncodedWithXMLCoder">YES</bool>
  19 + <object class="NSArray" key="dict.sortedKeys">
  20 + <bool key="EncodedWithXMLCoder">YES</bool>
  21 + </object>
  22 + <object class="NSMutableArray" key="dict.values">
  23 + <bool key="EncodedWithXMLCoder">YES</bool>
  24 + </object>
  25 + </object>
17 <object class="NSMutableArray" key="IBDocument.RootObjects" id="1000"> 26 <object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
18 <bool key="EncodedWithXMLCoder">YES</bool> 27 <bool key="EncodedWithXMLCoder">YES</bool>
19 <object class="IBProxyObject" id="372490531"> 28 <object class="IBProxyObject" id="372490531">
@@ -97,7 +106,7 @@ YSB0aHJlYWQuA</string> @@ -97,7 +106,7 @@ YSB0aHJlYWQuA</string>
97 <bool key="IBUICanCancelContentTouches">NO</bool> 106 <bool key="IBUICanCancelContentTouches">NO</bool>
98 <bool key="IBUIBouncesZoom">NO</bool> 107 <bool key="IBUIBouncesZoom">NO</bool>
99 <bool key="IBUIEditable">NO</bool> 108 <bool key="IBUIEditable">NO</bool>
100 - <string key="IBUIText"/> 109 + <string key="IBUIText">HTML source will be here</string>
101 <reference key="IBUIFont" ref="467718481"/> 110 <reference key="IBUIFont" ref="467718481"/>
102 </object> 111 </object>
103 </object> 112 </object>
@@ -208,7 +217,7 @@ YSB0aHJlYWQuA</string> @@ -208,7 +217,7 @@ YSB0aHJlYWQuA</string>
208 <bool key="EncodedWithXMLCoder">YES</bool> 217 <bool key="EncodedWithXMLCoder">YES</bool>
209 <string>SynchronousViewController</string> 218 <string>SynchronousViewController</string>
210 <string>UIResponder</string> 219 <string>UIResponder</string>
211 - <string>{{714, 372}, {320, 480}}</string> 220 + <string>{{639, 372}, {320, 480}}</string>
212 <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string> 221 <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
213 <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string> 222 <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
214 <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string> 223 <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
This diff is collapsed. Click to expand it.