75 lines
3.0 KiB
Objective-C
75 lines
3.0 KiB
Objective-C
//
|
|
// YBIBDefaultWebImageMediator.m
|
|
// YBImageBrowserDemo
|
|
//
|
|
// Created by 波儿菜 on 2019/8/27.
|
|
// Copyright © 2019 杨波. All rights reserved.
|
|
//
|
|
|
|
#import "YBIBDefaultWebImageMediator.h"
|
|
#import "YBIBUtilities.h"
|
|
#if __has_include(<SDWebImage/SDWebImage.h>)
|
|
#import <SDWebImage/SDWebImage.h>
|
|
#else
|
|
#import "SDWebImage.h"
|
|
#endif
|
|
|
|
@implementation YBIBDefaultWebImageMediator
|
|
|
|
#pragma mark - <YBIBWebImageMediator>
|
|
|
|
- (id)yb_downloadImageWithURL:(NSURL *)URL requestModifier:(nullable YBIBWebImageRequestModifierBlock)requestModifier progress:(nonnull YBIBWebImageProgressBlock)progress success:(nonnull YBIBWebImageSuccessBlock)success failed:(nonnull YBIBWebImageFailedBlock)failed {
|
|
if (!URL) return nil;
|
|
|
|
SDWebImageContext *context = nil;
|
|
if (requestModifier) {
|
|
SDWebImageDownloaderRequestModifier *modifier = [SDWebImageDownloaderRequestModifier requestModifierWithBlock:requestModifier];
|
|
context = @{SDWebImageContextDownloadRequestModifier:modifier};
|
|
}
|
|
|
|
SDWebImageDownloaderOptions options = SDWebImageDownloaderLowPriority | SDWebImageDownloaderAvoidDecodeImage;
|
|
|
|
SDWebImageDownloadToken *token = [[SDWebImageDownloader sharedDownloader] downloadImageWithURL:URL options:options context:context progress:^(NSInteger receivedSize, NSInteger expectedSize, NSURL * _Nullable targetURL) {
|
|
if (progress) progress(receivedSize, expectedSize);
|
|
} completed:^(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, BOOL finished) {
|
|
if (error) {
|
|
if (failed) failed(error, finished);
|
|
} else {
|
|
if (success) success(data, finished);
|
|
}
|
|
}];
|
|
return token;
|
|
}
|
|
|
|
- (void)yb_cancelTaskWithDownloadToken:(id)token {
|
|
if (token && [token isKindOfClass:SDWebImageDownloadToken.class]) {
|
|
[((SDWebImageDownloadToken *)token) cancel];
|
|
}
|
|
}
|
|
|
|
- (void)yb_storeToDiskWithImageData:(NSData *)data forKey:(NSURL *)key {
|
|
if (!key) return;
|
|
NSString *cacheKey = [SDWebImageManager.sharedManager cacheKeyForURL:key];
|
|
if (!cacheKey) return;
|
|
|
|
YBIB_DISPATCH_ASYNC(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
|
|
[[SDImageCache sharedImageCache] storeImageDataToDisk:data forKey:cacheKey];
|
|
})
|
|
}
|
|
|
|
- (void)yb_queryCacheOperationForKey:(NSURL *)key completed:(YBIBWebImageCacheQueryCompletedBlock)completed {
|
|
#define QUERY_CACHE_FAILED if (completed) {completed(nil, nil); return;}
|
|
if (!key) QUERY_CACHE_FAILED
|
|
NSString *cacheKey = [SDWebImageManager.sharedManager cacheKeyForURL:key];
|
|
if (!cacheKey) QUERY_CACHE_FAILED
|
|
#undef QUERY_CACHE_FAILED
|
|
|
|
// 'NSData' of image must be read to ensure decoding correctly.
|
|
SDImageCacheOptions options = SDImageCacheQueryMemoryData | SDImageCacheAvoidDecodeImage;
|
|
[[SDImageCache sharedImageCache] queryCacheOperationForKey:cacheKey options:options done:^(UIImage * _Nullable image, NSData * _Nullable data, SDImageCacheType cacheType) {
|
|
if (completed) completed(image, data);
|
|
}];
|
|
}
|
|
|
|
@end
|