conversations-classic-ios/ConversationsClassic/View/Main/Conversation/Attachments/MediaPicker/CameraPicker.swift

50 lines
1.8 KiB
Swift
Raw Normal View History

2024-08-17 10:39:40 +00:00
import Foundation
import Photos
import SwiftUI
struct CameraPicker: UIViewControllerRepresentable {
2024-08-17 16:25:35 +00:00
var completionHandler: (Data, GalleryMediaType) -> Void
2024-08-17 10:39:40 +00:00
func makeUIViewController(context: Context) -> UIImagePickerController {
let picker = UIImagePickerController()
picker.sourceType = .camera
picker.delegate = context.coordinator
picker.mediaTypes = [UTType.movie.identifier, UTType.image.identifier]
picker.videoQuality = .typeHigh
picker.videoMaximumDuration = Const.videoDurationLimit
picker.view.backgroundColor = .clear
return picker
}
func updateUIViewController(_: UIImagePickerController, context _: Context) {}
func makeCoordinator() -> Coordinator {
Coordinator(self)
}
class Coordinator: NSObject, UINavigationControllerDelegate, UIImagePickerControllerDelegate {
let parent: CameraPicker
init(_ parent: CameraPicker) {
self.parent = parent
}
func imagePickerController(_: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any]) {
// swiftlint:disable:next force_cast
let mediaType = info[.mediaType] as! String
2024-08-17 16:25:35 +00:00
if mediaType == UTType.image.identifier {
if let image = info[.originalImage] as? UIImage {
let data = image.jpegData(compressionQuality: 1.0) ?? Data()
parent.completionHandler(data, .photo)
}
} else if mediaType == UTType.movie.identifier {
if let url = info[.mediaURL] as? URL {
let data = try? Data(contentsOf: url)
parent.completionHandler(data ?? Data(), .video)
}
}
2024-08-17 10:39:40 +00:00
}
}
}