From 54d2d85ebb2b209e2a5895c20fde50aa4bbc3a35 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Wed, 12 Apr 2017 17:01:18 -0400 Subject: [PATCH] Update SignalAttachment to allow arbitrary attachments. // FREEBIE --- .../ViewControllers/SignalAttachment.swift | 55 ++++--------------- 1 file changed, 10 insertions(+), 45 deletions(-) diff --git a/Signal/src/ViewControllers/SignalAttachment.swift b/Signal/src/ViewControllers/SignalAttachment.swift index 6d48fecbe..5753f37b2 100644 --- a/Signal/src/ViewControllers/SignalAttachment.swift +++ b/Signal/src/ViewControllers/SignalAttachment.swift @@ -54,8 +54,6 @@ enum TSImageQuality { // [SignalAttachment hasError] will be true for non-valid attachments. // // TODO: Perhaps do conversion off the main thread? -// TODO: Show error on error. -// TODO: Show progress on upload. class SignalAttachment: NSObject { static let TAG = "[SignalAttachment]" @@ -195,8 +193,6 @@ class SignalAttachment: NSObject { return fileExtension.takeRetainedValue() as String } - private static let allowArbitraryAttachments = false - // Returns the set of UTIs that correspond to valid _input_ image formats // for Signal attachments. // @@ -209,17 +205,7 @@ class SignalAttachment: NSObject { // Returns the set of UTIs that correspond to valid _output_ image formats // for Signal attachments. private class var outputImageUTISet: Set { - if allowArbitraryAttachments { - return MIMETypeUtil.supportedImageUTITypes().union(animatedImageUTISet) - } else { - // Until Android client can handle arbitrary attachments, - // restrict output. - return [ - kUTTypeJPEG as String, - kUTTypeGIF as String, - kUTTypePNG as String - ] - } + return MIMETypeUtil.supportedImageUTITypes().union(animatedImageUTISet) } // Returns the set of UTIs that correspond to valid animated image formats @@ -231,32 +217,13 @@ class SignalAttachment: NSObject { // Returns the set of UTIs that correspond to valid video formats // for Signal attachments. private class var videoUTISet: Set { - if allowArbitraryAttachments { - return MIMETypeUtil.supportedVideoUTITypes() - } else { - return [ - kUTTypeMPEG4 as String - ] - } + return MIMETypeUtil.supportedVideoUTITypes() } // Returns the set of UTIs that correspond to valid audio formats // for Signal attachments. private class var audioUTISet: Set { - if allowArbitraryAttachments { - return MIMETypeUtil.supportedAudioUTITypes() - } else { - return [ - kUTTypeMP3 as String, - kUTTypeMPEG4Audio as String - ] - } - } - - // Returns the set of UTIs that correspond to valid input formats - // for Signal attachments. - public class var validInputUTISet: Set { - return inputImageUTISet.union(videoUTISet.union(audioUTISet)) + return MIMETypeUtil.supportedAudioUTITypes() } public var isImage: Bool { @@ -279,13 +246,7 @@ class SignalAttachment: NSObject { guard UIPasteboard.general.numberOfItems >= 1 else { return false } - // If pasteboard contains multiple items, use only the first. - let itemSet = IndexSet(integer:0) - guard let pasteboardUTITypes = UIPasteboard.general.types(forItemSet:itemSet) else { - return false - } - let pasteboardUTISet = Set(pasteboardUTITypes[0]) - return pasteboardUTISet.intersection(validInputUTISet).count > 0 + return true } // Returns an attachment from the pasteboard, or nil if no attachment @@ -330,9 +291,13 @@ class SignalAttachment: NSObject { return audioAttachment(data : data, dataUTI : dataUTI) } } - // TODO: We could handle generic attachments at this point. - return nil + let dataUTI = pasteboardUTISet[pasteboardUTISet.startIndex] + guard let data = dataForFirstPasteboardItem(dataUTI:dataUTI) else { + Logger.verbose("\(TAG) Missing expected pasteboard data for UTI: \(dataUTI)") + return nil + } + return genericAttachment(data : data, dataUTI : dataUTI) } // This method should only be called for dataUTIs that