Skip to content
This repository has been archived by the owner on Mar 4, 2020. It is now read-only.

Commit

Permalink
Fixed issues with download and upload tasks
Browse files Browse the repository at this point in the history
  • Loading branch information
MugunthKumar committed Dec 21, 2014
1 parent e555702 commit 456f09c
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 24 deletions.
65 changes: 41 additions & 24 deletions MKNetworkKit/MKNetworkHost.m
Expand Up @@ -39,6 +39,7 @@

@interface MKNetworkRequest (/*Private Methods*/)
@property (readwrite) NSHTTPURLResponse *response;
@property (readwrite) NSURL *downloadedURL;
@property (readwrite) NSData *responseData;
@property (readwrite) NSError *error;
@property (readwrite) MKNKRequestState state;
Expand Down Expand Up @@ -124,22 +125,15 @@ -(void) enableCacheWithDirectory:(NSString*) cacheDirectoryPath inMemoryCost:(NS

-(void) startUploadRequest:(MKNetworkRequest*) request {

NSURLSessionUploadTask *uploadTask = [self.defaultSession uploadTaskWithRequest:request.request
fromData:request.multipartFormData
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

request.responseData = data;
request.response = (NSHTTPURLResponse*) response;
request.error = error;
request.state = MKNKRequestStateCompleted;
}];

request.task = uploadTask;
request.task = [self.defaultSession uploadTaskWithRequest:request.request
fromData:request.multipartFormData];
request.state = MKNKRequestStateStarted;
}

-(void) startDownloadRequest:(MKNetworkRequest*) request {

request.task = [self.defaultSession downloadTaskWithRequest:request.request];
request.state = MKNKRequestStateStarted;
}

-(void) startRequest:(MKNetworkRequest*) request {
Expand Down Expand Up @@ -386,38 +380,61 @@ - (void)URLSession:(NSURLSession *)session
}

#pragma mark -
#pragma mark NSURLSession Progress notification delegates
#pragma mark NSURLSession (Download/Upload) Progress notification delegates

- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask
didReceiveResponse:(NSURLResponse *)response
completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler {
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task
didCompleteWithError:(NSError *)error {

[self.runningDataTasks enumerateObjectsUsingBlock:^(MKNetworkRequest *request, NSUInteger idx, BOOL *stop) {

if([request.task isEqual:dataTask]) {
[request setProgressValue:0.0f];
if([request.task isEqual:task]) {

request.responseData = nil; //FIX ME
request.response = (NSHTTPURLResponse*) task.response;
request.error = error;
request.state = MKNKRequestStateCompleted;
*stop = YES;
}
}];

completionHandler(NSURLSessionResponseAllow);
}

- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task
didSendBodyData:(int64_t)bytesSent
totalBytesSent:(int64_t)totalBytesSent
totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend {

//NSLog(@"Upload progress for %lu: %f", (unsigned long)task.taskIdentifier, ((double)totalBytesSent/(double)totalBytesExpectedToSend));
float progress = (float)(((float)totalBytesSent) / ((float)totalBytesExpectedToSend));
[self.runningDataTasks enumerateObjectsUsingBlock:^(MKNetworkRequest *request, NSUInteger idx, BOOL *stop) {

if([request.task isEqual:task]) {
[request setProgressValue:progress];
*stop = YES;
}
}];
}

- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask
didFinishDownloadingToURL:(NSURL *)location {

[self.runningDataTasks enumerateObjectsUsingBlock:^(MKNetworkRequest *request, NSUInteger idx, BOOL *stop) {

if([request.task isEqual:downloadTask]) {
request.downloadedURL = location;
request.state = MKNKRequestStateCompleted;
*stop = YES;
}
}];
}

- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask
didReceiveData:(NSData *)data {
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask
didWriteData:(int64_t)bytesWritten
totalBytesWritten:(int64_t)totalBytesWritten
totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite {

float progress = (float)(((float)[data length]) / ((float)dataTask.response.expectedContentLength));
float progress = (float)(((float)totalBytesWritten) / ((float)totalBytesExpectedToWrite));
[self.runningDataTasks enumerateObjectsUsingBlock:^(MKNetworkRequest *request, NSUInteger idx, BOOL *stop) {

if([request.task isEqual:dataTask]) {
if([request.task isEqual:downloadTask]) {
[request setProgressValue:progress];
*stop = YES;
}
Expand Down
1 change: 1 addition & 0 deletions MKNetworkKit/MKNetworkRequest.h
Expand Up @@ -78,6 +78,7 @@ typedef enum {
@property (readonly) BOOL responseAvailable;

@property (readonly) NSData *multipartFormData;
@property (readonly) NSURL *downloadedURL;
@property (readonly) NSData *responseData;
@property (readonly) NSError *error;
@property (readonly) NSURLSessionTask *task;
Expand Down
1 change: 1 addition & 0 deletions MKNetworkKit/MKNetworkRequest.m
Expand Up @@ -39,6 +39,7 @@ @interface MKNetworkRequest (/*Private Methods*/)
@property NSData *bodyData;

@property (readwrite) NSHTTPURLResponse *response;
@property (readwrite) NSURL *downloadedURL;
@property (readwrite) NSData *responseData;
@property (readwrite) NSError *error;
@property (readwrite) NSURLSessionTask *task;
Expand Down
1 change: 1 addition & 0 deletions MKNetworkKit/MKObject.m
Expand Up @@ -43,6 +43,7 @@ -(void) mappingDidComplete {
NSDictionary *classMap = @{
@"__NSCFNumber" : @"NSNumber",
@"__NSCFString" : @"NSString",
@"__NSCFBoolean" : @"BOOL",
@"__NSArrayI" : @"NSArray",
@"__NSArrayM" : @"NSMutableArray",
@"__NSDictionaryI" : @"NSDictionary",
Expand Down

0 comments on commit 456f09c

Please sign in to comment.