123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276 |
- /*
- * 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,
- /**
- * gif download
- */
- SDWebImageDownloaderGifIncluded = 1 << 9
- };
- 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 `NSOperation` and conforms to `SDWebImageDownloaderOperationInterface`.
- * Default is `SDWebImageDownloaderOperation`.
- * Can be used each time SDWebImage constructs a request
- * operation to download an image.
- *
- * @param operationClass The subclass of `NSOperation` and conforms to `SDWebImageDownloaderOperationInterface`.
- * Default is `SDWebImageDownloaderOperation`, 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
|