Skip to content

Commit

Permalink
Merge branch 'master' of github.com:samvermette/SVHTTPRequest
Browse files Browse the repository at this point in the history
  • Loading branch information
samvermette committed Mar 26, 2014
2 parents 801745c + 7a46baa commit da08eb4
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 19 deletions.
2 changes: 1 addition & 1 deletion SVHTTPRequest.podspec
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Pod::Spec.new do |s|
s.name = 'SVHTTPRequest'
s.version = '0.5'
s.version = '0.5.1'
s.license = 'MIT'
s.summary = 'Simple REST client for iOS and Mac.'
s.homepage = 'http://samvermette.com/310'
Expand Down
2 changes: 1 addition & 1 deletion SVHTTPRequest/SVHTTPRequest.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ typedef NSUInteger SVHTTPRequestMethod;
+ (SVHTTPRequest*)GET:(NSString*)address parameters:(NSDictionary*)parameters saveToPath:(NSString*)savePath progress:(void (^)(float progress))progressBlock completion:(SVHTTPRequestCompletionHandler)completionBlock;

+ (SVHTTPRequest*)POST:(NSString*)address parameters:(NSObject*)parameters completion:(SVHTTPRequestCompletionHandler)block;
+ (SVHTTPRequest*)POST:(NSString *)address parameters:(NSObject *)parameters progress:(void (^)(float))progressBlock completion:(void (^)(id, NSHTTPURLResponse*, NSError *))completionBlock;
+ (SVHTTPRequest*)POST:(NSString *)address parameters:(NSObject *)parameters progress:(void (^)(float))progressBlock completion:(SVHTTPRequestCompletionHandler)completionBlock;
+ (SVHTTPRequest*)PUT:(NSString*)address parameters:(NSObject*)parameters completion:(SVHTTPRequestCompletionHandler)block;

+ (SVHTTPRequest*)DELETE:(NSString*)address parameters:(NSDictionary*)parameters completion:(SVHTTPRequestCompletionHandler)block;
Expand Down
47 changes: 30 additions & 17 deletions SVHTTPRequest/SVHTTPRequest.m
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ - (NSString*)encodedURLParameterString;

typedef NSUInteger SVHTTPRequestState;

static NSUInteger taskCount = 0;
static NSInteger SVHTTPRequestTaskCount = 0;
static NSString *defaultUserAgent;
static NSTimeInterval SVHTTPRequestTimeoutInterval = 20;

Expand All @@ -48,7 +48,7 @@ @interface SVHTTPRequest ()
@property (nonatomic, readwrite) UIBackgroundTaskIdentifier backgroundTaskIdentifier;
#endif

#if __IPHONE_OS_VERSION_MIN_REQUIRED < 60000
#if !OS_OBJECT_USE_OBJC
@property (nonatomic, assign) dispatch_queue_t saveDataDispatchQueue;
@property (nonatomic, assign) dispatch_group_t saveDataDispatchGroup;
#else
Expand Down Expand Up @@ -83,7 +83,7 @@ @implementation SVHTTPRequest

