Add iOS
This commit is contained in:
69
ios/PhotoCaptureDelegate.swift
Normal file
69
ios/PhotoCaptureDelegate.swift
Normal file
@@ -0,0 +1,69 @@
|
||||
//
|
||||
// PhotoCaptureDelegate.swift
|
||||
// Cuvent
|
||||
//
|
||||
// Created by Marc Rousavy on 15.12.20.
|
||||
// Copyright © 2020 Facebook. All rights reserved.
|
||||
//
|
||||
|
||||
import AVFoundation
|
||||
|
||||
private var delegatesReferences: [NSObject] = []
|
||||
|
||||
class PhotoCaptureDelegate: NSObject, AVCapturePhotoCaptureDelegate {
|
||||
private let promise: Promise
|
||||
|
||||
required init(promise: Promise) {
|
||||
self.promise = promise
|
||||
super.init()
|
||||
delegatesReferences.append(self)
|
||||
}
|
||||
|
||||
func photoOutput(_: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?) {
|
||||
defer {
|
||||
delegatesReferences.removeAll(where: { $0 == self })
|
||||
}
|
||||
if let error = error {
|
||||
return promise.reject(error: .capture(.unknown(message: error.localizedDescription)), cause: error as NSError)
|
||||
}
|
||||
|
||||
let error = ErrorPointer(nilLiteral: ())
|
||||
guard let tempFilePath = RCTTempFilePath("jpeg", error)
|
||||
else {
|
||||
return promise.reject(error: .capture(.createTempFileError), cause: error?.pointee)
|
||||
}
|
||||
let url = URL(string: "file://\(tempFilePath)")!
|
||||
|
||||
guard let data = photo.fileDataRepresentation()
|
||||
else {
|
||||
return promise.reject(error: .capture(.fileError))
|
||||
}
|
||||
|
||||
do {
|
||||
try data.write(to: url)
|
||||
let exif = photo.metadata["{Exif}"] as? [String: Any]
|
||||
let width = exif?["PixelXDimension"]
|
||||
let height = exif?["PixelYDimension"]
|
||||
|
||||
return promise.resolve([
|
||||
"path": tempFilePath,
|
||||
"width": width as Any,
|
||||
"height": height as Any,
|
||||
"isRawPhoto": photo.isRawPhoto,
|
||||
"metadata": photo.metadata,
|
||||
"thumbnail": photo.embeddedThumbnailPhotoFormat as Any,
|
||||
])
|
||||
} catch {
|
||||
return promise.reject(error: .capture(.fileError), cause: error as NSError)
|
||||
}
|
||||
}
|
||||
|
||||
func photoOutput(_: AVCapturePhotoOutput, didFinishCaptureFor _: AVCaptureResolvedPhotoSettings, error: Error?) {
|
||||
defer {
|
||||
delegatesReferences.removeAll(where: { $0 == self })
|
||||
}
|
||||
if let error = error {
|
||||
return promise.reject(error: .capture(.unknown(message: error.localizedDescription)), cause: error as NSError)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user