|
@@ -95,6 +95,7 @@ typedef void (^AFURLSessionTaskCompletionHandler)(NSURLResponse *response, id re
|
|
|
|
|
|
@interface AFURLSessionManagerTaskDelegate : NSObject <NSURLSessionTaskDelegate, NSURLSessionDataDelegate, NSURLSessionDownloadDelegate>
|
|
|
@property (nonatomic, weak) AFURLSessionManager *manager;
|
|
|
+@property (nonatomic, strong) id <AFURLResponseSerialization> responseSerializer;
|
|
|
@property (nonatomic, strong) NSMutableData *mutableData;
|
|
|
@property (nonatomic, strong) NSProgress *uploadProgress;
|
|
|
@property (nonatomic, strong) NSProgress *downloadProgress;
|
|
@@ -114,6 +115,7 @@ typedef void (^AFURLSessionTaskCompletionHandler)(NSURLResponse *response, id re
|
|
|
{
|
|
|
AFURLSessionManagerTaskDelegate *delegate = [[self alloc] init];
|
|
|
delegate.manager = manager;
|
|
|
+ delegate.responseSerializer = manager.responseSerializer;
|
|
|
delegate.completionHandler = completionHandler;
|
|
|
|
|
|
return delegate;
|
|
@@ -163,7 +165,7 @@ didCompleteWithError:(NSError *)error
|
|
|
__block id responseObject = nil;
|
|
|
|
|
|
__block NSMutableDictionary *userInfo = [NSMutableDictionary dictionary];
|
|
|
- userInfo[AFNetworkingTaskDidCompleteResponseSerializerKey] = manager.responseSerializer;
|
|
|
+ userInfo[AFNetworkingTaskDidCompleteResponseSerializerKey] = self.responseSerializer;
|
|
|
|
|
|
if (self.downloadFileURL) {
|
|
|
userInfo[AFNetworkingTaskDidCompleteAssetPathKey] = self.downloadFileURL;
|
|
@@ -186,7 +188,7 @@ didCompleteWithError:(NSError *)error
|
|
|
} else {
|
|
|
dispatch_async(url_session_manager_processing_queue(), ^{
|
|
|
NSError *serializationError = nil;
|
|
|
- responseObject = [manager.responseSerializer responseObjectForResponse:task.response data:[NSData dataWithData:self.mutableData] error:&serializationError];
|
|
|
+ responseObject = [self.responseSerializer responseObjectForResponse:task.response data:[NSData dataWithData:self.mutableData] error:&serializationError];
|
|
|
|
|
|
if (self.downloadFileURL) {
|
|
|
responseObject = self.downloadFileURL;
|
|
@@ -351,6 +353,7 @@ expectedTotalBytes:(int64_t)expectedTotalBytes {
|
|
|
NSParameterAssert(delegate);
|
|
|
|
|
|
[self.lock lock];
|
|
|
+ [task addObserver:self forKeyPath:NSStringFromSelector(@selector(state)) options:NSKeyValueObservingOptionOld|NSKeyValueObservingOptionNew context:AFTaskStateChangedContext];
|
|
|
self.mutableTaskDelegatesKeyedByTaskIdentifier[@(task.taskIdentifier)] = delegate;
|
|
|
[self.lock unlock];
|
|
|
}
|
|
@@ -359,6 +362,7 @@ expectedTotalBytes:(int64_t)expectedTotalBytes {
|
|
|
NSParameterAssert(task);
|
|
|
|
|
|
[self.lock lock];
|
|
|
+ [task removeObserver:self forKeyPath:NSStringFromSelector(@selector(state)) context:AFTaskStateChangedContext];
|
|
|
[self.mutableTaskDelegatesKeyedByTaskIdentifier removeObjectForKey:@(task.taskIdentifier)];
|
|
|
[self.lock unlock];
|
|
|
}
|
|
@@ -437,8 +441,6 @@ expectedTotalBytes:(int64_t)expectedTotalBytes {
|
|
|
AFURLSessionManagerTaskDelegate *delegate = [AFURLSessionManagerTaskDelegate delegateForManager:self completionHandler:completionHandler];
|
|
|
[self setDelegate:delegate forTask:dataTask];
|
|
|
|
|
|
- [dataTask addObserver:self forKeyPath:@"state" options:NSKeyValueObservingOptionOld|NSKeyValueObservingOptionNew context:AFTaskStateChangedContext];
|
|
|
-
|
|
|
return dataTask;
|
|
|
}
|
|
|
|
|
@@ -502,8 +504,6 @@ expectedTotalBytes:(int64_t)expectedTotalBytes {
|
|
|
}
|
|
|
|
|
|
[self setDelegate:delegate forTask:uploadTask];
|
|
|
-
|
|
|
- [uploadTask addObserver:self forKeyPath:@"state" options:NSKeyValueObservingOptionOld|NSKeyValueObservingOptionNew context:AFTaskStateChangedContext];
|
|
|
|
|
|
return uploadTask;
|
|
|
}
|
|
@@ -552,8 +552,6 @@ expectedTotalBytes:(int64_t)expectedTotalBytes {
|
|
|
|
|
|
[self setDelegate:delegate forTask:downloadTask];
|
|
|
|
|
|
- [downloadTask addObserver:self forKeyPath:@"state" options:NSKeyValueObservingOptionOld|NSKeyValueObservingOptionNew context:AFTaskStateChangedContext];
|
|
|
-
|
|
|
return downloadTask;
|
|
|
}
|
|
|
|
|
@@ -763,8 +761,6 @@ didCompleteWithError:(NSError *)error
|
|
|
}
|
|
|
|
|
|
[self removeDelegateForTask:task];
|
|
|
-
|
|
|
- [task removeObserver:self forKeyPath:@"state" context:AFTaskStateChangedContext];
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -794,12 +790,8 @@ didBecomeDownloadTask:(NSURLSessionDownloadTask *)downloadTask
|
|
|
if (delegate) {
|
|
|
[self removeDelegateForTask:dataTask];
|
|
|
[self setDelegate:delegate forTask:downloadTask];
|
|
|
-
|
|
|
- [dataTask removeObserver:self forKeyPath:@"state" context:AFTaskStateChangedContext];
|
|
|
}
|
|
|
|
|
|
- [downloadTask addObserver:self forKeyPath:@"state" options:NSKeyValueObservingOptionOld|NSKeyValueObservingOptionNew context:AFTaskStateChangedContext];
|
|
|
-
|
|
|
if (self.dataTaskDidBecomeDownloadTask) {
|
|
|
self.dataTaskDidBecomeDownloadTask(session, dataTask, downloadTask);
|
|
|
}
|