@aigens/aigens-sdk-core 0.0.3 → 0.0.7

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.
@@ -1,6 +1,5 @@
1
1
  import Foundation
2
2
  import Capacitor
3
- import AVFoundation
4
3
  import UIKit
5
4
 
6
5
  /**
@@ -8,634 +7,107 @@ import UIKit
8
7
  * here: https://capacitorjs.com/docs/plugins/ios
9
8
  */
10
9
  @objc(CorePlugin)
11
- public class CorePlugin: CAPPlugin, AVCaptureMetadataOutputObjectsDelegate {
10
+ public class CorePlugin: CAPPlugin {
11
+
12
12
  private let implementation = Core()
13
-
13
+ public static var member: Dictionary<String, Any>?
14
+
14
15
  @objc func echo(_ call: CAPPluginCall) {
16
+
17
+ print("CorePlugin echo")
15
18
 
16
19
  let value = call.getString("value") ?? ""
17
20
  call.resolve([
18
21
  "value": implementation.echo(value)
19
22
  ])
23
+
24
+
20
25
  }
21
26
 
22
-
23
- @objc func finish(_ call: CAPPluginCall) {
27
+ @objc func dismiss(_ call: CAPPluginCall) {
24
28
 
29
+ print("CorePlugin dismiss")
30
+
25
31
  DispatchQueue.main.async {
26
32
  self.bridge?.viewController?.dismiss(animated: true);
27
33
  }
28
-
29
-
34
+
35
+
30
36
  //let value = call.getString("value") ?? ""
31
37
  call.resolve([
32
38
  "success": true
33
39
  //"value": implementation.echo(value)
34
40
  ])
35
- }
36
-
37
- @objc func scan(_ call: CAPPluginCall) {
38
41
 
39
- let cancelButton = call.getString("cancelButton")
40
- if(cancelButton != nil){
41
- self.cancelText = cancelButton!
42
- }else{
43
- self.cancelText = "Cancel"
44
- }
45
-
46
- DispatchQueue.main.async {
47
- self.loadScan()
48
- self.startScan(call)
49
- }
50
- }
51
-
52
-
53
- @objc func openBrowser(_ call: CAPPluginCall) {
54
-
55
- let url = call.getString("url")
56
-
57
-
58
- if(url == nil){
59
- return
60
- }
61
-
62
- DispatchQueue.main.async {
63
-
64
- let bridgeVC = WebContainerViewController()
65
-
66
- var options = [String: AnyObject]()
67
- options["url"] = url as AnyObject;
68
42
 
69
- bridgeVC.options = options;
70
-
71
- bridgeVC.modalPresentationStyle = .fullScreen
72
- let currentVC = self.bridge?.viewController;
73
- currentVC?.present(bridgeVC, animated: true);
74
- }
75
-
76
-
77
- call.resolve([
78
- "success": true
79
- //"value": implementation.echo(value)
80
- ])
81
43
  }
82
-
83
- //SCAN PLAUGIN HERE
84
-
85
- class CameraView: UIView {
86
- var videoPreviewLayer:AVCaptureVideoPreviewLayer?
87
-
88
- func interfaceOrientationToVideoOrientation(_ orientation : UIInterfaceOrientation) -> AVCaptureVideoOrientation {
89
- switch (orientation) {
90
- case UIInterfaceOrientation.portrait:
91
- return AVCaptureVideoOrientation.portrait
92
- case UIInterfaceOrientation.portraitUpsideDown:
93
- return AVCaptureVideoOrientation.portraitUpsideDown
94
- case UIInterfaceOrientation.landscapeLeft:
95
- return AVCaptureVideoOrientation.landscapeLeft
96
- case UIInterfaceOrientation.landscapeRight:
97
- return AVCaptureVideoOrientation.landscapeRight
98
- default:
99
- return AVCaptureVideoOrientation.portraitUpsideDown
100
- }
101
- }
102
44
 
103
- override func layoutSubviews() {
104
- super.layoutSubviews()
105
- if let sublayers = self.layer.sublayers {
106
- for layer in sublayers {
107
- layer.frame = self.bounds
108
- }
109
- }
110
-
111
- self.videoPreviewLayer?.connection?.videoOrientation = interfaceOrientationToVideoOrientation(UIApplication.shared.statusBarOrientation)
112
- }
45
+ @objc func getMember(_ call: CAPPluginCall) {
113
46
 
114
-
115
- func addPreviewLayer(_ previewLayer:AVCaptureVideoPreviewLayer?) {
116
- previewLayer!.videoGravity = AVLayerVideoGravity.resizeAspectFill
117
- previewLayer!.frame = self.bounds
118
- self.layer.addSublayer(previewLayer!)
119
- self.videoPreviewLayer = previewLayer
120
- }
121
-
122
- func removePreviewLayer() {
123
- if self.videoPreviewLayer != nil {
124
- self.videoPreviewLayer!.removeFromSuperlayer()
125
- self.videoPreviewLayer = nil
126
- }
127
- }
128
- }
129
-
130
- var cameraView: CameraView!
131
- var cancelButton: UIButton!
132
- var captureSession:AVCaptureSession?
133
- var captureVideoPreviewLayer:AVCaptureVideoPreviewLayer?
134
- var metaOutput: AVCaptureMetadataOutput?
135
-
136
- var currentCamera: Int = 0
137
- var frontCamera: AVCaptureDevice?
138
- var backCamera: AVCaptureDevice?
139
-
140
- var cancelText: String = "Cancel"
141
- var isScanning: Bool = false
142
- var shouldRunScan: Bool = false
143
- var didRunCameraSetup: Bool = false
144
- var didRunCameraPrepare: Bool = false
145
- var isBackgroundHidden: Bool = false
146
-
147
- var savedCall: CAPPluginCall? = nil
148
- var scanningPaused: Bool = false
149
- var lastScanResult: String? = nil
150
-
151
- enum SupportedFormat: String, CaseIterable {
152
- // 1D Product
153
- //!\ UPC_A is part of EAN_13 according to Apple docs
154
- case UPC_E
155
- //!\ UPC_EAN_EXTENSION is not supported by AVFoundation
156
- case EAN_8
157
- case EAN_13
158
- // 1D Industrial
159
- case CODE_39
160
- case CODE_39_MOD_43
161
- case CODE_93
162
- case CODE_128
163
- //!\ CODABAR is not supported by AVFoundation
164
- case ITF
165
- case ITF_14
166
- // 2D
167
- case AZTEC
168
- case DATA_MATRIX
169
- //!\ MAXICODE is not supported by AVFoundation
170
- case PDF_417
171
- case QR_CODE
172
- //!\ RSS_14 is not supported by AVFoundation
173
- //!\ RSS_EXPANDED is not supported by AVFoundation
174
-
175
- var value: AVMetadataObject.ObjectType {
176
- switch self {
177
- // 1D Product
178
- case .UPC_E: return AVMetadataObject.ObjectType.upce
179
- case .EAN_8: return AVMetadataObject.ObjectType.ean8
180
- case .EAN_13: return AVMetadataObject.ObjectType.ean13
181
- // 1D Industrial
182
- case .CODE_39: return AVMetadataObject.ObjectType.code39
183
- case .CODE_39_MOD_43: return AVMetadataObject.ObjectType.code39Mod43
184
- case .CODE_93: return AVMetadataObject.ObjectType.code93
185
- case .CODE_128: return AVMetadataObject.ObjectType.code128
186
- case .ITF: return AVMetadataObject.ObjectType.interleaved2of5
187
- case .ITF_14: return AVMetadataObject.ObjectType.itf14
188
- // 2D
189
- case .AZTEC: return AVMetadataObject.ObjectType.aztec
190
- case .DATA_MATRIX: return AVMetadataObject.ObjectType.dataMatrix
191
- case .PDF_417: return AVMetadataObject.ObjectType.pdf417
192
- case .QR_CODE: return AVMetadataObject.ObjectType.qr
193
- }
194
- }
195
- }
196
-
197
- var targetedFormats = [AVMetadataObject.ObjectType]()
198
-
199
- enum CaptureError: Error {
200
- case backCameraUnavailable
201
- case frontCameraUnavailable
202
- case couldNotCaptureInput(error: NSError)
203
- }
204
-
205
- @objc func buttonTapped( _ button : UIButton)
206
- {
207
-
208
- self.destroy()
47
+ call.resolve([
48
+ "member": CorePlugin.member!
49
+ ])
209
50
  }
210
-
211
-
212
51
 
213
- private func loadScan() {
214
-
215
- if(self.cameraView != nil){
216
- return
217
- }
218
-
219
-
220
- self.cameraView = CameraView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height))
221
- self.cameraView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
222
-
223
- let button = UIButton()
224
- //button.backgroundColor = UIColor.orange
225
-
226
- //let iconImage = UIImage(named: "search")
227
- //button.setImage(iconImage, for: .normal)
228
-
229
- button.setTitle("< " + self.cancelText, for: .normal)
230
- button.contentMode = UIView.ContentMode.scaleToFill
231
- button.frame = CGRect(x: 20, y: 10, width:200 , height:100)
232
- button.titleLabel?.textColor = UIColor.white
233
- button.contentHorizontalAlignment = .left
234
-
235
- button.addTarget(self, action: #selector(self.buttonTapped(_:)), for: UIControl.Event.touchUpInside)
236
-
237
- self.cancelButton = button
238
-
239
- }
52
+ @objc func finish(_ call: CAPPluginCall) {
240
53
 
241
- private func hasCameraPermission() -> Bool {
242
- let status = AVCaptureDevice.authorizationStatus(for: AVMediaType.video)
243
- if (status == AVAuthorizationStatus.authorized) {
244
- return true
245
- }
246
- return false
247
- }
248
-
249
- private func addViews(){
250
- self.webView!.superview!.insertSubview(cameraView, aboveSubview: self.webView!)
251
- self.webView!.superview!.insertSubview(cancelButton, aboveSubview: cameraView)
252
- }
253
-
254
- private func removeViews(){
54
+ print("CorePlugin finish")
255
55
 
256
56
  DispatchQueue.main.async {
257
- self.cancelButton.removeFromSuperview()
258
- self.cameraView.removeFromSuperview()
259
- }
260
-
261
- }
262
-
263
- private func setupCamera(cameraDirection: String? = "back") -> Bool {
264
- do {
265
- var cameraDir = cameraDirection
266
- cameraView.backgroundColor = UIColor.clear
267
- //self.webView!.superview!.insertSubview(cameraView, belowSubview: self.webView!)
268
-
269
- //self.webView!.superview!.insertSubview(cameraView, aboveSubview: self.webView!)
270
- //self.webView!.superview!.insertSubview(cancelButton, aboveSubview: cameraView)
271
- addViews()
272
-
273
- let availableVideoDevices = discoverCaptureDevices()
274
- for device in availableVideoDevices {
275
- if device.position == AVCaptureDevice.Position.back {
276
- backCamera = device
277
- }
278
- else if device.position == AVCaptureDevice.Position.front {
279
- frontCamera = device
280
- }
281
- }
282
- // older iPods have no back camera
283
- if (cameraDir == "back") {
284
- if (backCamera == nil) {
285
- cameraDir = "front"
286
- }
287
- } else {
288
- if (frontCamera == nil) {
289
- cameraDir = "back"
290
- }
291
- }
292
- let input: AVCaptureDeviceInput
293
- input = try self.createCaptureDeviceInput(cameraDirection: cameraDir)
294
- captureSession = AVCaptureSession()
295
- captureSession!.addInput(input)
296
- metaOutput = AVCaptureMetadataOutput()
297
- captureSession!.addOutput(metaOutput!)
298
- metaOutput!.setMetadataObjectsDelegate(self, queue: DispatchQueue.main)
299
- captureVideoPreviewLayer = AVCaptureVideoPreviewLayer(session: captureSession!)
300
- cameraView.addPreviewLayer(captureVideoPreviewLayer)
301
- self.didRunCameraSetup = true
302
- return true
303
- } catch CaptureError.backCameraUnavailable {
304
- //
305
- } catch CaptureError.frontCameraUnavailable {
306
- //
307
- } catch CaptureError.couldNotCaptureInput {
308
- //
309
- } catch {
310
- //
311
- }
312
- return false
313
- }
314
-
315
- @available(swift, deprecated: 5.6, message: "New Xcode? Check if `AVCaptureDevice.DeviceType` has new types and add them accordingly.")
316
- private func discoverCaptureDevices() -> [AVCaptureDevice] {
317
- if #available(iOS 13.0, *) {
318
- return AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInTripleCamera, .builtInDualCamera, .builtInTelephotoCamera, .builtInTrueDepthCamera, .builtInUltraWideCamera, .builtInDualWideCamera, .builtInWideAngleCamera], mediaType: .video, position: .unspecified).devices
319
- } else {
320
- return AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInDualCamera, .builtInWideAngleCamera, .builtInTelephotoCamera, .builtInTrueDepthCamera], mediaType: .video, position: .unspecified).devices
321
- }
322
- }
323
-
324
- private func createCaptureDeviceInput(cameraDirection: String? = "back") throws -> AVCaptureDeviceInput {
325
- var captureDevice: AVCaptureDevice
326
- if(cameraDirection == "back"){
327
- if(backCamera != nil){
328
- captureDevice = backCamera!
329
- } else {
330
- throw CaptureError.backCameraUnavailable
331
- }
332
- } else {
333
- if(frontCamera != nil){
334
- captureDevice = frontCamera!
335
- } else {
336
- throw CaptureError.frontCameraUnavailable
337
- }
338
- }
339
- let captureDeviceInput: AVCaptureDeviceInput
340
- do {
341
- captureDeviceInput = try AVCaptureDeviceInput(device: captureDevice)
342
- } catch let error as NSError {
343
- throw CaptureError.couldNotCaptureInput(error: error)
344
- }
345
- return captureDeviceInput
346
- }
347
-
348
- private func dismantleCamera() {
349
- // opposite of setupCamera
350
-
351
- if (self.captureSession != nil) {
352
- DispatchQueue.main.async {
353
- self.captureSession!.stopRunning()
354
- self.cameraView.removePreviewLayer()
355
- self.captureVideoPreviewLayer = nil
356
- self.metaOutput = nil
357
- self.captureSession = nil
358
- self.frontCamera = nil
359
- self.backCamera = nil
360
- }
57
+ self.bridge?.viewController?.dismiss(animated: true);
361
58
  }
362
59
 
363
- self.isScanning = false
364
- self.didRunCameraSetup = false
365
- self.didRunCameraPrepare = false
366
60
 
367
- // If a call is saved and a scan will not run, free the saved call
368
- if (self.savedCall != nil && !self.shouldRunScan) {
369
- self.savedCall = nil
370
- }
61
+ //let value = call.getString("value") ?? ""
62
+ call.resolve([
63
+ "success": true
64
+ //"value": implementation.echo(value)
65
+ ])
371
66
  }
