damus

nostr ios client
git clone git://jb55.com/damus
Log | Files | Refs | README | LICENSE

CameraController.swift (2422B)


      1 //
      2 //  CameraController.swift
      3 //  damus
      4 //
      5 //  Created by KernelKind on 2/15/24.
      6 //
      7 
      8 import UIKit
      9 import SwiftUI
     10 
     11 struct CameraController: UIViewControllerRepresentable {
     12     
     13     @Environment(\.presentationMode)
     14     @Binding private var presentationMode
     15 
     16     let uploader: MediaUploader
     17     let done: () -> Void
     18     var imagesOnly: Bool = false
     19 
     20     final class Coordinator: NSObject, UINavigationControllerDelegate, UIImagePickerControllerDelegate {
     21         let parent: CameraController
     22         
     23         init(_ parent: CameraController) {
     24             self.parent = parent
     25         }
     26         
     27         func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
     28             if !parent.imagesOnly, let videoURL = info[UIImagePickerController.InfoKey.mediaURL] as? URL {
     29                 // Handle the selected video
     30                 UISaveVideoAtPathToSavedPhotosAlbum(videoURL.relativePath, nil, nil, nil)
     31             } else if let cameraImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
     32                 let orientedImage = cameraImage.fixOrientation()
     33                 UIImageWriteToSavedPhotosAlbum(orientedImage, nil, nil, nil)
     34             } else if let editedImage = info[UIImagePickerController.InfoKey.editedImage] as? UIImage {
     35                 let orientedImage = editedImage.fixOrientation()
     36                 UIImageWriteToSavedPhotosAlbum(orientedImage, nil, nil, nil)
     37             }
     38             
     39             parent.done()
     40         }
     41 
     42         func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
     43             parent.presentationMode.dismiss()
     44         }
     45     }
     46     
     47     func makeCoordinator() -> Coordinator {
     48         return Coordinator(self)
     49     }
     50 
     51     func makeUIViewController(context: UIViewControllerRepresentableContext<CameraController>) -> UIImagePickerController {
     52         let picker = UIImagePickerController()
     53         picker.sourceType = .camera
     54         picker.mediaTypes = ["public.image", "com.compuserve.gif"]
     55         if uploader.supportsVideo && !imagesOnly {
     56             picker.mediaTypes.append("public.movie")
     57         }
     58         picker.delegate = context.coordinator
     59         return picker
     60     }
     61 
     62     func updateUIViewController(_ uiViewController: UIImagePickerController,
     63                                 context: UIViewControllerRepresentableContext<CameraController>) {
     64 
     65     }
     66 }