dynamsoft-capture-vision-react-native 3.4.1300 → 3.4.3010

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (198) hide show
  1. package/LICENSE +4 -4
  2. package/README.md +62 -62
  3. package/android/README.md +14 -14
  4. package/android/build.gradle +167 -163
  5. package/android/gradle.properties +20 -20
  6. package/android/settings.gradle +5 -5
  7. package/android/src/main/AndroidManifest.xml +6 -6
  8. package/android/src/main/AndroidManifest_noPackage.xml +5 -5
  9. package/android/src/main/cpp/CMakeLists.txt +21 -21
  10. package/android/src/main/cpp/ImgHO.cpp +94 -94
  11. package/android/src/main/cpp/ImgHO.h +34 -34
  12. package/android/src/main/cpp/JsiCore.cpp +296 -296
  13. package/android/src/main/cpp/JsiCore.h +51 -51
  14. package/android/src/main/cpp/JsiCvr.cpp +332 -332
  15. package/android/src/main/cpp/JsiCvr.h +54 -54
  16. package/android/src/main/cpp/JsiDbr.cpp +283 -283
  17. package/android/src/main/cpp/JsiDbr.h +26 -26
  18. package/android/src/main/cpp/JsiDce.cpp +59 -59
  19. package/android/src/main/cpp/JsiDce.h +17 -17
  20. package/android/src/main/cpp/JsiDcp.cpp +51 -51
  21. package/android/src/main/cpp/JsiDcp.h +31 -31
  22. package/android/src/main/cpp/JsiDdn.cpp +50 -50
  23. package/android/src/main/cpp/JsiDdn.h +28 -28
  24. package/android/src/main/cpp/JsiDlr.cpp +60 -60
  25. package/android/src/main/cpp/JsiDlr.h +26 -26
  26. package/android/src/main/cpp/JsiUtility.cpp +604 -604
  27. package/android/src/main/cpp/JsiUtility.h +26 -26
  28. package/android/src/main/cpp/RawBuffer.cpp +23 -23
  29. package/android/src/main/cpp/RawBuffer.h +24 -24
  30. package/android/src/main/cpp/android_log.h +14 -14
  31. package/android/src/main/dysJniLibsFor86/debug/arm64-v8a/librn_dys.so +0 -0
  32. package/android/src/main/dysJniLibsFor86/debug/armeabi-v7a/librn_dys.so +0 -0
  33. package/android/src/main/dysJniLibsFor86/debug/x86/librn_dys.so +0 -0
  34. package/android/src/main/dysJniLibsFor86/debug/x86_64/librn_dys.so +0 -0
  35. package/android/src/main/dysJniLibsFor86/release/arm64-v8a/librn_dys.so +0 -0
  36. package/android/src/main/dysJniLibsFor86/release/armeabi-v7a/librn_dys.so +0 -0
  37. package/android/src/main/dysJniLibsFor86/release/x86/librn_dys.so +0 -0
  38. package/android/src/main/dysJniLibsFor86/release/x86_64/librn_dys.so +0 -0
  39. package/android/src/main/java/com/dynamsoft/reactnativelib/CVRModule.kt +137 -137
  40. package/android/src/main/java/com/dynamsoft/reactnativelib/CameraViewManager.kt +62 -62
  41. package/android/src/main/java/com/dynamsoft/reactnativelib/DCEModule.kt +125 -125
  42. package/android/src/main/java/com/dynamsoft/reactnativelib/DynamsoftBaseModule.kt +8 -8
  43. package/android/src/main/java/com/dynamsoft/reactnativelib/ISAModule.kt +73 -73
  44. package/android/src/main/java/com/dynamsoft/reactnativelib/ImageEditorViewManager.kt +14 -14
  45. package/android/src/main/java/com/dynamsoft/reactnativelib/ImageEditorViewModule.kt +35 -35
  46. package/android/src/main/java/com/dynamsoft/reactnativelib/ImageManagerModule.kt +15 -15
  47. package/android/src/main/java/com/dynamsoft/reactnativelib/LicenseModule.kt +29 -29
  48. package/android/src/main/java/com/dynamsoft/reactnativelib/MultiCrossFilterModule.kt +83 -83
  49. package/android/src/main/java/com/dynamsoft/reactnativelib/ReactNativeDcvPackage.kt +32 -32
  50. package/android/src/main/java/com/dynamsoft/reactnativelib/VersionsModule.kt +41 -41
  51. package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/Basic.kt +44 -44
  52. package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForCore.kt +50 -50
  53. package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForCvr.kt +129 -129
  54. package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForDBR.kt +157 -157
  55. package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForDCE.kt +110 -110
  56. package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForDCP.kt +49 -49
  57. package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForDDN.kt +85 -85
  58. package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForDLR.kt +72 -72
  59. package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ImageUtil.kt +58 -58
  60. package/android/src/main/java/com/dynamsoft/reactnativelib/core/ImageSourceAdapterModuleImpl.kt +120 -120
  61. package/android/src/main/java/com/dynamsoft/reactnativelib/cvr/CaptureVisionRouterModuleImpl.kt +306 -306
  62. package/android/src/main/java/com/dynamsoft/reactnativelib/dce/CameraEnhancerModuleImpl.kt +247 -247
  63. package/android/src/main/java/com/dynamsoft/reactnativelib/dce/CameraLifeCycleOwner.java +14 -14
  64. package/android/src/main/java/com/dynamsoft/reactnativelib/dce/CameraViewManagerImpl.kt +77 -77
  65. package/android/src/main/java/com/dynamsoft/reactnativelib/dce/ImageEditorViewManagerImpl.kt +15 -15
  66. package/android/src/main/java/com/dynamsoft/reactnativelib/dce/ImageEditorViewModuleImpl.kt +110 -110
  67. package/android/src/main/java/com/dynamsoft/reactnativelib/dce/RNCameraView.kt +20 -20
  68. package/android/src/main/java/com/dynamsoft/reactnativelib/dce/RNImageEditorView.kt +19 -19
  69. package/android/src/main/java/com/dynamsoft/reactnativelib/license/LicenseModuleImpl.kt +39 -39
  70. package/android/src/main/java/com/dynamsoft/reactnativelib/utility/ImageManagerModuleImpl.kt +120 -120
  71. package/android/src/main/java/com/dynamsoft/reactnativelib/utility/MultiCrossFilterModuleImpl.kt +111 -111
  72. package/app.plugin.js +21 -21
  73. package/dynamsoft-capture-vision-react-native.podspec +24 -24
  74. package/ios/CPP/DSImageData+HostObject.h +18 -18
  75. package/ios/CPP/DSImageData+HostObject.mm +38 -38
  76. package/ios/CPP/ImageDataHostObject.cpp +87 -87
  77. package/ios/CPP/ImageDataHostObject.hpp +35 -35
  78. package/ios/CPP/MutableRawBuffer.cpp +23 -23
  79. package/ios/CPP/MutableRawBuffer.hpp +23 -23
  80. package/ios/CPP/RNDynamsoft+JSI.h +22 -22
  81. package/ios/CPP/RNDynamsoft+JSI.mm +303 -303
  82. package/ios/CPP/RNDynamsoft+Json.h +93 -93
  83. package/ios/CPP/RNDynamsoft+Json.m +733 -733
  84. package/ios/CPP/YeetJSIUtils.h +56 -56
  85. package/ios/CPP/YeetJSIUtils.mm +208 -208
  86. package/ios/RNDynamsoftCameraView.h +31 -31
  87. package/ios/RNDynamsoftCameraView.m +108 -108
  88. package/ios/RNDynamsoftCameraViewManager.h +14 -14
  89. package/ios/RNDynamsoftCameraViewManager.m +195 -195
  90. package/ios/RNDynamsoftCaptureVisionRouter.h +18 -18
  91. package/ios/RNDynamsoftCaptureVisionRouter.mm +532 -532
  92. package/ios/RNDynamsoftImageEditorView.h +17 -17
  93. package/ios/RNDynamsoftImageEditorView.m +25 -25
  94. package/ios/RNDynamsoftImageEditorViewManager.h +14 -14
  95. package/ios/RNDynamsoftImageEditorViewManager.mm +183 -183
  96. package/ios/RNDynamsoftImageManager.h +14 -14
  97. package/ios/RNDynamsoftImageManager.mm +369 -369
  98. package/ios/RNDynamsoftImageSourceAdapter.h +19 -19
  99. package/ios/RNDynamsoftImageSourceAdapter.mm +255 -255
  100. package/ios/RNDynamsoftLicense.h +14 -14
  101. package/ios/RNDynamsoftLicense.m +62 -62
  102. package/ios/RNDynamsoftMultiCrossFilter.h +14 -14
  103. package/ios/RNDynamsoftMultiCrossFilter.m +145 -145
  104. package/ios/RNDynamsoftVersions.h +13 -13
  105. package/ios/RNDynamsoftVersions.m +27 -27
  106. package/package.json +48 -48
  107. package/src/NativeDynamsoftVersionsModule.tsx +20 -20
  108. package/src/VersionsModule.tsx +7 -7
  109. package/src/core/CapturedResultBase.tsx +18 -18
  110. package/src/core/CapturedResultItem.tsx +23 -23
  111. package/src/core/CoreModule.tsx +9 -9
  112. package/src/core/DSRect.tsx +29 -29
  113. package/src/core/EnumCaptureResultItemType.tsx +52 -52
  114. package/src/core/EnumColourChannelUsageType.tsx +26 -26
  115. package/src/core/EnumCrossVerificationStatus.tsx +46 -46
  116. package/src/core/EnumGrayscaleEnhancementMode.tsx +46 -46
  117. package/src/core/EnumGrayscaleTransformationMode.tsx +35 -35
  118. package/src/core/EnumImageFileFormat.tsx +6 -6
  119. package/src/core/EnumPixelFormat.tsx +53 -53
  120. package/src/core/ImageData.tsx +87 -87
  121. package/src/core/ImageSourceAdapter.tsx +160 -160
  122. package/src/core/NativeDynamsoftImageSourceAdapterModule.tsx +29 -29
  123. package/src/core/Point.tsx +13 -13
  124. package/src/core/Quadrilateral.tsx +12 -12
  125. package/src/core/index.tsx +18 -18
  126. package/src/cvr/CaptureVisionRouter.tsx +683 -683
  127. package/src/cvr/CaptureVisionRouterModule.tsx +9 -9
  128. package/src/cvr/CapturedResult.tsx +123 -123
  129. package/src/cvr/CapturedResultFilter.tsx +13 -13
  130. package/src/cvr/CapturedResultReceiver.tsx +71 -71
  131. package/src/cvr/EnumPresetTemplate.tsx +81 -81
  132. package/src/cvr/NativeDynamsoftCaptureVisionRouterModule.tsx +25 -25
  133. package/src/cvr/SimplifiedCaptureVisionSettings.tsx +61 -61
  134. package/src/cvr/index.tsx +11 -11
  135. package/src/dbr/BarcodeDetails.tsx +51 -51
  136. package/src/dbr/BarcodeReaderModule.tsx +9 -9
  137. package/src/dbr/BarcodeResultItem.tsx +65 -65
  138. package/src/dbr/DecodedBarcodesResult.tsx +14 -14
  139. package/src/dbr/ECISegment.tsx +23 -23
  140. package/src/dbr/EnumBarcodeFormat.tsx +112 -112
  141. package/src/dbr/EnumDeblurMode.tsx +29 -29
  142. package/src/dbr/EnumLocalizationMode.tsx +27 -27
  143. package/src/dbr/EnumQRCodeErrorCorrectionLevel.tsx +6 -6
  144. package/src/dbr/SimplifiedBarcodeReaderSettings.tsx +80 -80
  145. package/src/dbr/index.tsx +9 -9
  146. package/src/dce/CameraEnhancer.tsx +254 -254
  147. package/src/dce/CameraEnhancerModule.tsx +9 -9
  148. package/src/dce/CameraView.tsx +100 -100
  149. package/src/dce/DynamsoftCameraViewNativeComponent.ts +96 -96
  150. package/src/dce/DynamsoftImageEditorViewNativeComponent.ts +9 -9
  151. package/src/dce/EnumCameraPosition.tsx +25 -25
  152. package/src/dce/EnumDrawingLayerId.tsx +17 -17
  153. package/src/dce/EnumEnhancedFeatures.tsx +24 -24
  154. package/src/dce/EnumFocusMode.tsx +6 -6
  155. package/src/dce/EnumResolution.tsx +8 -8
  156. package/src/dce/EnumTorchState.tsx +10 -10
  157. package/src/dce/FeedBack.tsx +28 -28
  158. package/src/dce/ImageEditorView.tsx +131 -131
  159. package/src/dce/NativeDynamsoftCameraViewModule.tsx +47 -47
  160. package/src/dce/NativeDynamsoftImageEditorViewModule.ts +9 -9
  161. package/src/dce/index.tsx +13 -13
  162. package/src/dcp/CodeParserDedicatorModule.tsx +9 -9
  163. package/src/dcp/CodeParserModule.tsx +9 -9
  164. package/src/dcp/EnumMappingStatus.tsx +14 -14
  165. package/src/dcp/EnumValidationStatus.tsx +14 -14
  166. package/src/dcp/ParsedResult.tsx +14 -14
  167. package/src/dcp/ParsedResultItem.tsx +50 -50
  168. package/src/dcp/index.tsx +8 -8
  169. package/src/ddn/DeskewedImageResultItem.tsx +40 -40
  170. package/src/ddn/DetectedQuadResultItem.tsx +31 -31
  171. package/src/ddn/DocumentNormalizerModule.tsx +9 -9
  172. package/src/ddn/EnhancedImageResultItem.tsx +20 -20
  173. package/src/ddn/EnumImageColourMode.tsx +14 -14
  174. package/src/ddn/ProcessedDocumentResult.tsx +27 -27
  175. package/src/ddn/SimplifiedDocumentNormalizerSettings.tsx +65 -65
  176. package/src/ddn/index.tsx +11 -11
  177. package/src/dip/ImageProcessingModule.tsx +9 -9
  178. package/src/dip/index.tsx +1 -1
  179. package/src/dlr/CharacterResult.tsx +28 -28
  180. package/src/dlr/LabelRecognizerModule.tsx +9 -9
  181. package/src/dlr/RecognizedTextLinesResult.tsx +19 -19
  182. package/src/dlr/SimplifiedLabelRecognizerSettings.tsx +33 -33
  183. package/src/dlr/TextLineResultItem.tsx +41 -41
  184. package/src/dlr/index.tsx +8 -8
  185. package/src/index.tsx +13 -13
  186. package/src/license/LicenseManager.tsx +49 -49
  187. package/src/license/LicenseModule.tsx +9 -9
  188. package/src/license/NativeDynamsoftLicenseModule.tsx +7 -7
  189. package/src/license/index.tsx +7 -7
  190. package/src/utility/CrossVerificationCriteria.tsx +11 -11
  191. package/src/utility/EnumFilterType.tsx +5 -5
  192. package/src/utility/ImageManager.tsx +348 -348
  193. package/src/utility/MultiFrameResultCrossFilter.tsx +183 -183
  194. package/src/utility/NativeDynamsoftImageManagerModule.tsx +7 -7
  195. package/src/utility/NativeDynamsoftMultiCrossFilterModule.tsx +18 -18
  196. package/src/utility/UtilityModule.tsx +9 -9
  197. package/src/utility/index.tsx +4 -4
  198. package/android/.gitignore +0 -4
