From 86abb43c3053e5e04d110adf181d6445d655be99 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Sat, 25 Mar 2017 11:26:16 -0400 Subject: [PATCH 1/3] Copy images to pasteboard as data, not UIImage. // FREEBIE --- .../src/Models/TSMessageAdapaters/TSPhotoAdapter.m | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/Signal/src/Models/TSMessageAdapaters/TSPhotoAdapter.m b/Signal/src/Models/TSMessageAdapaters/TSPhotoAdapter.m index 2a2c31d13..0acc5cda2 100644 --- a/Signal/src/Models/TSMessageAdapaters/TSPhotoAdapter.m +++ b/Signal/src/Models/TSMessageAdapaters/TSPhotoAdapter.m @@ -7,6 +7,7 @@ #import "JSQMediaItem+OWS.h" #import "TSAttachmentStream.h" #import +#import @interface TSPhotoAdapter () @@ -112,7 +113,18 @@ } if (action == @selector(copy:)) { - UIPasteboard.generalPasteboard.image = self.image; + OWSAssert(self.attachment.filePath.length > 0); + NSString *fileExtension = [self.attachment.filePath pathExtension]; + NSArray *utiTypes = (__bridge_transfer NSArray *)UTTypeCreateAllIdentifiersForTag( + kUTTagClassFilenameExtension, (__bridge CFStringRef)fileExtension, (CFStringRef) @"public.image"); + NSString *utiType = (NSString *)kUTTypeImage; + OWSAssert(utiTypes.count > 0); + if (utiTypes.count > 0) { + utiType = utiTypes[0]; + } + + NSData *data = [NSData dataWithContentsOfURL:self.attachment.mediaURL]; + [UIPasteboard.generalPasteboard setData:data forPasteboardType:utiType]; return; } else if (action == NSSelectorFromString(@"save:")) { UIImageWriteToSavedPhotosAlbum(self.image, nil, nil, nil); From 7aef297a27ad3343e669b72f9f347f721e0517df Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Sat, 25 Mar 2017 11:50:39 -0400 Subject: [PATCH 2/3] Cleanup copy to pasteboard of video and audio. // FREEBIE --- Signal/src/Models/TSMessageAdapaters/TSVideoAttachmentAdapter.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Signal/src/Models/TSMessageAdapaters/TSVideoAttachmentAdapter.m b/Signal/src/Models/TSMessageAdapaters/TSVideoAttachmentAdapter.m index be24d4746..eec46ed1a 100644 --- a/Signal/src/Models/TSMessageAdapaters/TSVideoAttachmentAdapter.m +++ b/Signal/src/Models/TSMessageAdapaters/TSVideoAttachmentAdapter.m @@ -246,6 +246,7 @@ if ([self isVideo]) { if (action == @selector(copy:)) { NSData *data = [NSData dataWithContentsOfURL:self.fileURL]; + // TODO: This assumes all videos are mp4. [UIPasteboard.generalPasteboard setData:data forPasteboardType:(NSString *)kUTTypeMPEG4]; return; } else if (action == NSSelectorFromString(@"save:")) { @@ -260,7 +261,6 @@ NSData *data = [NSData dataWithContentsOfURL:self.fileURL]; NSString *pasteboardType = [MIMETypeUtil getSupportedExtensionFromAudioMIMEType:self.contentType]; - [UIPasteboard.generalPasteboard setData:data forPasteboardType:(NSString *)UIPasteboardNameGeneral]; if ([pasteboardType isEqualToString:@"mp3"]) { [UIPasteboard.generalPasteboard setData:data forPasteboardType:(NSString *)kUTTypeMP3]; From e031e3c389dbcf66f33c335bbc5678c4d63f10b9 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Mon, 27 Mar 2017 11:54:40 -0400 Subject: [PATCH 3/3] Respond to CR. // FREEBIE --- Signal/src/Models/TSMessageAdapaters/TSPhotoAdapter.m | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Signal/src/Models/TSMessageAdapaters/TSPhotoAdapter.m b/Signal/src/Models/TSMessageAdapaters/TSPhotoAdapter.m index 0acc5cda2..0055170ae 100644 --- a/Signal/src/Models/TSMessageAdapaters/TSPhotoAdapter.m +++ b/Signal/src/Models/TSMessageAdapaters/TSPhotoAdapter.m @@ -113,6 +113,9 @@ } if (action == @selector(copy:)) { + // We should always copy to the pasteboard as data, not an UIImage. + // The pasteboard should has as specific as UTI type as possible and + // data support should be far more general than UIImage support. OWSAssert(self.attachment.filePath.length > 0); NSString *fileExtension = [self.attachment.filePath pathExtension]; NSArray *utiTypes = (__bridge_transfer NSArray *)UTTypeCreateAllIdentifiersForTag(