From ebf500d80527f5dc246bba223ac150251e4395d7 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Fri, 19 May 2017 14:10:12 -0400 Subject: [PATCH] Respond to CR. // FREEBIE --- .../TSMessageAdapaters/JSQMediaItem+OWS.h | 2 +- .../TSMessageAdapaters/JSQMediaItem+OWS.m | 9 ++--- .../TSMessageAdapaters/TSAnimatedAdapter.h | 2 +- .../TSMessageAdapaters/TSAnimatedAdapter.m | 33 +++++++++++++++++-- .../TSMessageAdapaters/TSPhotoAdapter.m | 28 ++++++++++++++-- 5 files changed, 63 insertions(+), 11 deletions(-) diff --git a/Signal/src/Models/TSMessageAdapaters/JSQMediaItem+OWS.h b/Signal/src/Models/TSMessageAdapaters/JSQMediaItem+OWS.h index a4b4c7e1e..81cb10710 100644 --- a/Signal/src/Models/TSMessageAdapaters/JSQMediaItem+OWS.h +++ b/Signal/src/Models/TSMessageAdapaters/JSQMediaItem+OWS.h @@ -12,6 +12,6 @@ - (CGSize)ows_adjustBubbleSize:(CGSize)bubbleSize forImageSize:(CGSize)imageSize; -- (CGSize)sizeOfImageAtURL:(NSURL *_Nullable)imageURL; +- (CGSize)sizeOfImageAtURL:(NSURL *)imageURL; @end diff --git a/Signal/src/Models/TSMessageAdapaters/JSQMediaItem+OWS.m b/Signal/src/Models/TSMessageAdapaters/JSQMediaItem+OWS.m index 3919c4bb0..da6ff7cfe 100644 --- a/Signal/src/Models/TSMessageAdapaters/JSQMediaItem+OWS.m +++ b/Signal/src/Models/TSMessageAdapaters/JSQMediaItem+OWS.m @@ -38,15 +38,14 @@ return bubbleSize; } -- (CGSize)sizeOfImageAtURL:(NSURL *_Nullable)imageURL +- (CGSize)sizeOfImageAtURL:(NSURL *)imageURL { - if (!imageURL) { - return CGSizeZero; - } + OWSAssert(imageURL); // With CGImageSource we avoid loading the whole image into memory. CGImageSourceRef source = CGImageSourceCreateWithURL((CFURLRef)imageURL, NULL); if (!source) { + OWSAssert(0); return CGSizeZero; } @@ -61,6 +60,8 @@ NSNumber *height = properties[(NSString *)kCGImagePropertyPixelHeight]; if (width && height) { imageSize = CGSizeMake(width.floatValue, height.floatValue); + } else { + OWSAssert(0); } } CFRelease(source); diff --git a/Signal/src/Models/TSMessageAdapaters/TSAnimatedAdapter.h b/Signal/src/Models/TSMessageAdapaters/TSAnimatedAdapter.h index ba3bb2513..4d2456c9d 100644 --- a/Signal/src/Models/TSMessageAdapaters/TSAnimatedAdapter.h +++ b/Signal/src/Models/TSMessageAdapaters/TSAnimatedAdapter.h @@ -12,7 +12,7 @@ NS_ASSUME_NONNULL_BEGIN @interface TSAnimatedAdapter : JSQMediaItem -@property (nonatomic) NSString *attachmentId; +@property (nonatomic, readonly) NSString *attachmentId; - (instancetype)initWithAttachment:(TSAttachmentStream *)attachment incoming:(BOOL)incoming; diff --git a/Signal/src/Models/TSMessageAdapaters/TSAnimatedAdapter.m b/Signal/src/Models/TSMessageAdapaters/TSAnimatedAdapter.m index 0d980423e..7e8222b45 100644 --- a/Signal/src/Models/TSMessageAdapaters/TSAnimatedAdapter.m +++ b/Signal/src/Models/TSMessageAdapaters/TSAnimatedAdapter.m @@ -21,6 +21,7 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, nullable) AttachmentUploadView *attachmentUploadView; @property (nonatomic) BOOL incoming; @property (nonatomic) CGSize imageSize; +@property (nonatomic) NSString *attachmentId; // See comments on OWSMessageMediaAdapter. @property (nonatomic, nullable, weak) id lastPresentingCell; @@ -40,7 +41,7 @@ NS_ASSUME_NONNULL_BEGIN _attachment = attachment; _attachmentId = attachment.uniqueId; _incoming = incoming; - _imageSize = [self sizeOfImageAtURL:attachment.mediaURL]; + _imageSize = attachment.mediaURL ? [self sizeOfImageAtURL:attachment.mediaURL] : CGSizeZero; } return self; @@ -100,6 +101,11 @@ NS_ASSUME_NONNULL_BEGIN if (self.cachedImageView == nil) { // Use Flipboard FLAnimatedImage library to display gifs NSData *fileData = [NSData dataWithContentsOfURL:[self.attachment mediaURL]]; + if (!fileData) { + DDLogError(@"%@ Could not load image: %@", [self tag], [self.attachment mediaURL]); + OWSAssert(0); + return nil; + } FLAnimatedImage *animatedGif = [FLAnimatedImage animatedImageWithGIFData:fileData]; FLAnimatedImageView *imageView = [[FLAnimatedImageView alloc] init]; imageView.animatedImage = animatedGif; @@ -141,11 +147,20 @@ NS_ASSUME_NONNULL_BEGIN utiType = (NSString *)kUTTypeGIF; } - UIPasteboard *pasteboard = UIPasteboard.generalPasteboard; NSData *data = [NSData dataWithContentsOfURL:[self.attachment mediaURL]]; - [pasteboard setData:data forPasteboardType:utiType]; + if (!data) { + DDLogError(@"%@ Could not load image data: %@", [self tag], [self.attachment mediaURL]); + OWSAssert(0); + return; + } + [UIPasteboard.generalPasteboard setData:data forPasteboardType:utiType]; } else if (action == NSSelectorFromString(@"save:")) { NSData *data = [NSData dataWithContentsOfURL:[self.attachment mediaURL]]; + if (!data) { + DDLogError(@"%@ Could not load image data: %@", [self tag], [self.attachment mediaURL]); + OWSAssert(0); + return; + } ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; [library writeImageDataToSavedPhotosAlbum:data metadata:nil @@ -161,6 +176,18 @@ NS_ASSUME_NONNULL_BEGIN } } +#pragma mark - Logging + ++ (NSString *)tag +{ + return [NSString stringWithFormat:@"[%@]", self.class]; +} + +- (NSString *)tag +{ + return self.class.tag; +} + @end NS_ASSUME_NONNULL_END diff --git a/Signal/src/Models/TSMessageAdapaters/TSPhotoAdapter.m b/Signal/src/Models/TSMessageAdapaters/TSPhotoAdapter.m index dd738f151..34faa6185 100644 --- a/Signal/src/Models/TSMessageAdapaters/TSPhotoAdapter.m +++ b/Signal/src/Models/TSMessageAdapaters/TSPhotoAdapter.m @@ -31,7 +31,7 @@ NS_ASSUME_NONNULL_BEGIN - (instancetype)initWithAttachment:(TSAttachmentStream *)attachment incoming:(BOOL)incoming { - self = [super initWithImage:nil]; + self = [super init]; if (!self) { return self; @@ -41,7 +41,7 @@ NS_ASSUME_NONNULL_BEGIN _attachment = attachment; _attachmentId = attachment.uniqueId; _incoming = incoming; - _imageSize = [self sizeOfImageAtURL:attachment.mediaURL]; + _imageSize = attachment.mediaURL ? [self sizeOfImageAtURL:attachment.mediaURL] : CGSizeZero; return self; } @@ -74,6 +74,8 @@ NS_ASSUME_NONNULL_BEGIN if (self.cachedImageView == nil) { UIImage *image = self.attachment.image; if (!image) { + DDLogError(@"%@ Could not load image: %@", [self tag], [self.attachment mediaURL]); + OWSAssert(0); return nil; } CGSize size = [self mediaViewDisplaySize]; @@ -125,10 +127,20 @@ NS_ASSUME_NONNULL_BEGIN utiType = (NSString *)kUTTypeImage; } NSData *data = [NSData dataWithContentsOfURL:self.attachment.mediaURL]; + if (!data) { + DDLogError(@"%@ Could not load image data: %@", [self tag], [self.attachment mediaURL]); + OWSAssert(0); + return; + } [UIPasteboard.generalPasteboard setData:data forPasteboardType:utiType]; return; } else if (action == NSSelectorFromString(@"save:")) { NSData *data = [NSData dataWithContentsOfURL:[self.attachment mediaURL]]; + if (!data) { + DDLogError(@"%@ Could not load image data: %@", [self tag], [self.attachment mediaURL]); + OWSAssert(0); + return; + } ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; [library writeImageDataToSavedPhotosAlbum:data metadata:nil @@ -161,6 +173,18 @@ NS_ASSUME_NONNULL_BEGIN } } +#pragma mark - Logging + ++ (NSString *)tag +{ + return [NSString stringWithFormat:@"[%@]", self.class]; +} + +- (NSString *)tag +{ + return self.class.tag; +} + @end NS_ASSUME_NONNULL_END