- (void)dealloc {
[_operationConnection cancel];
#if __IPHONE_OS_VERSION_MIN_REQUIRED < 60000
#if !OS_OBJECT_USE_OBJC
dispatch_release(_saveDataDispatchGroup);
dispatch_release(_saveDataDispatchQueue);
#endif
Expand All @@ -103,20 +103,20 @@ - (NSUInteger)timeoutInterval {
return _timeoutInterval;
}

- (void)increaseTaskCount {
taskCount++;
- (void)increaseSVHTTPRequestTaskCount {
SVHTTPRequestTaskCount++;
[self toggleNetworkActivityIndicator];
}

- (void)decreaseTaskCount {
taskCount--;
- (void)decreaseSVHTTPRequestTaskCount {
SVHTTPRequestTaskCount = MAX(0, SVHTTPRequestTaskCount-1);
[self toggleNetworkActivityIndicator];
}

- (void)toggleNetworkActivityIndicator {
#if TARGET_OS_IPHONE
dispatch_async(dispatch_get_main_queue(), ^{
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:(taskCount > 0)];
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:(SVHTTPRequestTaskCount > 0)];
});
#endif
}
Expand Down Expand Up @@ -230,7 +230,7 @@ - (void)addParametersToRequest:(NSObject*)parameters {
NSDictionary *paramsDict = (NSDictionary*)parameters;

[paramsDict.allValues enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
if([obj isKindOfClass:[NSData class]])
if([obj isKindOfClass:[NSData class]] || [obj isKindOfClass:[NSURL class]])
hasData = YES;
else if(![obj isKindOfClass:[NSString class]] && ![obj isKindOfClass:[NSNumber class]])
[NSException raise:NSInvalidArgumentException format:@"%@ requests only accept NSString and NSNumber parameters.", self.operationRequest.HTTPMethod];
Expand All @@ -251,25 +251,38 @@ - (void)addParametersToRequest:(NSObject*)parameters {
__block int dataIdx = 0;
// add string parameters
[paramsDict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
if(![obj isKindOfClass:[NSData class]]) {
if(![obj isKindOfClass:[NSData class]] && ![obj isKindOfClass:[NSURL class]]) {
[postData appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[postData appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n", key] dataUsingEncoding:NSUTF8StringEncoding]];
[postData appendData:[[NSString stringWithFormat:@"%@", obj] dataUsingEncoding:NSUTF8StringEncoding]];
[postData appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
} else {
NSString *fileName = nil;
NSData *data = nil;
NSString *imageExtension = nil;
if ([obj isKindOfClass:[NSURL class]]) {
fileName = [obj lastPathComponent];
data = [NSData dataWithContentsOfURL:obj];
}
else {
imageExtension = [obj getImageType];
fileName = [NSString stringWithFormat:@"userfile%d%x", dataIdx, (int)[[NSDate date] timeIntervalSince1970]];
if (imageExtension != nil)
fileName = [fileName stringByAppendingPathExtension:imageExtension];
data = obj;
}

[postData appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[postData appendData:[[NSString stringWithFormat:@"Content-Disposition: attachment; name=\"%@\"; filename=\"%@\"\r\n", key, fileName] dataUsingEncoding:NSUTF8StringEncoding]];

NSString *imageExtension = [obj getImageType];
if(imageExtension != nil) {
[postData appendData:[[NSString stringWithFormat:@"Content-Disposition: attachment; name=\"%@\"; filename=\"userfile%d%x.%@\"\r\n", key,dataIdx,(int)[[NSDate date] timeIntervalSince1970],imageExtension] dataUsingEncoding:NSUTF8StringEncoding]];
[postData appendData:[[NSString stringWithFormat:@"Content-Type: image/%@\r\n\r\n",imageExtension] dataUsingEncoding:NSUTF8StringEncoding]];
[postData appendData:[[NSString stringWithFormat:@"Content-Type: image/%@\r\n\r\n",imageExtension] dataUsingEncoding:NSUTF8StringEncoding]];
}
else {
[postData appendData:[[NSString stringWithFormat:@"Content-Disposition: attachment; name=\"%@\"; filename=\"userfile%d%x\"\r\n", key,dataIdx,(int)[[NSDate date] timeIntervalSince1970]] dataUsingEncoding:NSUTF8StringEncoding]];
[postData appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
}

[postData appendData:obj];
[postData appendData:data];
[postData appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
dataIdx++;
}
Expand Down Expand Up @@ -351,7 +364,7 @@ - (void)start {
#endif

dispatch_async(dispatch_get_main_queue(), ^{
[self increaseTaskCount];
[self increaseSVHTTPRequestTaskCount];
});

if(self.operationParameters)
Expand Down Expand Up @@ -405,7 +418,7 @@ - (void)finish {
[self.operationConnection cancel];
self.operationConnection = nil;

[self decreaseTaskCount];
[self decreaseSVHTTPRequestTaskCount];

#if TARGET_OS_IPHONE
if(self.backgroundTaskIdentifier != UIBackgroundTaskInvalid) {
Expand Down

0 comments on commit da08eb4

Please sign in to comment.