Make RCTLocalAssetImageLoader and RCTGIFImageDecoder TurboModule-compatible
Summary: Couldn't make RCTImageEditingManager and RCTImageStoreManager TurboModule-compatible because their specs live in fb-internal code. I will tackle them in a subsequent diff. See T54946472. Changelog: [iOS][Added] Make RCTLocalAssetImageLoader and RCTGIFImageDecoder TurboModule-compatible Reviewed By: PeteTheHeat Differential Revision: D17936483 fbshipit-source-id: 2266c9ea1ca7ecd52717d9a963e39245da312312
This commit is contained in:
Родитель
d8fda74c24
Коммит
c8701b6b36
|
@ -9,9 +9,14 @@
|
|||
|
||||
#import <ImageIO/ImageIO.h>
|
||||
#import <QuartzCore/QuartzCore.h>
|
||||
|
||||
#import <React/RCTUtils.h>
|
||||
#import <React/RCTAnimatedImage.h>
|
||||
#import <React/RCTUtils.h>
|
||||
#import <ReactCommon/RCTTurboModule.h>
|
||||
|
||||
#import "RCTImagePlugins.h"
|
||||
|
||||
@interface RCTGIFImageDecoder() <RCTTurboModule>
|
||||
@end
|
||||
|
||||
@implementation RCTGIFImageDecoder
|
||||
|
||||
|
@ -43,3 +48,7 @@ RCT_EXPORT_MODULE()
|
|||
}
|
||||
|
||||
@end
|
||||
|
||||
Class RCTGIFImageDecoderCls() {
|
||||
return RCTGIFImageDecoder.class;
|
||||
}
|
|
@ -7,8 +7,6 @@
|
|||
|
||||
#import <React/RCTImageEditingManager.h>
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
#import <React/RCTConvert.h>
|
||||
#import <React/RCTImageLoader.h>
|
||||
#import <React/RCTImageStoreManager.h>
|
||||
|
@ -16,6 +14,9 @@
|
|||
#import <React/RCTImageLoaderProtocol.h>
|
||||
#import <React/RCTLog.h>
|
||||
#import <React/RCTUtils.h>
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
#import "RCTImagePlugins.h"
|
||||
|
||||
@implementation RCTImageEditingManager
|
||||
|
||||
|
@ -79,3 +80,7 @@ RCT_EXPORT_METHOD(cropImage:(NSURLRequest *)imageRequest
|
|||
}
|
||||
|
||||
@end
|
||||
|
||||
Class RCTImageEditingManagerCls() {
|
||||
return RCTImageEditingManager.class;
|
||||
}
|
|
@ -29,7 +29,11 @@ extern "C" {
|
|||
Class RCTImageClassProvider(const char *name);
|
||||
|
||||
// Lookup functions
|
||||
Class RCTGIFImageDecoderCls(void) __attribute__((used));
|
||||
Class RCTImageEditingManagerCls(void) __attribute__((used));
|
||||
Class RCTImageLoaderCls(void) __attribute__((used));
|
||||
Class RCTImageStoreManagerCls(void) __attribute__((used));
|
||||
Class RCTLocalAssetImageLoaderCls(void) __attribute__((used));
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -18,7 +18,11 @@
|
|||
|
||||
Class RCTImageClassProvider(const char *name) {
|
||||
static std::unordered_map<std::string, Class (*)(void)> sCoreModuleClassMap = {
|
||||
{"GIFImageDecoder", RCTGIFImageDecoderCls},
|
||||
{"ImageEditingManager", RCTImageEditingManagerCls},
|
||||
{"ImageLoader", RCTImageLoaderCls},
|
||||
{"ImageStoreManager", RCTImageStoreManagerCls},
|
||||
{"LocalAssetImageLoader", RCTLocalAssetImageLoaderCls},
|
||||
};
|
||||
|
||||
auto p = sCoreModuleClassMap.find(name);
|
||||
|
|
|
@ -7,17 +7,18 @@
|
|||
|
||||
#import <React/RCTImageStoreManager.h>
|
||||
|
||||
#import <stdatomic.h>
|
||||
#import <atomic>
|
||||
#import <memory>
|
||||
|
||||
#import <ImageIO/ImageIO.h>
|
||||
#import <MobileCoreServices/UTType.h>
|
||||
|
||||
#import <React/RCTAssert.h>
|
||||
#import <React/RCTLog.h>
|
||||
#import <React/RCTUtils.h>
|
||||
|
||||
#import <React/RCTImageUtils.h>
|
||||
|
||||
#import "RCTImagePlugins.h"
|
||||
|
||||
static NSString *const RCTImageStoreURLScheme = @"rct-image-store";
|
||||
|
||||
@implementation RCTImageStoreManager
|
||||
|
@ -140,14 +141,14 @@ RCT_EXPORT_METHOD(addImageFromBase64:(NSString *)base64String
|
|||
|
||||
- (id)sendRequest:(NSURLRequest *)request withDelegate:(id<RCTURLRequestDelegate>)delegate
|
||||
{
|
||||
__block atomic_bool cancelled = ATOMIC_VAR_INIT(NO);
|
||||
__block auto cancelled = std::make_shared<std::atomic<bool>>(false);
|
||||
void (^cancellationBlock)(void) = ^{
|
||||
atomic_store(&cancelled, YES);
|
||||
cancelled->store(true);
|
||||
};
|
||||
|
||||
// Dispatch async to give caller time to cancel the request
|
||||
dispatch_async(_methodQueue, ^{
|
||||
if (atomic_load(&cancelled)) {
|
||||
if (cancelled->load()) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -238,3 +239,7 @@ RCT_EXPORT_METHOD(addImageFromBase64:(NSString *)base64String
|
|||
}
|
||||
|
||||
@end
|
||||
|
||||
Class RCTImageStoreManagerCls(void) {
|
||||
return RCTImageStoreManager.class;
|
||||
}
|
|
@ -7,9 +7,16 @@
|
|||
|
||||
#import <React/RCTLocalAssetImageLoader.h>
|
||||
|
||||
#import <stdatomic.h>
|
||||
#import <atomic>
|
||||
#import <memory>
|
||||
|
||||
#import <React/RCTUtils.h>
|
||||
#import <ReactCommon/RCTTurboModule.h>
|
||||
|
||||
#import "RCTImagePlugins.h"
|
||||
|
||||
@interface RCTLocalAssetImageLoader() <RCTTurboModule>
|
||||
@end
|
||||
|
||||
@implementation RCTLocalAssetImageLoader
|
||||
|
||||
|
@ -42,9 +49,9 @@ RCT_EXPORT_MODULE()
|
|||
partialLoadHandler:(RCTImageLoaderPartialLoadBlock)partialLoadHandler
|
||||
completionHandler:(RCTImageLoaderCompletionBlock)completionHandler
|
||||
{
|
||||
__block atomic_bool cancelled = ATOMIC_VAR_INIT(NO);
|
||||
__block auto cancelled = std::make_shared<std::atomic<bool>>(false);
|
||||
RCTExecuteOnMainQueue(^{
|
||||
if (atomic_load(&cancelled)) {
|
||||
if (cancelled->load()) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -62,8 +69,12 @@ RCT_EXPORT_MODULE()
|
|||
});
|
||||
|
||||
return ^{
|
||||
atomic_store(&cancelled, YES);
|
||||
cancelled->store(true);
|
||||
};
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
Class RCTLocalAssetImageLoaderCls(void) {
|
||||
return RCTLocalAssetImageLoader.class;
|
||||
}
|
Загрузка…
Ссылка в новой задаче