372
67
 
373
- private func prepare(_ call: CAPPluginCall? = nil) {
374
- // undo previous setup
375
- // because it may be prepared with a different config
376
- self.dismantleCamera()
377
68
 
378
- DispatchQueue.main.async {
379
- // setup camera with new config
380
- if (self.setupCamera(cameraDirection: call?.getString("cameraDirection") ?? "back")) {
381
- // indicate this method was run
382
- self.didRunCameraPrepare = true
383
-
384
- if (self.shouldRunScan) {
385
- self.scan()
386
- }
387
- } else {
388
- self.shouldRunScan = false
389
- }
390
- }
391
- }
69
+ @objc func openBrowser(_ call: CAPPluginCall) {
392
70
 
393
- private func destroy() {
394
-
395
- self.removeViews()
71
+ print("CorePlugin openBrowser")
396
72
 
397
- self.showBackground()
398
-
399
- self.dismantleCamera()
400
- }
401
-
402
- private func scan() {
403
- if (!self.didRunCameraPrepare) {
404
- //In iOS 14 don't identify permissions needed, so force to ask it's better than nothing. Provisional.
405
- var iOS14min: Bool = false
406
- if #available(iOS 14.0, *) { iOS14min = true; }
407
- if (!self.hasCameraPermission() && !iOS14min) {
408
- // @TODO()
409
- // requestPermission()
410
- } else {
411
- self.shouldRunScan = true
412
- self.prepare(savedCall)
413
- }
414
- } else {
415
- self.didRunCameraPrepare = false
416
-
417
- self.shouldRunScan = false
418
-
419
- targetedFormats = [AVMetadataObject.ObjectType]();
420
-
421
- if ((savedCall?.options["targetedFormats"]) != nil) {
422
- let _targetedFormats = savedCall?.getArray("targetedFormats", String.self)
423
-
424
- if (_targetedFormats != nil && _targetedFormats?.count ?? 0 > 0) {
425
- _targetedFormats?.forEach { targetedFormat in
426
- if let value = SupportedFormat(rawValue: targetedFormat)?.value {
427
- print(value)
428
- targetedFormats.append(value)
429
- }
430
- }
431
- }
432
-
433
- if (targetedFormats.count == 0) {
434
- print("The property targetedFormats was not set correctly.")
435
- }
436
- }
437
-
438
- if (targetedFormats.count == 0) {
439
- for supportedFormat in SupportedFormat.allCases {
440
- targetedFormats.append(supportedFormat.value)
441
- }
442
- }
443
-
444
- DispatchQueue.main.async {
445
- self.metaOutput!.metadataObjectTypes = self.targetedFormats
446
- self.captureSession!.startRunning()
447
- }
73
+ let url = call.getString("url")
448
74
 
449
- self.hideBackground()
450
75
 
451
- self.isScanning = true
76
+ if(url == nil){
77
+ return
452
78
  }
453
- }
454
-
455
- private func hideBackground() {
456
- /*
457
- DispatchQueue.main.async {
458
- self.bridge?.webView!.isOpaque = false
459
- self.bridge?.webView!.backgroundColor = UIColor.clear
460
- self.bridge?.webView!.scrollView.backgroundColor = UIColor.clear
461
-
462
- let javascript = "document.documentElement.style.backgroundColor = 'transparent'"
463
-
464
- self.bridge?.webView!.evaluateJavaScript(javascript)
465
- }*/
466
- }
467
-
468
- private func showBackground() {
469
79
 
470
- /*
80
+ let member = call.getObject("member")
81
+
471
82
  DispatchQueue.main.async {
472
- let javascript = "document.documentElement.style.backgroundColor = ''"
473
-
474
- self.bridge?.webView!.evaluateJavaScript(javascript) { (result, error) in
475
- self.bridge?.webView!.isOpaque = true
476
- self.bridge?.webView!.backgroundColor = UIColor.white
477
- self.bridge?.webView!.scrollView.backgroundColor = UIColor.white
478
- }
479
- }*/
480
- }
481
-
482
- // This method processes metadataObjects captured by iOS.
483
- public func metadataOutput(_ captureOutput: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection) {
484
83
 
485
- if (metadataObjects.count == 0 || !self.isScanning) {
486
- // while nothing is detected, or if scanning is false, do nothing.
487
- return
488
- }
489
-
490
- let found = metadataObjects[0] as! AVMetadataMachineReadableCodeObject
491
- if (targetedFormats.contains(found.type)) {
492
- var jsObject = PluginCallResultData()
493
-
494
- if (found.stringValue != nil) {
495
- jsObject["hasContent"] = true
496
- jsObject["content"] = found.stringValue
497
- jsObject["format"] = formatStringFromMetadata(found.type)
498
- } else {
499
- jsObject["hasContent"] = false
500
- }
84
+ let bridgeVC = WebContainerViewController()
501
85
 
502
- if (savedCall != nil) {
503
- if (savedCall!.keepAlive) {
504
- if (!scanningPaused && found.stringValue != lastScanResult ) {
505
- lastScanResult = found.stringValue
506
- savedCall!.resolve(jsObject)
507
- }
508
- } else {
509
- savedCall!.resolve(jsObject)
510
- savedCall = nil
511
- destroy()
512
- }
513
- } else {
514
- self.destroy()
86
+ var options = [String: AnyObject]()
87
+ options["url"] = url as AnyObject;
88
+
89
+ if(member != nil){
90
+ options["member"] = member as AnyObject;
515
91
  }
516
- }
517
- }
92
+
93
+ bridgeVC.options = options;
518
94
 
519
- private func formatStringFromMetadata(_ type: AVMetadataObject.ObjectType) -> String {
520
- switch type {
521
- case AVMetadataObject.ObjectType.upce:
522
- return "UPC_E"
523
- case AVMetadataObject.ObjectType.ean8:
524
- return "EAN_8"
525
- case AVMetadataObject.ObjectType.ean13:
526
- return "EAN_13"
527
- case AVMetadataObject.ObjectType.code39:
528
- return "CODE_39"
529
- case AVMetadataObject.ObjectType.code39Mod43:
530
- return "CODE_39_MOD_43"
531
- case AVMetadataObject.ObjectType.code93:
532
- return "CODE_93"
533
- case AVMetadataObject.ObjectType.code128:
534
- return "CODE_128"
535
- case AVMetadataObject.ObjectType.interleaved2of5:
536
- return "ITF"
537
- case AVMetadataObject.ObjectType.itf14:
538
- return "ITF_14"
539
- case AVMetadataObject.ObjectType.aztec:
540
- return "AZTEC"
541
- case AVMetadataObject.ObjectType.dataMatrix:
542
- return "DATA_MATRIX"
543
- case AVMetadataObject.ObjectType.pdf417:
544
- return "PDF_417"
545
- case AVMetadataObject.ObjectType.qr:
546
- return "QR_CODE"
547
- default:
548
- return type.rawValue
549
- }
95
+ bridgeVC.modalPresentationStyle = .fullScreen
96
+ let currentVC = self.bridge?.viewController;
97
+ currentVC?.present(bridgeVC, animated: true);
550
98
  }
551
99
 
552
- @objc func prepare(_ call: CAPPluginCall) {
553
- self.prepare()
554
- call.resolve()
555
- }
556
-
557
- @objc func hideBackground(_ call: CAPPluginCall) {
558
- self.hideBackground()
559
- call.resolve()
560
- }
561
-
562
- @objc func showBackground(_ call: CAPPluginCall) {
563
- self.showBackground()
564
- call.resolve()
565
- }
566
-
567
- @objc func startScan(_ call: CAPPluginCall) {
568
- self.savedCall = call
569
- self.scan()
570
- }
571
-
572
- @objc func startScanning(_ call: CAPPluginCall) {
573
- self.savedCall = call
574
- self.savedCall?.keepAlive = true
575
- scanningPaused = false
576
- lastScanResult = nil
577
- self.scan()
578
- }
579
-
580
- @objc func pauseScanning(_ call: CAPPluginCall) {
581
- scanningPaused = true
582
- call.resolve()
583
- }
584
100
 
585
- @objc func resumeScanning(_ call: CAPPluginCall) {
586
- scanningPaused = false
587
- call.resolve()
588
- }
589
-
590
- @objc func stopScan(_ call: CAPPluginCall) {
591
- if ((call.getBool("resolveScan") ?? false) && self.savedCall != nil) {
592
- var jsObject = PluginCallResultData()
593
- jsObject["hasContent"] = false
594
-
595
- savedCall?.resolve(jsObject)
596
- savedCall = nil
597
- }
598
-
599
- self.destroy()
600
- call.resolve()
101
+ call.resolve([
102
+ "success": true
103
+ //"value": implementation.echo(value)
104
+ ])
601
105
  }
602
106
 
603
- @objc func checkPermission(_ call: CAPPluginCall) {
604
- let force = call.getBool("force") ?? false
605
107
 
606
- var savedReturnObject = PluginCallResultData()
607
108
 
608
- DispatchQueue.main.async {
609
- switch AVCaptureDevice.authorizationStatus(for: .video) {
610
- case .authorized:
611
- savedReturnObject["granted"] = true
612
- case .denied:
613
- savedReturnObject["denied"] = true
614
- case .notDetermined:
615
- savedReturnObject["neverAsked"] = true
616
- case .restricted:
617
- savedReturnObject["restricted"] = true
618
- @unknown default:
619
- savedReturnObject["unknown"] = true
620
- }
621
-
622
- if (force && savedReturnObject["neverAsked"] != nil) {
623
- savedReturnObject["asked"] = true
624
-
625
- AVCaptureDevice.requestAccess(for: .video) { (authorized) in
626
- if (authorized) {
627
- savedReturnObject["granted"] = true
628
- } else {
629
- savedReturnObject["denied"] = true
630
- }
631
- call.resolve(savedReturnObject)
632
- }
633
- } else {
634
- call.resolve(savedReturnObject)
635
- }
636
- }
637
- }
638
109
 
110
+ /*
639
111
  @objc func openAppSettings(_ call: CAPPluginCall) {
640
112
  guard let settingsUrl = URL(string: UIApplication.openSettingsURLString) else {
641
113
  return
@@ -649,66 +121,10 @@ public class CorePlugin: CAPPlugin, AVCaptureMetadataOutputObjectsDelegate {
649
121
  }
650
122
  }
651
123
  }
124
+ */
652
125
 
653
- @objc func enableTorch(_ call: CAPPluginCall) {
654
- guard let device = AVCaptureDevice.default(for: AVMediaType.video) else { return }
655
- guard device.hasTorch else { return }
656
- guard device.isTorchAvailable else { return }
657
-
658
- do {
659
- try device.lockForConfiguration()
660
-
661
- do {
662
- try device.setTorchModeOn(level: 1.0)
663
- } catch {
664
- print(error)
665
- }
666
-
667
- device.unlockForConfiguration()
668
- } catch {
669
- print(error)
670
- }
671
-
672
- call.resolve()
673
- }
674
-
675
- @objc func disableTorch(_ call: CAPPluginCall) {
676
- guard let device = AVCaptureDevice.default(for: AVMediaType.video) else { return }
677
- guard device.hasTorch else { return }
678
- guard device.isTorchAvailable else { return }
679
-
680
- do {
681
- try device.lockForConfiguration()
682
- device.torchMode = .off
683
-
684
- device.unlockForConfiguration()
685
- } catch {
686
- print(error)
687
- }
688
-
689
- call.resolve()
690
- }
691
-
692
- @objc func toggleTorch(_ call: CAPPluginCall) {
693
- guard let device = AVCaptureDevice.default(for: AVMediaType.video) else { return }
694
- guard device.hasTorch else { return }
695
- guard device.isTorchAvailable else { return }
696
126
 
697
- if (device.torchMode == .on) {
698
- self.disableTorch(call)
699
- } else {
700
- self.enableTorch(call)
701
- }
702
- }
703
127
 
704
- @objc func getTorchState(_ call: CAPPluginCall) {
705
- guard let device = AVCaptureDevice.default(for: AVMediaType.video) else { return }
706
128
 
707
- var result = PluginCallResultData()
708
-
709
- result["isEnabled"] = device.torchMode == .on
710
-
711
- call.resolve(result)
712
- }
713
129
 
714
130
  }