diff --git a/SignalMessaging/ViewControllers/SharingThreadPickerViewController.m b/SignalMessaging/ViewControllers/SharingThreadPickerViewController.m index ce97c94bc..5fe6e46af 100644 --- a/SignalMessaging/ViewControllers/SharingThreadPickerViewController.m +++ b/SignalMessaging/ViewControllers/SharingThreadPickerViewController.m @@ -189,7 +189,7 @@ typedef void (^SendMessageBlock)(SendCompletionBlock completion); OWSAssertDebug(self.attachments.count > 0); if (self.attachments.count > 1) { - return nil; + return NO; } OWSAssertDebug(self.attachments.count == 1); SignalAttachment *attachment = self.attachments.firstObject; diff --git a/SignalShareExtension/ShareViewController.swift b/SignalShareExtension/ShareViewController.swift index 9904206d5..a9fdf49fe 100644 --- a/SignalShareExtension/ShareViewController.swift +++ b/SignalShareExtension/ShareViewController.swift @@ -653,6 +653,7 @@ public class ShareViewController: UIViewController, ShareViewDelegate, SAEFailed } var visualMediaItemProviders = [NSItemProvider]() + var hasNonVisualMedia = false for attachment in attachments { guard let itemProvider = attachment as? NSItemProvider else { owsFailDebug("Unexpected attachment type: \(String(describing: attachment))") @@ -660,9 +661,13 @@ public class ShareViewController: UIViewController, ShareViewDelegate, SAEFailed } if isVisualMediaItem(itemProvider: itemProvider) { visualMediaItemProviders.append(itemProvider) + } else { + hasNonVisualMedia = true } } - if visualMediaItemProviders.count > 0 { + // Only allow multiple-attachment sends if all attachments + // are visual media. + if visualMediaItemProviders.count > 0 && !hasNonVisualMedia { return visualMediaItemProviders } @@ -969,12 +974,12 @@ public class ShareViewController: UIViewController, ShareViewDelegate, SAEFailed loadPromises.append(loadPromise) } return when(fulfilled: loadPromises) - }.then { (signalAttachments) -> Promise<[SignalAttachment]> in + }.map { (signalAttachments) -> [SignalAttachment] in guard signalAttachments.count > 0 else { let error = ShareViewControllerError.assertionError(description: "no valid attachments") - return Promise(error: error) + throw error } - return Promise.value(signalAttachments) + return signalAttachments } promise.retainUntilComplete() return promise