UNPKG

2.4 kBPlain TextView Raw
1// Copyright 2016-present 650 Industries. All rights reserved.
2
3#import <EXBarCodeScanner/EXBarCodeScannerModule.h>
4#import <EXBarCodeScanner/EXBarCodeScannerUtils.h>
5#import <UMImageLoaderInterface/UMImageLoaderInterface.h>
6
7@interface EXBarCodeScannerModule ()
8
9@property (nonatomic, weak) UMModuleRegistry *moduleRegistry;
10@property (nonatomic, weak) id<UMImageLoaderInterface> imageLoader;
11
12@end
13
14@implementation EXBarCodeScannerModule
15
16UM_EXPORT_MODULE(ExpoBarCodeScannerModule);
17
18- (void)setModuleRegistry:(UMModuleRegistry *)moduleRegistry
19{
20 _moduleRegistry = moduleRegistry;
21 _imageLoader = [moduleRegistry getModuleImplementingProtocol:@protocol(UMImageLoaderInterface)];
22}
23
24- (NSDictionary *)constantsToExport
25{
26 return @{
27 @"Type": @{
28 @"front": @(EXCameraTypeFront),
29 @"back" : @(EXCameraTypeBack),
30 },
31 @"BarCodeType": [EXBarCodeScannerUtils validBarCodeTypes],
32 };
33}
34
35UM_EXPORT_METHOD_AS(scanFromURLAsync,
36 scanFromURLAsync:(NSString *)url
37 barCodeTypes:(NSArray *)barCodeTypes
38 resolver:(UMPromiseResolveBlock)resolve
39 rejecter:(UMPromiseRejectBlock)reject)
40{
41 // We only support QR codes, so barCodeTypes is ignored
42 NSURL *imageURL = [NSURL URLWithString:url];
43 [_imageLoader loadImageForURL:imageURL completionHandler:^(NSError *error, UIImage *loadedImage) {
44 if (error != nil) {
45 reject(@"E_IMAGE_RETRIEVAL_ERROR", @"Could not get the image", error);
46 return;
47 }
48
49 CIDetector *detector = [CIDetector detectorOfType:CIDetectorTypeQRCode
50 context:nil
51 options:@{CIDetectorAccuracy:CIDetectorAccuracyHigh}];
52 if (detector) {
53 NSArray *features = [detector featuresInImage:[[CIImage alloc] initWithCGImage:loadedImage.CGImage]];
54
55 NSMutableArray *result = [NSMutableArray arrayWithCapacity:1];
56 for (CIQRCodeFeature *feature in features) {
57 [result addObject:@{
58 @"type" : AVMetadataObjectTypeQRCode,
59 @"data" : feature.messageString
60 }];
61 }
62
63 resolve(result);
64 } else {
65 reject(@"E_SCANNER_INIT_FAILED", @"Could not initialize the barcode scanner", nil);
66 }
67 }];
68}
69
70@end