zashi-ios-wallet-private/secant/Dependencies/CaptureDevice/CaptureDeviceLiveKey.swift

39 lines
1.1 KiB
Swift

//
// CaptureDeviceLiveKey.swift
// secant-testnet
//
// Created by Lukáš Korba on 11.11.2022.
//
import AVFoundation
import ComposableArchitecture
extension CaptureDeviceClient: DependencyKey {
static let liveValue = Self(
isTorchAvailable: {
guard let videoCaptureDevice = AVCaptureDevice.default(for: .video) else {
throw CaptureDeviceClientError.captureDeviceFailed
}
return videoCaptureDevice.hasTorch
},
torch: { isTorchOn in
guard let videoCaptureDevice = AVCaptureDevice.default(for: .video) else {
throw CaptureDeviceClientError.captureDeviceFailed
}
guard videoCaptureDevice.hasTorch else {
throw CaptureDeviceClientError.torchUnavailable
}
do {
try videoCaptureDevice.lockForConfiguration()
videoCaptureDevice.torchMode = isTorchOn ? .on : .off
videoCaptureDevice.unlockForConfiguration()
} catch {
throw CaptureDeviceClientError.lockFailed
}
}
)
}