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:
Родитель
42cf8a9241
Коммит
7d15a6be2c
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче