From f7626939e6e55ac21c8095efba6b0c64e6d344cd Mon Sep 17 00:00:00 2001 From: Morgan Pretty Date: Wed, 4 Sep 2024 14:09:11 +1000 Subject: [PATCH] Fixed a crash which could occur when taking a photo via the app failed --- .../Media Viewing & Editing/PhotoCapture.swift | 15 ++++++++++----- .../PhotoCaptureViewController.swift | 6 ++---- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/Session/Media Viewing & Editing/PhotoCapture.swift b/Session/Media Viewing & Editing/PhotoCapture.swift index dde25b335..a500ee7c9 100644 --- a/Session/Media Viewing & Editing/PhotoCapture.swift +++ b/Session/Media Viewing & Editing/PhotoCapture.swift @@ -92,14 +92,13 @@ class PhotoCapture: NSObject { self?.session.beginConfiguration() defer { self?.session.commitConfiguration() } - try self?.updateCurrentInput(position: .back) + do { try self?.updateCurrentInput(position: .back) } + catch { throw PhotoCaptureError.initializationFailed } guard let photoOutput = self?.captureOutput.photoOutput, self?.session.canAddOutput(photoOutput) == true - else { - throw PhotoCaptureError.initializationFailed - } + else { throw PhotoCaptureError.initializationFailed } if let connection = photoOutput.connection(with: .video) { if connection.isVideoStabilizationSupported { @@ -610,7 +609,13 @@ class PhotoCaptureOutputAdaptee: NSObject, ImageCaptureOutput { } func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?) { - var data = photo.fileDataRepresentation()! + guard var data: Data = photo.fileDataRepresentation() else { + DispatchQueue.main.async { + self.delegate?.captureOutputDidFinishProcessing(photoData: nil, error: error) + } + return + } + // Call normalized here to fix the orientation if let srcImage = UIImage(data: data) { data = srcImage.normalizedImage().jpegData(compressionQuality: 1.0)! diff --git a/Session/Media Viewing & Editing/PhotoCaptureViewController.swift b/Session/Media Viewing & Editing/PhotoCaptureViewController.swift index afc401df6..a6de5d021 100644 --- a/Session/Media Viewing & Editing/PhotoCaptureViewController.swift +++ b/Session/Media Viewing & Editing/PhotoCaptureViewController.swift @@ -12,14 +12,12 @@ protocol PhotoCaptureViewControllerDelegate: AnyObject { func photoCaptureViewControllerDidCancel(_ photoCaptureViewController: PhotoCaptureViewController) } -enum PhotoCaptureError: Error { +enum PhotoCaptureError: Error, CustomStringConvertible { case assertionError(description: String) case initializationFailed case captureFailed -} -extension PhotoCaptureError: LocalizedError { - var localizedDescription: String { + var description: String { switch self { case .initializationFailed: return NSLocalizedString("PHOTO_CAPTURE_UNABLE_TO_INITIALIZE_CAMERA", comment: "alert title")