/*
|
* This file is part of the SDWebImage package.
|
* (c) Olivier Poitrey <rs@dailymotion.com>
|
*
|
* For the full copyright and license information, please view the LICENSE
|
* file that was distributed with this source code.
|
*/
|
|
#import <Foundation/Foundation.h>
|
#import "SDWebImageCompat.h"
|
#import "SDWebImageOperation.h"
|
|
typedef NS_OPTIONS(NSUInteger, SDWebImageDownloaderOptions) {
|
/**
|
* Put the download in the low queue priority and task priority.
|
*/
|
SDWebImageDownloaderLowPriority = 1 << 0,
|
|
/**
|
* This flag enables progressive download, the image is displayed progressively during download as a browser would do.
|
*/
|
SDWebImageDownloaderProgressiveDownload = 1 << 1,
|
|
/**
|
* By default, request prevent the use of NSURLCache. With this flag, NSURLCache
|
* is used with default policies.
|
*/
|
SDWebImageDownloaderUseNSURLCache = 1 << 2,
|
|
/**
|
* Call completion block with nil image/imageData if the image was read from NSURLCache
|
* (to be combined with `SDWebImageDownloaderUseNSURLCache`).
|
*/
|
SDWebImageDownloaderIgnoreCachedResponse = 1 << 3,
|
|
/**
|
* In iOS 4+, continue the download of the image if the app goes to background. This is achieved by asking the system for
|
* extra time in background to let the request finish. If the background task expires the operation will be cancelled.
|
*/
|
SDWebImageDownloaderContinueInBackground = 1 << 4,
|
|
/**
|
* Handles cookies stored in NSHTTPCookieStore by setting
|
* NSMutableURLRequest.HTTPShouldHandleCookies = YES;
|
*/
|
SDWebImageDownloaderHandleCookies = 1 << 5,
|
|
/**
|
* Enable to allow untrusted SSL certificates.
|
* Useful for testing purposes. Use with caution in production.
|
*/
|
SDWebImageDownloaderAllowInvalidSSLCertificates = 1 << 6,
|
|
/**
|
* Put the download in the high queue priority and task priority.
|
*/
|
SDWebImageDownloaderHighPriority = 1 << 7,
|
|
/**
|
* Scale down the image
|
*/
|
SDWebImageDownloaderScaleDownLargeImages = 1 << 8,
|
};
|
|
typedef NS_ENUM(NSInteger, SDWebImageDownloaderExecutionOrder) {
|
/**
|
* Default value. All download operations will execute in queue style (first-in-first-out).
|
*/
|
SDWebImageDownloaderFIFOExecutionOrder,
|
|
/**
|
* All download operations will execute in stack style (last-in-first-out).
|
*/
|
SDWebImageDownloaderLIFOExecutionOrder
|
};
|
|
FOUNDATION_EXPORT NSString * _Nonnull const SDWebImageDownloadStartNotification;
|
FOUNDATION_EXPORT NSString * _Nonnull const SDWebImageDownloadStopNotification;
|
|
typedef void(^SDWebImageDownloaderProgressBlock)(NSInteger receivedSize, NSInteger expectedSize, NSURL * _Nullable targetURL);
|
|
typedef void(^SDWebImageDownloaderCompletedBlock)(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, BOOL finished);
|
|
typedef NSDictionary<NSString *, NSString *> SDHTTPHeadersDictionary;
|
typedef NSMutableDictionary<NSString *, NSString *> SDHTTPHeadersMutableDictionary;
|
|
typedef SDHTTPHeadersDictionary * _Nullable (^SDWebImageDownloaderHeadersFilterBlock)(NSURL * _Nullable url, SDHTTPHeadersDictionary * _Nullable headers);
|
|
/**
|
* A token associated with each download. Can be used to cancel a download
|
*/
|
@interface SDWebImageDownloadToken : NSObject <SDWebImageOperation>
|
|
/**
|
The download's URL. This should be readonly and you should not modify
|
*/
|
@property (nonatomic, strong, nullable) NSURL *url;
|
/**
|
The cancel token taken from `addHandlersForProgress:completed`. This should be readonly and you should not modify
|
@note use `-[SDWebImageDownloadToken cancel]` to cancel the token
|
*/
|
@property (nonatomic, strong, nullable) id downloadOperationCancelToken;
|
|
@end
|
|
|
/**
|
* Asynchronous downloader dedicated and optimized for image loading.
|
*/
|
@interface SDWebImageDownloader : NSObject
|
|
/**
|
* Decompressing images that are downloaded and cached can improve performance but can consume lot of memory.
|
* Defaults to YES. Set this to NO if you are experiencing a crash due to excessive memory consumption.
|
*/
|
@property (assign, nonatomic) BOOL shouldDecompressImages;
|
|
/**
|
* The maximum number of concurrent downloads
|
*/
|
@property (assign, nonatomic) NSInteger maxConcurrentDownloads;
|
|
/**
|
* Shows the current amount of downloads that still need to be downloaded
|
*/
|
@property (readonly, nonatomic) NSUInteger currentDownloadCount;
|
|
/**
|
* The timeout value (in seconds) for the download operation. Default: 15.0.
|
*/
|
@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`.
|
*/
|
@property (assign, nonatomic) SDWebImageDownloaderExecutionOrder executionOrder;
|
|
/**
|
* Singleton method, returns the shared instance
|
*
|
* @return global shared instance of downloader class
|
*/
|
+ (nonnull instancetype)sharedDownloader;
|
|
/**
|
* Set the default URL credential to be set for request operations.
|
*/
|
@property (strong, nonatomic, nullable) NSURLCredential *urlCredential;
|
|
/**
|
* Set username
|
*/
|
@property (strong, nonatomic, nullable) NSString *username;
|
|
/**
|
* Set password
|
*/
|
@property (strong, nonatomic, nullable) NSString *password;
|
|
/**
|
* Set filter to pick headers for downloading image HTTP request.
|
*
|
* This block will be invoked for each downloading image request, returned
|
* NSDictionary will be used as headers in corresponding HTTP request.
|
*/
|
@property (nonatomic, copy, nullable) SDWebImageDownloaderHeadersFilterBlock headersFilter;
|
|
/**
|
* Creates an instance of a downloader with specified session configuration.
|
* @note `timeoutIntervalForRequest` is going to be overwritten.
|
* @return new instance of downloader class
|
*/
|
- (nonnull instancetype)initWithSessionConfiguration:(nullable NSURLSessionConfiguration *)sessionConfiguration NS_DESIGNATED_INITIALIZER;
|
|
/**
|
* Set a value for a HTTP header to be appended to each download HTTP request.
|
*
|
* @param value The value for the header field. Use `nil` value to remove the header.
|
* @param field The name of the header field to set.
|
*/
|
- (void)setValue:(nullable NSString *)value forHTTPHeaderField:(nullable NSString *)field;
|
|
/**
|
* Returns the value of the specified HTTP header field.
|
*
|
* @return The value associated with the header field field, or `nil` if there is no corresponding header field.
|
*/
|
- (nullable NSString *)valueForHTTPHeaderField:(nullable NSString *)field;
|
|
/**
|
* Sets a subclass of `SDWebImageDownloaderOperation` as the default
|
* `NSOperation` to be used each time SDWebImage constructs a request
|
* operation to download an image.
|
*
|
* @param operationClass The subclass of `SDWebImageDownloaderOperation` to set
|
* as default. Passing `nil` will revert to `SDWebImageDownloaderOperation`.
|
*/
|
- (void)setOperationClass:(nullable Class)operationClass;
|
|
/**
|
* Creates a SDWebImageDownloader async downloader instance with a given URL
|
*
|
* The delegate will be informed when the image is finish downloaded or an error has happen.
|
*
|
* @see SDWebImageDownloaderDelegate
|
*
|
* @param url The URL to the image to download
|
* @param options The options to be used for this download
|
* @param progressBlock A block called repeatedly while the image is downloading
|
* @note the progress block is executed on a background queue
|
* @param completedBlock A block called once the download is completed.
|
* If the download succeeded, the image parameter is set, in case of error,
|
* error parameter is set with the error. The last parameter is always YES
|
* if SDWebImageDownloaderProgressiveDownload isn't use. With the
|
* SDWebImageDownloaderProgressiveDownload option, this block is called
|
* repeatedly with the partial image object and the finished argument set to NO
|
* before to be called a last time with the full image and finished argument
|
* set to YES. In case of error, the finished argument is always YES.
|
*
|
* @return A token (SDWebImageDownloadToken) that can be passed to -cancel: to cancel this operation
|
*/
|
- (nullable SDWebImageDownloadToken *)downloadImageWithURL:(nullable NSURL *)url
|
options:(SDWebImageDownloaderOptions)options
|
progress:(nullable SDWebImageDownloaderProgressBlock)progressBlock
|
completed:(nullable SDWebImageDownloaderCompletedBlock)completedBlock;
|
|
/**
|
* Cancels a download that was previously queued using -downloadImageWithURL:options:progress:completed:
|
*
|
* @param token The token received from -downloadImageWithURL:options:progress:completed: that should be canceled.
|
*/
|
- (void)cancel:(nullable SDWebImageDownloadToken *)token;
|
|
/**
|
* Sets the download queue suspension state
|
*/
|
- (void)setSuspended:(BOOL)suspended;
|
|
/**
|
* Cancels all download operations in the queue
|
*/
|
- (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;
|
|
/**
|
* Invalidates the managed session, optionally canceling pending operations.
|
* @note If you use custom downloader instead of the shared downloader, you need call this method when you do not use it to avoid memory leak
|
* @param cancelPendingOperations Whether or not to cancel pending operations.
|
* @note Calling this method on the shared downloader has no effect.
|
*/
|
- (void)invalidateSessionAndCancel:(BOOL)cancelPendingOperations;
|
|
@end
|