@@ -1,17 +1,17 @@
1
- /*
2
- * Copyright © Dynamsoft Corporation. All rights reserved.
3
- */
4
-
5
- #import <UIKit/UIKit.h>
6
-
7
- NS_ASSUME_NONNULL_BEGIN
8
-
9
- @class DSImageEditorView;
10
-
11
- @interface RNDynamsoftImageEditorView : UIView
12
-
13
- @property (nonatomic, strong) DSImageEditorView *editorView;
14
-
15
- @end
16
-
17
- NS_ASSUME_NONNULL_END
1
+ /*
2
+ * Copyright © Dynamsoft Corporation. All rights reserved.
3
+ */
4
+
5
+ #import <UIKit/UIKit.h>
6
+
7
+ NS_ASSUME_NONNULL_BEGIN
8
+
9
+ @class DSImageEditorView;
10
+
11
+ @interface RNDynamsoftImageEditorView : UIView
12
+
13
+ @property (nonatomic, strong) DSImageEditorView *editorView;
14
+
15
+ @end
16
+
17
+ NS_ASSUME_NONNULL_END
@@ -1,25 +1,25 @@
1
- /*
2
- * Copyright © Dynamsoft Corporation. All rights reserved.
3
- */
4
-
5
- #import "RNDynamsoftImageEditorView.h"
6
- #import <DynamsoftCaptureVisionBundle/DynamsoftCaptureVisionBundle.h>
7
-
8
- @implementation RNDynamsoftImageEditorView
9
-
10
- - (instancetype)init
11
- {
12
- self = [super init];
13
- if (self) {
14
- _editorView = [[DSImageEditorView alloc] init];
15
- [self addSubview:_editorView];
16
- }
17
- return self;
18
- }
19
-
20
- - (void)layoutSubviews {
21
- [super layoutSubviews];
22
- self.editorView.frame = self.bounds;
23
- }
24
-
25
- @end
1
+ /*
2
+ * Copyright © Dynamsoft Corporation. All rights reserved.
3
+ */
4
+
5
+ #import "RNDynamsoftImageEditorView.h"
6
+ #import <DynamsoftCaptureVisionBundle/DynamsoftCaptureVisionBundle.h>
7
+
8
+ @implementation RNDynamsoftImageEditorView
9
+
10
+ - (instancetype)init
11
+ {
12
+ self = [super init];
13
+ if (self) {
14
+ _editorView = [[DSImageEditorView alloc] init];
15
+ [self addSubview:_editorView];
16
+ }
17
+ return self;
18
+ }
19
+
20
+ - (void)layoutSubviews {
21
+ [super layoutSubviews];
22
+ self.editorView.frame = self.bounds;
23
+ }
24
+
25
+ @end
@@ -1,14 +1,14 @@
1
- /*
2
- * Copyright © Dynamsoft Corporation. All rights reserved.
3
- */
4
-
5
- #import <React/RCTViewManager.h>
6
- #import <React/RCTBridgeModule.h>
7
-
8
- NS_ASSUME_NONNULL_BEGIN
9
-
10
- @interface RNDynamsoftImageEditorViewManager : RCTViewManager
11
-
12
- @end
13
-
14
- NS_ASSUME_NONNULL_END
1
+ /*
2
+ * Copyright © Dynamsoft Corporation. All rights reserved.
3
+ */
4
+
5
+ #import <React/RCTViewManager.h>
6
+ #import <React/RCTBridgeModule.h>
7
+
8
+ NS_ASSUME_NONNULL_BEGIN
9
+
10
+ @interface RNDynamsoftImageEditorViewManager : RCTViewManager
11
+
12
+ @end
13
+
14
+ NS_ASSUME_NONNULL_END
@@ -1,183 +1,183 @@
1
- /*
2
- * Copyright © Dynamsoft Corporation. All rights reserved.
3
- */
4
-
5
- #import "RNDynamsoftImageEditorViewManager.h"
6
- #import "RNDynamsoftImageEditorView.h"
7
- #import <DynamsoftCaptureVisionBundle/DynamsoftCaptureVisionBundle.h>
8
- #import <React/RCTBridge+Private.h>
9
- #import "DSImageData+HostObject.h"
10
- #import <React/RCTUIManager.h>
11
- #import "RNDynamsoft+Json.h"
12
-
13
- using namespace facebook::jsi;
14
- using namespace facebook;
15
- using namespace std;
16
-
17
- @implementation RNDynamsoftImageEditorViewManager
18
-
19
- RCT_EXPORT_MODULE(DynamsoftImageEditorView)
20
-
21
- - (UIView *)view {
22
- return [[RNDynamsoftImageEditorView alloc] init];
23
- }
24
-
25
- RCT_EXPORT_METHOD(setQuads:(nonnull NSNumber *)tag quadArray:(NSArray *)array layerId:(NSInteger)layerId) {
26
- [self trySetQuadsWithTag:tag quadArray:array layerId:layerId attempt:1];
27
- }
28
-
29
- - (void)trySetQuadsWithTag:(nonnull NSNumber *)tag quadArray:(NSArray *)array layerId:(NSInteger)layerId attempt:(NSInteger)attempt {
30
- const NSInteger maxAttempts = 10;
31
- const NSTimeInterval retryDelay = 0.1; // 100ms
32
-
33
- [self.bridge.uiManager addUIBlock:
34
- ^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
35
- id view = viewRegistry[tag];
36
- if (!view || ![view isKindOfClass:[RNDynamsoftImageEditorView class]]) {
37
- if (attempt < maxAttempts) {
38
- dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(retryDelay * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
39
- [self trySetQuadsWithTag:tag quadArray:array layerId:layerId attempt:attempt + 1];
40
- });
41
- } else {
42
- RCTLogError(@"Cannot find RNDynamsoftImageEditorView with tag #%@ after %ld attempts", tag, (long)attempt);
43
- }
44
- } else {
45
- if (array && array.count > 0) {
46
- NSMutableArray<DSQuadDrawingItem *> *items = [NSMutableArray array];
47
- for (id dic in array) {
48
- if ([dic isKindOfClass:[NSDictionary class]]) {
49
- DSQuadrilateral *quad = [DSQuadrilateral quadrilateralWithDictionary:dic];
50
- [items addObject:[[DSQuadDrawingItem alloc] initWithQuadrilateral:quad]];
51
- }
52
- }
53
- DSDrawingLayer *layer = [((RNDynamsoftImageEditorView *)view).editorView getDrawingLayer:layerId];
54
- layer.drawingItems = items;
55
- }
56
- }
57
- }];
58
- }
59
-
60
- RCT_EXPORT_METHOD(getSelectedQuad:(nonnull NSNumber *)tag
61
- resolver:(RCTPromiseResolveBlock)resolve
62
- rejecter:(RCTPromiseRejectBlock)reject)
63
- {
64
- [self.bridge.uiManager addUIBlock:
65
- ^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
66
- id view = viewRegistry[tag];
67
- if (!view || ![view isKindOfClass:[RNDynamsoftImageEditorView class]]) {
68
- RCTLogError(@"Cannot find RNDynamsoftImageEditorView with tag #%@", tag);
69
- resolve(nil);
70
- } else {
71
- DSDrawingItem *item = [((RNDynamsoftImageEditorView *)view).editorView getSelectedDrawingItem];
72
- if (item && item.mediaType == DSDrawingItemMediaTypeQuadrilateral) {
73
- DSQuadDrawingItem *quadItem = (DSQuadDrawingItem *)item;
74
- if (quadItem) {
75
- resolve([quadItem.quad toJson]);
76
- } else {
77
- resolve(nil);
78
- }
79
- }
80
- }
81
- }];
82
- }
83
-
84
- - (void)trySetImageDataWithTag:(nonnull NSNumber *)tag data:(DSImageData *)data attempt:(NSInteger)attempt {
85
- const NSInteger maxAttempts = 10;
86
- const NSTimeInterval retryDelay = 0.1; // 100ms
87
-
88
- [self.bridge.uiManager addUIBlock:
89
- ^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
90
- id view = viewRegistry[tag];
91
- if (!view || ![view isKindOfClass:[RNDynamsoftImageEditorView class]]) {
92
- if (attempt < maxAttempts) {
93
- dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(retryDelay * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
94
- [self trySetImageDataWithTag:tag data:data attempt:1];
95
- });
96
- } else {
97
- RCTLogError(@"Cannot find RNDynamsoftImageEditorView with tag #%@ after %ld attempts", tag, (long)attempt);
98
- }
99
- } else {
100
- ((RNDynamsoftImageEditorView *)view).editorView.imageData = data;
101
- }
102
- }];
103
- }
104
-
105
- #pragma mark - Global JSI
106
- // --- RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(install) ---
107
- RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(install)
108
- {
109
- RCTBridge *bridge = self.bridge;
110
-
111
- if ([bridge respondsToSelector:NSSelectorFromString(@"parentBridge")]) {
112
- bridge = [bridge valueForKey:@"parentBridge"];
113
- }
114
-
115
- RCTCxxBridge *cxxBridge = (RCTCxxBridge *)bridge;
116
- if (cxxBridge == nil || cxxBridge.runtime == nil) {
117
- return @false;
118
- }
119
-
120
- auto jsiRuntime = (jsi::Runtime*) cxxBridge.runtime;
121
- if (jsiRuntime == nil) {
122
- return @false;
123
- }
124
-
125
- install(*(facebook::jsi::Runtime *)cxxBridge.runtime, self);
126
- return @true;
127
- }
128
-
129
- // --- Helper Function (Assumed to be accessible, copied here for completeness) ---
130
- static void installHostFunction(
131
- jsi::Runtime &jsiRuntime,
132
- const char* name,
133
- unsigned int argCount,
134
- HostFunctionType hostFunction) {
135
-
136
- auto func = Function::createFromHostFunction(
137
- jsiRuntime,
138
- PropNameID::forAscii(jsiRuntime, name),
139
- argCount,
140
- std::move(hostFunction)
141
- );
142
- jsiRuntime.global().setProperty(jsiRuntime, name, std::move(func));
143
- }
144
-
145
- // --- JSI Installation Logic ---
146
- static void install(jsi::Runtime &jsiRuntime, RNDynamsoftImageEditorViewManager *rnEditorViewManager) {
147
-
148
- // 1. editorView_setOriginalImage(viewTag, imageDataHostObject)
149
- installHostFunction(jsiRuntime, "editorView_setOriginalImage", 2,
150
- [rnEditorViewManager](Runtime &runtime, const Value &thisValue, const Value *arguments, size_t count) -> Value {
151
-
152
- // 🔍 Argument Validation & Type Check (Optimized)
153
- if (count != 2 || !arguments[0].isNumber() || !arguments[1].isObject()) {
154
- // Should potentially throw an exception for incorrect usage,
155
- // but returning Value(false) keeps it consistent with original code style.
156
- return Value(false);
157
- }
158
-
159
- // Extract View Tag (JS number)
160
- double tag = arguments[0].getNumber();
161
- NSNumber *viewTag = @(tag); // Convert to NSNumber for Objective-C method
162
-
163
- // Extract Image Data Host Object (Requires runtime for getObject)
164
- Object obj = arguments[1].getObject(runtime);
165
-
166
- // Check if it's the specific Host Object type (Requires runtime for isHostObject)
167
- if (obj.isHostObject<ImageDataHostObject>(runtime)) {
168
- // Safely convert Host Object to DSImageData
169
- ImageDataHostObject hostObject = ImageDataHostObject::getHOFromObject(runtime, obj);
170
- DSImageData *data = [DSImageData imageDataFromHostObject:hostObject];
171
-
172
- // Call the Objective-C View Manager method
173
- [rnEditorViewManager trySetImageDataWithTag:viewTag data:data attempt:1];
174
-
175
- return Value(true);
176
- }
177
-
178
- return Value(false);
179
- }
180
- );
181
- }
182
-
183
- @end
1
+ /*
2
+ * Copyright © Dynamsoft Corporation. All rights reserved.
3
+ */
4
+
5
+ #import "RNDynamsoftImageEditorViewManager.h"
6
+ #import "RNDynamsoftImageEditorView.h"
7
+ #import <DynamsoftCaptureVisionBundle/DynamsoftCaptureVisionBundle.h>
8
+ #import <React/RCTBridge+Private.h>
9
+ #import "DSImageData+HostObject.h"
10
+ #import <React/RCTUIManager.h>
11
+ #import "RNDynamsoft+Json.h"
12
+
13
+ using namespace facebook::jsi;
14
+ using namespace facebook;
15
+ using namespace std;
16
+
17
+ @implementation RNDynamsoftImageEditorViewManager
18
+
19
+ RCT_EXPORT_MODULE(DynamsoftImageEditorView)
20
+
21
+ - (UIView *)view {
22
+ return [[RNDynamsoftImageEditorView alloc] init];
23
+ }
24
+
25
+ RCT_EXPORT_METHOD(setQuads:(nonnull NSNumber *)tag quadArray:(NSArray *)array layerId:(NSInteger)layerId) {
26
+ [self trySetQuadsWithTag:tag quadArray:array layerId:layerId attempt:1];
27
+ }
28
+
29
+ - (void)trySetQuadsWithTag:(nonnull NSNumber *)tag quadArray:(NSArray *)array layerId:(NSInteger)layerId attempt:(NSInteger)attempt {
30
+ const NSInteger maxAttempts = 10;
31
+ const NSTimeInterval retryDelay = 0.1; // 100ms
32
+
33
+ [self.bridge.uiManager addUIBlock:
34
+ ^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
35
+ id view = viewRegistry[tag];
36
+ if (!view || ![view isKindOfClass:[RNDynamsoftImageEditorView class]]) {
37
+ if (attempt < maxAttempts) {
38
+ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(retryDelay * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
39
+ [self trySetQuadsWithTag:tag quadArray:array layerId:layerId attempt:attempt + 1];
40
+ });
41
+ } else {
42
+ RCTLogError(@"Cannot find RNDynamsoftImageEditorView with tag #%@ after %ld attempts", tag, (long)attempt);
43
+ }
44
+ } else {
45
+ if (array && array.count > 0) {
46
+ NSMutableArray<DSQuadDrawingItem *> *items = [NSMutableArray array];
47
+ for (id dic in array) {
48
+ if ([dic isKindOfClass:[NSDictionary class]]) {
49
+ DSQuadrilateral *quad = [DSQuadrilateral quadrilateralWithDictionary:dic];
50
+ [items addObject:[[DSQuadDrawingItem alloc] initWithQuadrilateral:quad]];
51
+ }
52
+ }
53
+ DSDrawingLayer *layer = [((RNDynamsoftImageEditorView *)view).editorView getDrawingLayer:layerId];
54
+ layer.drawingItems = items;
55
+ }
56
+ }
57
+ }];
58
+ }
59
+
60
+ RCT_EXPORT_METHOD(getSelectedQuad:(nonnull NSNumber *)tag
61
+ resolver:(RCTPromiseResolveBlock)resolve
62
+ rejecter:(RCTPromiseRejectBlock)reject)
63
+ {
64
+ [self.bridge.uiManager addUIBlock:
65
+ ^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
66
+ id view = viewRegistry[tag];
67
+ if (!view || ![view isKindOfClass:[RNDynamsoftImageEditorView class]]) {
68
+ RCTLogError(@"Cannot find RNDynamsoftImageEditorView with tag #%@", tag);
69
+ resolve(nil);
70
+ } else {
71
+ DSDrawingItem *item = [((RNDynamsoftImageEditorView *)view).editorView getSelectedDrawingItem];
72
+ if (item && item.mediaType == DSDrawingItemMediaTypeQuadrilateral) {
73
+ DSQuadDrawingItem *quadItem = (DSQuadDrawingItem *)item;
74
+ if (quadItem) {
75
+ resolve([quadItem.quad toJson]);
76
+ } else {
77
+ resolve(nil);
78
+ }
79
+ }
80
+ }
81
+ }];
82
+ }
83
+
84
+ - (void)trySetImageDataWithTag:(nonnull NSNumber *)tag data:(DSImageData *)data attempt:(NSInteger)attempt {
85
+ const NSInteger maxAttempts = 10;
86
+ const NSTimeInterval retryDelay = 0.1; // 100ms
87
+
88
+ [self.bridge.uiManager addUIBlock:
89
+ ^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
90
+ id view = viewRegistry[tag];
91
+ if (!view || ![view isKindOfClass:[RNDynamsoftImageEditorView class]]) {
92
+ if (attempt < maxAttempts) {
93
+ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(retryDelay * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
94
+ [self trySetImageDataWithTag:tag data:data attempt:1];
95
+ });
96
+ } else {
97
+ RCTLogError(@"Cannot find RNDynamsoftImageEditorView with tag #%@ after %ld attempts", tag, (long)attempt);
98
+ }
99
+ } else {
100
+ ((RNDynamsoftImageEditorView *)view).editorView.imageData = data;
101
+ }
102
+ }];
103
+ }
104
+
105
+ #pragma mark - Global JSI
106
+ // --- RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(install) ---
107
+ RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(install)
108
+ {
109
+ RCTBridge *bridge = self.bridge;
110
+
111
+ if ([bridge respondsToSelector:NSSelectorFromString(@"parentBridge")]) {
112
+ bridge = [bridge valueForKey:@"parentBridge"];
113
+ }
114
+
115
+ RCTCxxBridge *cxxBridge = (RCTCxxBridge *)bridge;
116
+ if (cxxBridge == nil || cxxBridge.runtime == nil) {
117
+ return @false;
118
+ }
119
+
120
+ auto jsiRuntime = (jsi::Runtime*) cxxBridge.runtime;
121
+ if (jsiRuntime == nil) {
122
+ return @false;
123
+ }
124
+
125
+ install(*(facebook::jsi::Runtime *)cxxBridge.runtime, self);
126
+ return @true;
127
+ }
128
+
129
+ // --- Helper Function (Assumed to be accessible, copied here for completeness) ---
130
+ static void installHostFunction(
131
+ jsi::Runtime &jsiRuntime,
132
+ const char* name,
133
+ unsigned int argCount,
134
+ HostFunctionType hostFunction) {
135
+
136
+ auto func = Function::createFromHostFunction(
137
+ jsiRuntime,
138
+ PropNameID::forAscii(jsiRuntime, name),
139
+ argCount,
140
+ std::move(hostFunction)
141
+ );
142
+ jsiRuntime.global().setProperty(jsiRuntime, name, std::move(func));
143
+ }
144
+
145
+ // --- JSI Installation Logic ---
146
+ static void install(jsi::Runtime &jsiRuntime, RNDynamsoftImageEditorViewManager *rnEditorViewManager) {
147
+
148
+ // 1. editorView_setOriginalImage(viewTag, imageDataHostObject)
149
+ installHostFunction(jsiRuntime, "editorView_setOriginalImage", 2,
150
+ [rnEditorViewManager](Runtime &runtime, const Value &thisValue, const Value *arguments, size_t count) -> Value {
151
+
152
+ // 🔍 Argument Validation & Type Check (Optimized)
153
+ if (count != 2 || !arguments[0].isNumber() || !arguments[1].isObject()) {
154
+ // Should potentially throw an exception for incorrect usage,
155
+ // but returning Value(false) keeps it consistent with original code style.
156
+ return Value(false);
157
+ }
158
+
159
+ // Extract View Tag (JS number)
160
+ double tag = arguments[0].getNumber();
161
+ NSNumber *viewTag = @(tag); // Convert to NSNumber for Objective-C method
162
+
163
+ // Extract Image Data Host Object (Requires runtime for getObject)
164
+ Object obj = arguments[1].getObject(runtime);
165
+
166
+ // Check if it's the specific Host Object type (Requires runtime for isHostObject)
167
+ if (obj.isHostObject<ImageDataHostObject>(runtime)) {
168
+ // Safely convert Host Object to DSImageData
169
+ ImageDataHostObject hostObject = ImageDataHostObject::getHOFromObject(runtime, obj);
170
+ DSImageData *data = [DSImageData imageDataFromHostObject:hostObject];
171
+
172
+ // Call the Objective-C View Manager method
173
+ [rnEditorViewManager trySetImageDataWithTag:viewTag data:data attempt:1];
174
+
175
+ return Value(true);
176
+ }
177
+
178
+ return Value(false);
179
+ }
180
+ );
181
+ }
182
+
183
+ @end
@@ -1,14 +1,14 @@
1
- /*
2
- * Copyright © Dynamsoft Corporation. All rights reserved.
3
- */
4
-
5
- #import <React/RCTBridgeModule.h>
6
- #import <React/RCTEventEmitter.h>
7
-
8
- NS_ASSUME_NONNULL_BEGIN
9
-
10
- @interface RNDynamsoftImageManager : RCTEventEmitter <RCTBridgeModule>
11
-
12
- @end
13
-
14
- NS_ASSUME_NONNULL_END
1
+ /*
2
+ * Copyright © Dynamsoft Corporation. All rights reserved.
3
+ */
4
+
5
+ #import <React/RCTBridgeModule.h>
6
+ #import <React/RCTEventEmitter.h>
7
+
8
+ NS_ASSUME_NONNULL_BEGIN
9
+
10
+ @interface RNDynamsoftImageManager : RCTEventEmitter <RCTBridgeModule>
11
+
12
+ @end
13
+
14
+ NS_ASSUME_NONNULL_END