Remove all calls to bridge.imageLoader [1/N]

Summary: We no longer want to access RCTImageLoader from the bridge category. Instead, let's use the `moduleForClass` API.

Reviewed By: shergin

Differential Revision: D16389113

fbshipit-source-id: c638f4b9851698afc53aaaa2b302d21cc19f76e7
This commit is contained in:
Peter Argany 2019-07-22 11:06:53 -07:00 коммит произвёл Facebook Github Bot
Родитель 42cf8a9241
Коммит 7d15a6be2c
6 изменённых файлов: 116 добавлений и 85 удалений

Просмотреть файл

@ -141,7 +141,7 @@ RCT_EXPORT_METHOD(saveToCameraRoll:(NSURLRequest *)request
inputURI = request.URL; inputURI = request.URL;
saveBlock(); saveBlock();
} else { } else {
[self.bridge.imageLoader loadImageWithURLRequest:request callback:^(NSError *error, UIImage *image) { [[self.bridge moduleForClass:[RCTImageLoader class]] loadImageWithURLRequest:request callback:^(NSError *error, UIImage *image) {
if (error) { if (error) {
reject(kErrorUnableToLoad, nil, error); reject(kErrorUnableToLoad, nil, error);
return; return;

Просмотреть файл

@ -43,38 +43,39 @@ RCT_EXPORT_METHOD(cropImage:(NSURLRequest *)imageRequest
[RCTConvert CGSize:cropData[@"size"]] [RCTConvert CGSize:cropData[@"size"]]
}; };
[_bridge.imageLoader loadImageWithURLRequest:imageRequest callback:^(NSError *error, UIImage *image) { [[_bridge moduleForClass:[RCTImageLoader class]]
if (error) { loadImageWithURLRequest:imageRequest callback:^(NSError *error, UIImage *image) {
errorCallback(error); if (error) {
return; errorCallback(error);
} return;
}
// Crop image // Crop image
CGSize targetSize = rect.size; CGSize targetSize = rect.size;
CGRect targetRect = {{-rect.origin.x, -rect.origin.y}, image.size}; CGRect targetRect = {{-rect.origin.x, -rect.origin.y}, image.size};
CGAffineTransform transform = RCTTransformFromTargetRect(image.size, targetRect); CGAffineTransform transform = RCTTransformFromTargetRect(image.size, targetRect);
UIImage *croppedImage = RCTTransformImage(image, targetSize, image.scale, transform); UIImage *croppedImage = RCTTransformImage(image, targetSize, image.scale, transform);
// Scale image // Scale image
if (cropData[@"displaySize"]) { if (cropData[@"displaySize"]) {
targetSize = [RCTConvert CGSize:cropData[@"displaySize"]]; // in pixels targetSize = [RCTConvert CGSize:cropData[@"displaySize"]]; // in pixels
RCTResizeMode resizeMode = [RCTConvert RCTResizeMode:cropData[@"resizeMode"] ?: @"contain"]; RCTResizeMode resizeMode = [RCTConvert RCTResizeMode:cropData[@"resizeMode"] ?: @"contain"];
targetRect = RCTTargetRect(croppedImage.size, targetSize, 1, resizeMode); targetRect = RCTTargetRect(croppedImage.size, targetSize, 1, resizeMode);
transform = RCTTransformFromTargetRect(croppedImage.size, targetRect); transform = RCTTransformFromTargetRect(croppedImage.size, targetRect);
croppedImage = RCTTransformImage(croppedImage, targetSize, image.scale, transform); croppedImage = RCTTransformImage(croppedImage, targetSize, image.scale, transform);
} }
// Store image // Store image
[self->_bridge.imageStoreManager storeImage:croppedImage withBlock:^(NSString *croppedImageTag) { [self->_bridge.imageStoreManager storeImage:croppedImage withBlock:^(NSString *croppedImageTag) {
if (!croppedImageTag) { if (!croppedImageTag) {
NSString *errorMessage = @"Error storing cropped image in RCTImageStoreManager"; NSString *errorMessage = @"Error storing cropped image in RCTImageStoreManager";
RCTLogWarn(@"%@", errorMessage); RCTLogWarn(@"%@", errorMessage);
errorCallback(RCTErrorWithMessage(errorMessage)); errorCallback(RCTErrorWithMessage(errorMessage));
return; return;
} }
successCallback(@[croppedImageTag]); successCallback(@[croppedImageTag]);
}]; }];
}]; }];
} }
@end @end

Просмотреть файл

@ -87,7 +87,6 @@ static NSDictionary *onLoadParamsForSource(RCTImageSource *source)
{ {
if ((self = [super initWithFrame:CGRectZero])) { if ((self = [super initWithFrame:CGRectZero])) {
_bridge = bridge; _bridge = bridge;
NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center addObserver:self [center addObserver:self
selector:@selector(clearImageIfDetached) selector:@selector(clearImageIfDetached)
@ -328,14 +327,14 @@ RCT_NOT_IMPLEMENTED(- (instancetype)initWithFrame:(CGRect)frame)
}; };
_reloadImageCancellationBlock = _reloadImageCancellationBlock =
[_bridge.imageLoader loadImageWithURLRequest:source.request [[_bridge moduleForClass:[RCTImageLoader class]] loadImageWithURLRequest:source.request
size:imageSize size:imageSize
scale:imageScale scale:imageScale
clipped:NO clipped:NO
resizeMode:_resizeMode resizeMode:_resizeMode
progressBlock:progressHandler progressBlock:progressHandler
partialLoadBlock:partialLoadHandler partialLoadBlock:partialLoadHandler
completionBlock:completionHandler]; completionBlock:completionHandler];
} else { } else {
[self clearImage]; [self clearImage];
} }

Просмотреть файл

@ -54,28 +54,30 @@ RCT_EXPORT_METHOD(getSize:(NSURLRequest *)request
successBlock:(RCTResponseSenderBlock)successBlock successBlock:(RCTResponseSenderBlock)successBlock
errorBlock:(RCTResponseErrorBlock)errorBlock) errorBlock:(RCTResponseErrorBlock)errorBlock)
{ {
[self.bridge.imageLoader getImageSizeForURLRequest:request [[self.bridge moduleForClass:[RCTImageLoader class]]
block:^(NSError *error, CGSize size) { getImageSizeForURLRequest:request
if (error) { block:^(NSError *error, CGSize size) {
errorBlock(error); if (error) {
} else { errorBlock(error);
successBlock(@[@(size.width), @(size.height)]); } else {
} successBlock(@[@(size.width), @(size.height)]);
}]; }
}];
} }
RCT_EXPORT_METHOD(getSizeWithHeaders:(RCTImageSource *)source RCT_EXPORT_METHOD(getSizeWithHeaders:(RCTImageSource *)source
resolve:(RCTPromiseResolveBlock)resolve resolve:(RCTPromiseResolveBlock)resolve
reject:(RCTPromiseRejectBlock)reject) reject:(RCTPromiseRejectBlock)reject)
{ {
[self.bridge.imageLoader getImageSizeForURLRequest:source.request [[self.bridge moduleForClass:[RCTImageLoader class]]
block:^(NSError *error, CGSize size) { getImageSizeForURLRequest:source.request
if (error) { block:^(NSError *error, CGSize size) {
reject(@"E_GET_SIZE_FAILURE", nil, error); if (error) {
return; reject(@"E_GET_SIZE_FAILURE", nil, error);
} return;
resolve(@{@"width":@(size.width),@"height":@(size.height)}); }
}]; resolve(@{@"width":@(size.width),@"height":@(size.height)});
}];
} }
RCT_EXPORT_METHOD(prefetchImage:(NSURLRequest *)request RCT_EXPORT_METHOD(prefetchImage:(NSURLRequest *)request
@ -87,21 +89,22 @@ RCT_EXPORT_METHOD(prefetchImage:(NSURLRequest *)request
return; return;
} }
[self.bridge.imageLoader loadImageWithURLRequest:request [[self.bridge moduleForClass:[RCTImageLoader class]]
callback:^(NSError *error, UIImage *image) { loadImageWithURLRequest:request
if (error) { callback:^(NSError *error, UIImage *image) {
reject(@"E_PREFETCH_FAILURE", nil, error); if (error) {
return; reject(@"E_PREFETCH_FAILURE", nil, error);
} return;
resolve(@YES); }
}]; resolve(@YES);
}];
} }
RCT_EXPORT_METHOD(queryCache:(NSArray *)requests RCT_EXPORT_METHOD(queryCache:(NSArray *)requests
resolve:(RCTPromiseResolveBlock)resolve resolve:(RCTPromiseResolveBlock)resolve
reject:(RCTPromiseRejectBlock)reject) reject:(RCTPromiseRejectBlock)reject)
{ {
resolve([self.bridge.imageLoader getImageCacheStatus:requests]); resolve([[self.bridge moduleForClass:[RCTImageLoader class]] getImageCacheStatus:requests]);
} }
@end @end

Просмотреть файл

@ -53,13 +53,20 @@ RCTDefineImageDecoder(RCTImageLoaderTestsDecoder2)
NS_VALID_UNTIL_END_OF_SCOPE RCTBridge *bridge = [[RCTBridge alloc] initWithBundleURL:_bundleURL moduleProvider:^{ return @[loader]; } launchOptions:nil]; NS_VALID_UNTIL_END_OF_SCOPE RCTBridge *bridge = [[RCTBridge alloc] initWithBundleURL:_bundleURL moduleProvider:^{ return @[loader]; } launchOptions:nil];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@"https://facebook.github.io/react-native/img/opengraph.png"]]; NSURLRequest *urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@"https://facebook.github.io/react-native/img/opengraph.png"]];
[bridge.imageLoader loadImageWithURLRequest:urlRequest size:CGSizeMake(100, 100) scale:1.0 clipped:YES resizeMode:RCTResizeModeContain progressBlock:^(int64_t progress, int64_t total) { [[bridge moduleForClass:[RCTImageLoader class]]
XCTAssertEqual(progress, 1); loadImageWithURLRequest:urlRequest
XCTAssertEqual(total, 1); size:CGSizeMake(100, 100)
} partialLoadBlock:nil completionBlock:^(NSError *loadError, id loadedImage) { scale:1.0
XCTAssertEqualObjects(loadedImage, image); clipped:YES
XCTAssertNil(loadError); resizeMode:RCTResizeModeContain
}]; progressBlock:^(int64_t progress, int64_t total) {
XCTAssertEqual(progress, 1);
XCTAssertEqual(total, 1);
}
partialLoadBlock:nil completionBlock:^(NSError *loadError, id loadedImage) {
XCTAssertEqualObjects(loadedImage, image);
XCTAssertNil(loadError);
}];
} }
- (void)testImageLoaderUsesImageURLLoaderWithHighestPriority - (void)testImageLoaderUsesImageURLLoaderWithHighestPriority
@ -84,13 +91,20 @@ RCTDefineImageDecoder(RCTImageLoaderTestsDecoder2)
NS_VALID_UNTIL_END_OF_SCOPE RCTBridge *bridge = [[RCTBridge alloc] initWithBundleURL:_bundleURL moduleProvider:^{ return @[loader1, loader2]; } launchOptions:nil]; NS_VALID_UNTIL_END_OF_SCOPE RCTBridge *bridge = [[RCTBridge alloc] initWithBundleURL:_bundleURL moduleProvider:^{ return @[loader1, loader2]; } launchOptions:nil];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@"https://facebook.github.io/react-native/img/opengraph.png"]]; NSURLRequest *urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@"https://facebook.github.io/react-native/img/opengraph.png"]];
[bridge.imageLoader loadImageWithURLRequest:urlRequest size:CGSizeMake(100, 100) scale:1.0 clipped:YES resizeMode:RCTResizeModeContain progressBlock:^(int64_t progress, int64_t total) { [[bridge moduleForClass:[RCTImageLoader class]]
XCTAssertEqual(progress, 1); loadImageWithURLRequest:urlRequest
XCTAssertEqual(total, 1); size:CGSizeMake(100, 100)
} partialLoadBlock:nil completionBlock:^(NSError *loadError, id loadedImage) { scale:1.0
XCTAssertEqualObjects(loadedImage, image); clipped:YES
XCTAssertNil(loadError); resizeMode:RCTResizeModeContain
}]; progressBlock:^(int64_t progress, int64_t total) {
XCTAssertEqual(progress, 1);
XCTAssertEqual(total, 1);
}
partialLoadBlock:nil completionBlock:^(NSError *loadError, id loadedImage) {
XCTAssertEqualObjects(loadedImage, image);
XCTAssertNil(loadError);
}];
} }
- (void)testImageDecoding - (void)testImageDecoding
@ -108,10 +122,17 @@ RCTDefineImageDecoder(RCTImageLoaderTestsDecoder2)
NS_VALID_UNTIL_END_OF_SCOPE RCTBridge *bridge = [[RCTBridge alloc] initWithBundleURL:_bundleURL moduleProvider:^{ return @[decoder]; } launchOptions:nil]; NS_VALID_UNTIL_END_OF_SCOPE RCTBridge *bridge = [[RCTBridge alloc] initWithBundleURL:_bundleURL moduleProvider:^{ return @[decoder]; } launchOptions:nil];
RCTImageLoaderCancellationBlock cancelBlock = [bridge.imageLoader decodeImageData:data size:CGSizeMake(1, 1) scale:1.0 clipped:NO resizeMode:RCTResizeModeStretch completionBlock:^(NSError *decodeError, id decodedImage) { RCTImageLoaderCancellationBlock cancelBlock =
[[bridge moduleForClass:[RCTImageLoader class]]
decodeImageData:data
size:CGSizeMake(1, 1)
scale:1.0
clipped:NO
resizeMode:RCTResizeModeStretch
completionBlock:^(NSError *decodeError, id decodedImage) {
XCTAssertEqualObjects(decodedImage, image); XCTAssertEqualObjects(decodedImage, image);
XCTAssertNil(decodeError); XCTAssertNil(decodeError);
}]; }];
XCTAssertNotNil(cancelBlock); XCTAssertNotNil(cancelBlock);
} }
@ -137,10 +158,17 @@ RCTDefineImageDecoder(RCTImageLoaderTestsDecoder2)
NS_VALID_UNTIL_END_OF_SCOPE RCTBridge *bridge = [[RCTBridge alloc] initWithBundleURL:_bundleURL moduleProvider:^{ return @[decoder1, decoder2]; } launchOptions:nil]; NS_VALID_UNTIL_END_OF_SCOPE RCTBridge *bridge = [[RCTBridge alloc] initWithBundleURL:_bundleURL moduleProvider:^{ return @[decoder1, decoder2]; } launchOptions:nil];
RCTImageLoaderCancellationBlock cancelBlock = [bridge.imageLoader decodeImageData:data size:CGSizeMake(1, 1) scale:1.0 clipped:NO resizeMode:RCTResizeModeStretch completionBlock:^(NSError *decodeError, id decodedImage) { RCTImageLoaderCancellationBlock cancelBlock =
XCTAssertEqualObjects(decodedImage, image); [[bridge moduleForClass:[RCTImageLoader class]]
XCTAssertNil(decodeError); decodeImageData:data
}]; size:CGSizeMake(1, 1)
scale:1.0
clipped:NO
resizeMode:RCTResizeModeStretch
completionBlock:^(NSError *decodeError, id decodedImage) {
XCTAssertEqualObjects(decodedImage, image);
XCTAssertNil(decodeError);
}];
XCTAssertNotNil(cancelBlock); XCTAssertNotNil(cancelBlock);
} }

Просмотреть файл

@ -251,7 +251,7 @@ using namespace facebook::react;
// * `RCTImageLoader` should be moved to `RNImageComponentView`. // * `RCTImageLoader` should be moved to `RNImageComponentView`.
// * `ReactNativeConfig` should be set by outside product code. // * `ReactNativeConfig` should be set by outside product code.
_contextContainer->insert("ReactNativeConfig", _reactNativeConfig); _contextContainer->insert("ReactNativeConfig", _reactNativeConfig);
_contextContainer->insert("RCTImageLoader", wrapManagedObject([_bridge imageLoader])); _contextContainer->insert("RCTImageLoader", wrapManagedObject([_bridge moduleForClass:[RCTImageLoader class]]));
return _contextContainer; return _contextContainer;
} }