From 59e037986a3b1c5840ffda9005630fe9c52f247f Mon Sep 17 00:00:00 2001 From: Michael Kirk Date: Mon, 14 Jan 2019 12:15:13 -0700 Subject: [PATCH 1/2] Show error when image request fails --- .../PhotoLibrary/ImagePickerController.swift | 12 +++++++++--- Signal/translations/en.lproj/Localizable.strings | 6 +++--- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/Signal/src/ViewControllers/PhotoLibrary/ImagePickerController.swift b/Signal/src/ViewControllers/PhotoLibrary/ImagePickerController.swift index 57c406c2f..3e99aab4a 100644 --- a/Signal/src/ViewControllers/PhotoLibrary/ImagePickerController.swift +++ b/Signal/src/ViewControllers/PhotoLibrary/ImagePickerController.swift @@ -317,10 +317,16 @@ class ImagePickerGridController: UICollectionViewController, PhotoLibraryDelegat let attachmentPromises: [Promise] = assets.map({ return photoCollectionContents.outgoingAttachment(for: $0) }) - when(fulfilled: attachmentPromises) - .map { attachments in + + firstly { + when(fulfilled: attachmentPromises) + }.map { attachments in + Logger.debug("built all attachments") self.didComplete(withAttachments: attachments) - }.retainUntilComplete() + }.catch { error in + Logger.error("failed to prepare attachments. error: \(error)") + OWSAlerts.showAlert(title: NSLocalizedString("IMAGE_PICKER_FAILED_TO_PROCESS_ATTACHMENTS", comment: "alert title")) + }.retainUntilComplete() } private func didComplete(withAttachments attachments: [SignalAttachment]) { diff --git a/Signal/translations/en.lproj/Localizable.strings b/Signal/translations/en.lproj/Localizable.strings index 0f5fe12e5..fc1c1050b 100644 --- a/Signal/translations/en.lproj/Localizable.strings +++ b/Signal/translations/en.lproj/Localizable.strings @@ -1086,6 +1086,9 @@ /* Label for crop button in image editor. */ "IMAGE_EDITOR_CROP_BUTTON" = "Crop"; +/* alert title */ +"IMAGE_PICKER_FAILED_TO_PROCESS_ATTACHMENTS" = "Failed to select attachment."; + /* Call setup status label */ "IN_CALL_CONNECTING" = "Connecting…"; @@ -2402,9 +2405,6 @@ /* Title for the alert indicating that user should upgrade iOS. */ "UPGRADE_IOS_ALERT_TITLE" = "Upgrade iOS"; -/* No comment provided by engineer. */ -"Upgrading Signal ..." = "Upgrading Signal…"; - /* button text for back button on verification view */ "VERIFICATION_BACK_BUTTON" = "Back"; From a497e44cef37ab32b29583cd1ce64ba7dfb7d3ea Mon Sep 17 00:00:00 2001 From: Michael Kirk Date: Mon, 14 Jan 2019 12:19:39 -0700 Subject: [PATCH 2/2] Fix iCloud download --- .../ViewControllers/PhotoLibrary/PhotoLibrary.swift | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/Signal/src/ViewControllers/PhotoLibrary/PhotoLibrary.swift b/Signal/src/ViewControllers/PhotoLibrary/PhotoLibrary.swift index 14d79b05f..0a2d13729 100644 --- a/Signal/src/ViewControllers/PhotoLibrary/PhotoLibrary.swift +++ b/Signal/src/ViewControllers/PhotoLibrary/PhotoLibrary.swift @@ -142,7 +142,12 @@ class PhotoCollectionContents { private func requestImageDataSource(for asset: PHAsset) -> Promise<(dataSource: DataSource, dataUTI: String)> { return Promise { resolver in - _ = imageManager.requestImageData(for: asset, options: nil) { imageData, dataUTI, _, _ in + + let options: PHImageRequestOptions = PHImageRequestOptions() + options.isNetworkAccessAllowed = true + + _ = imageManager.requestImageData(for: asset, options: options) { imageData, dataUTI, orientation, info in + guard let imageData = imageData else { resolver.reject(PhotoLibraryError.assertionError(description: "imageData was unexpectedly nil")) return @@ -166,7 +171,10 @@ class PhotoCollectionContents { private func requestVideoDataSource(for asset: PHAsset) -> Promise<(dataSource: DataSource, dataUTI: String)> { return Promise { resolver in - _ = imageManager.requestExportSession(forVideo: asset, options: nil, exportPreset: AVAssetExportPresetMediumQuality) { exportSession, _ in + let options: PHVideoRequestOptions = PHVideoRequestOptions() + options.isNetworkAccessAllowed = true + + _ = imageManager.requestExportSession(forVideo: asset, options: options, exportPreset: AVAssetExportPresetMediumQuality) { exportSession, foo in guard let exportSession = exportSession else { resolver.reject(PhotoLibraryError.assertionError(description: "exportSession was unexpectedly nil"))