Merge pull request #1891 from Westacular/1870_Change_NSURLSessionConfiguration
Add ability to change NSURLSessionConfiguration used by SDWebImageDownloader
This commit is contained in:
commit
4da40ac853
|
@ -119,6 +119,15 @@ typedef SDHTTPHeadersDictionary * _Nullable (^SDWebImageDownloaderHeadersFilterB
|
|||
@property (assign, nonatomic) NSTimeInterval downloadTimeout;
|
||||
|
||||
|
||||
/**
|
||||
* The configuration in use by the internal NSURLSession.
|
||||
* Mutating this object directly has no effect.
|
||||
*
|
||||
* @see createNewSessionWithConfiguration:
|
||||
*/
|
||||
@property (readonly, nonatomic, nonnull) NSURLSessionConfiguration *sessionConfiguration;
|
||||
|
||||
|
||||
/**
|
||||
* Changes download operations execution order. Default value is `SDWebImageDownloaderFIFOExecutionOrder`.
|
||||
*/
|
||||
|
@ -230,4 +239,14 @@ typedef SDHTTPHeadersDictionary * _Nullable (^SDWebImageDownloaderHeadersFilterB
|
|||
*/
|
||||
- (void)cancelAllDownloads;
|
||||
|
||||
/**
|
||||
* Forces SDWebImageDownloader to create and use a new NSURLSession that is
|
||||
* initialized with the given configuration.
|
||||
* *Note*: All existing download operations in the queue will be cancelled.
|
||||
* *Note*: `timeoutIntervalForRequest` is going to be overwritten.
|
||||
*
|
||||
* @param sessionConfiguration The configuration to use for the new NSURLSession
|
||||
*/
|
||||
- (void)createNewSessionWithConfiguration:(nonnull NSURLSessionConfiguration *)sessionConfiguration;
|
||||
|
||||
@end
|
||||
|
|
|
@ -84,20 +84,30 @@
|
|||
_barrierQueue = dispatch_queue_create("com.hackemist.SDWebImageDownloaderBarrierQueue", DISPATCH_QUEUE_CONCURRENT);
|
||||
_downloadTimeout = 15.0;
|
||||
|
||||
sessionConfiguration.timeoutIntervalForRequest = _downloadTimeout;
|
||||
|
||||
/**
|
||||
* Create the session for this task
|
||||
* We send nil as delegate queue so that the session creates a serial operation queue for performing all delegate
|
||||
* method calls and completion handler calls.
|
||||
*/
|
||||
self.session = [NSURLSession sessionWithConfiguration:sessionConfiguration
|
||||
delegate:self
|
||||
delegateQueue:nil];
|
||||
[self createNewSessionWithConfiguration:sessionConfiguration];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)createNewSessionWithConfiguration:(NSURLSessionConfiguration *)sessionConfiguration {
|
||||
[self cancelAllDownloads];
|
||||
|
||||
if (self.session) {
|
||||
[self.session invalidateAndCancel];
|
||||
}
|
||||
|
||||
sessionConfiguration.timeoutIntervalForRequest = self.downloadTimeout;
|
||||
|
||||
/**
|
||||
* Create the session for this task
|
||||
* We send nil as delegate queue so that the session creates a serial operation queue for performing all delegate
|
||||
* method calls and completion handler calls.
|
||||
*/
|
||||
self.session = [NSURLSession sessionWithConfiguration:sessionConfiguration
|
||||
delegate:self
|
||||
delegateQueue:nil];
|
||||
}
|
||||
|
||||
- (void)dealloc {
|
||||
[self.session invalidateAndCancel];
|
||||
self.session = nil;
|
||||
|
@ -131,6 +141,10 @@
|
|||
return _downloadQueue.maxConcurrentOperationCount;
|
||||
}
|
||||
|
||||
- (NSURLSessionConfiguration *)sessionConfiguration {
|
||||
return self.session.configuration;
|
||||
}
|
||||
|
||||
- (void)setOperationClass:(nullable Class)operationClass {
|
||||
if (operationClass && [operationClass isSubclassOfClass:[NSOperation class]] && [operationClass conformsToProtocol:@protocol(SDWebImageDownloaderOperationInterface)]) {
|
||||
_operationClass = operationClass;
|
||||
|
|
Loading…
Reference in New Issue