Respond to CR.

pull/1/head
Matthew Chen 8 years ago
parent 89db8b3a44
commit 11b4848530

@ -2482,9 +2482,8 @@ typedef NS_ENUM(NSInteger, MessagesRangeSizeMode) {
[dataSource setSourceFilename:filename]; [dataSource setSourceFilename:filename];
// "Document picker" attachments _SHOULD NOT_ be resized, if possible. // "Document picker" attachments _SHOULD NOT_ be resized, if possible.
SignalAttachment *attachment = [SignalAttachment attachmentWithDataSource:dataSource SignalAttachment *attachment =
dataUTI:type [SignalAttachment attachmentWithDataSource:dataSource dataUTI:type imageQuality:TSImageQualityOriginal];
attachmentQuality:TSAttachmentQualityOriginal];
[self tryToSendAttachmentIfApproved:attachment]; [self tryToSendAttachmentIfApproved:attachment];
} }
@ -2613,7 +2612,7 @@ typedef NS_ENUM(NSInteger, MessagesRangeSizeMode) {
[SignalAttachment imageAttachmentWithImage:imageFromCamera [SignalAttachment imageAttachmentWithImage:imageFromCamera
dataUTI:(NSString *)kUTTypeJPEG dataUTI:(NSString *)kUTTypeJPEG
filename:filename filename:filename
attachmentQuality:TSAttachmentQualityCompact]; imageQuality:TSImageQualityCompact];
if (!attachment || [attachment hasError]) { if (!attachment || [attachment hasError]) {
DDLogWarn(@"%@ %s Invalid attachment: %@.", DDLogWarn(@"%@ %s Invalid attachment: %@.",
self.logTag, self.logTag,
@ -2664,7 +2663,7 @@ typedef NS_ENUM(NSInteger, MessagesRangeSizeMode) {
SignalAttachment *attachment = SignalAttachment *attachment =
[SignalAttachment attachmentWithDataSource:dataSource [SignalAttachment attachmentWithDataSource:dataSource
dataUTI:dataUTI dataUTI:dataUTI
attachmentQuality:TSAttachmentQualityMedium]; imageQuality:TSImageQualityMedium];
[self dismissViewControllerAnimated:YES [self dismissViewControllerAnimated:YES
completion:^{ completion:^{
OWSAssert([NSThread isMainThread]); OWSAssert([NSThread isMainThread]);
@ -2754,7 +2753,7 @@ typedef NS_ENUM(NSInteger, MessagesRangeSizeMode) {
SignalAttachment *attachment = SignalAttachment *attachment =
[SignalAttachment attachmentWithDataSource:dataSource [SignalAttachment attachmentWithDataSource:dataSource
dataUTI:(NSString *)kUTTypeMPEG4 dataUTI:(NSString *)kUTTypeMPEG4
attachmentQuality:TSAttachmentQualityOriginal]; imageQuality:TSImageQualityOriginal];
if (!attachment || [attachment hasError]) { if (!attachment || [attachment hasError]) {
DDLogError(@"%@ %s Invalid attachment: %@.", DDLogError(@"%@ %s Invalid attachment: %@.",
self.logTag, self.logTag,
@ -3858,7 +3857,7 @@ typedef NS_ENUM(NSInteger, MessagesRangeSizeMode) {
DataSource *_Nullable dataSource = [DataSourceValue dataSourceWithOversizeText:text]; DataSource *_Nullable dataSource = [DataSourceValue dataSourceWithOversizeText:text];
SignalAttachment *attachment = [SignalAttachment attachmentWithDataSource:dataSource SignalAttachment *attachment = [SignalAttachment attachmentWithDataSource:dataSource
dataUTI:kOversizeTextAttachmentUTI dataUTI:kOversizeTextAttachmentUTI
attachmentQuality:TSAttachmentQualityOriginal]; imageQuality:TSImageQualityOriginal];
message = message =
[ThreadUtil sendMessageWithAttachment:attachment inThread:self.thread messageSender:self.messageSender]; [ThreadUtil sendMessageWithAttachment:attachment inThread:self.thread messageSender:self.messageSender];
} else { } else {

@ -378,9 +378,8 @@ NS_ASSUME_NONNULL_BEGIN
NSString *utiType = [MIMETypeUtil utiTypeForFileExtension:filename.pathExtension]; NSString *utiType = [MIMETypeUtil utiTypeForFileExtension:filename.pathExtension];
DataSource *_Nullable dataSource = [DataSourcePath dataSourceWithFilePath:filePath]; DataSource *_Nullable dataSource = [DataSourcePath dataSourceWithFilePath:filePath];
[dataSource setSourceFilename:filename]; [dataSource setSourceFilename:filename];
SignalAttachment *attachment = [SignalAttachment attachmentWithDataSource:dataSource SignalAttachment *attachment =
dataUTI:utiType [SignalAttachment attachmentWithDataSource:dataSource dataUTI:utiType imageQuality:TSImageQualityOriginal];
attachmentQuality:TSAttachmentQualityOriginal];
OWSAssert(attachment); OWSAssert(attachment);
if ([attachment hasError]) { if ([attachment hasError]) {
DDLogError(@"attachment[%@]: %@", [attachment sourceFilename], [attachment errorName]); DDLogError(@"attachment[%@]: %@", [attachment sourceFilename], [attachment errorName]);
@ -645,7 +644,7 @@ NS_ASSUME_NONNULL_BEGIN
DataSource *_Nullable dataSource = [DataSourceValue dataSourceWithOversizeText:message]; DataSource *_Nullable dataSource = [DataSourceValue dataSourceWithOversizeText:message];
SignalAttachment *attachment = [SignalAttachment attachmentWithDataSource:dataSource SignalAttachment *attachment = [SignalAttachment attachmentWithDataSource:dataSource
dataUTI:kOversizeTextAttachmentUTI dataUTI:kOversizeTextAttachmentUTI
attachmentQuality:TSAttachmentQualityOriginal]; imageQuality:TSImageQualityOriginal];
[ThreadUtil sendMessageWithAttachment:attachment inThread:thread messageSender:messageSender]; [ThreadUtil sendMessageWithAttachment:attachment inThread:thread messageSender:messageSender];
} }
@ -671,9 +670,8 @@ NS_ASSUME_NONNULL_BEGIN
OWSMessageSender *messageSender = [Environment current].messageSender; OWSMessageSender *messageSender = [Environment current].messageSender;
DataSource *_Nullable dataSource = DataSource *_Nullable dataSource =
[DataSourceValue dataSourceWithData:[self createRandomNSDataOfSize:length] utiType:uti]; [DataSourceValue dataSourceWithData:[self createRandomNSDataOfSize:length] utiType:uti];
SignalAttachment *attachment = [SignalAttachment attachmentWithDataSource:dataSource SignalAttachment *attachment =
dataUTI:uti [SignalAttachment attachmentWithDataSource:dataSource dataUTI:uti imageQuality:TSImageQualityOriginal];
attachmentQuality:TSAttachmentQualityOriginal];
[ThreadUtil sendMessageWithAttachment:attachment inThread:thread messageSender:messageSender ignoreErrors:YES]; [ThreadUtil sendMessageWithAttachment:attachment inThread:thread messageSender:messageSender ignoreErrors:YES];
} }
+ (OWSSignalServiceProtosEnvelope *)createEnvelopeForThread:(TSThread *)thread + (OWSSignalServiceProtosEnvelope *)createEnvelopeForThread:(TSThread *)thread

@ -372,7 +372,7 @@ class GifPickerViewController: OWSViewController, UISearchBarDelegate, UICollect
owsFail("\(strongSelf.TAG) couldn't load asset.") owsFail("\(strongSelf.TAG) couldn't load asset.")
return return
} }
let attachment = SignalAttachment.imageAttachment(dataSource: dataSource, dataUTI: asset.rendition.utiType) let attachment = SignalAttachment.attachment(dataSource: dataSource, dataUTI: asset.rendition.utiType, imageQuality: .original)
strongSelf.delegate?.gifPickerDidSelect(attachment: attachment) strongSelf.delegate?.gifPickerDidSelect(attachment: attachment)

@ -434,7 +434,7 @@ class MessageDetailViewController: OWSViewController, UIScrollViewDelegate {
let contentType = attachment.contentType let contentType = attachment.contentType
if let dataUTI = MIMETypeUtil.utiType(forMIMEType: contentType) { if let dataUTI = MIMETypeUtil.utiType(forMIMEType: contentType) {
let attachment = SignalAttachment.attachment(dataSource: dataSource, dataUTI: dataUTI) let attachment = SignalAttachment.attachment(dataSource: dataSource, dataUTI: dataUTI, imageQuality: .original)
let mediaMessageView = MediaMessageView(attachment: attachment, mode: .small) let mediaMessageView = MediaMessageView(attachment: attachment, mode: .small)
mediaMessageView.backgroundColor = UIColor.white mediaMessageView.backgroundColor = UIColor.white
self.mediaMessageView = mediaMessageView self.mediaMessageView = mediaMessageView

@ -54,7 +54,7 @@ extension SignalAttachmentError: LocalizedError {
} }
@objc @objc
public enum TSImageQuality: UInt { public enum TSImageQualityTier: UInt {
case original case original
case high case high
case mediumHigh case mediumHigh
@ -64,12 +64,12 @@ public enum TSImageQuality: UInt {
} }
@objc @objc
public enum TSAttachmentQuality: UInt { public enum TSImageQuality: UInt {
case original case original
case medium case medium
case compact case compact
func imageQuality() -> TSImageQuality { func imageQualityTier() -> TSImageQualityTier {
switch self { switch self {
case .original: case .original:
return .original return .original
@ -470,7 +470,7 @@ public class SignalAttachment: NSObject {
} }
let dataSource = DataSourceValue.dataSource(with:data, utiType: dataUTI) let dataSource = DataSourceValue.dataSource(with:data, utiType: dataUTI)
// Pasted images _SHOULD _NOT_ be resized, if possible. // Pasted images _SHOULD _NOT_ be resized, if possible.
return imageAttachment(dataSource : dataSource, dataUTI : dataUTI, attachmentQuality:.original) return attachment(dataSource : dataSource, dataUTI : dataUTI, imageQuality:.original)
} }
} }
for dataUTI in videoUTISet { for dataUTI in videoUTISet {
@ -529,7 +529,7 @@ public class SignalAttachment: NSObject {
// NOTE: The attachment returned by this method may not be valid. // NOTE: The attachment returned by this method may not be valid.
// Check the attachment's error property. // Check the attachment's error property.
@objc @objc
public class func imageAttachment(dataSource: DataSource?, dataUTI: String, attachmentQuality: TSAttachmentQuality) -> SignalAttachment { private class func imageAttachment(dataSource: DataSource?, dataUTI: String, imageQuality: TSImageQuality) -> SignalAttachment {
assert(dataUTI.count > 0) assert(dataUTI.count > 0)
assert(dataSource != nil) assert(dataSource != nil)
@ -568,7 +568,7 @@ public class SignalAttachment: NSObject {
} }
attachment.cachedImage = image attachment.cachedImage = image
if isInputImageValidOutputImage(image: image, dataSource: dataSource, dataUTI: dataUTI, attachmentQuality:attachmentQuality) { if isInputImageValidOutputImage(image: image, dataSource: dataSource, dataUTI: dataUTI, imageQuality:imageQuality) {
if let sourceFilename = dataSource.sourceFilename, if let sourceFilename = dataSource.sourceFilename,
let sourceFileExtension = sourceFilename.fileExtension, let sourceFileExtension = sourceFilename.fileExtension,
["heic", "heif"].contains(sourceFileExtension.lowercased()) { ["heic", "heif"].contains(sourceFileExtension.lowercased()) {
@ -593,13 +593,13 @@ public class SignalAttachment: NSObject {
} }
Logger.verbose("\(TAG) Compressing attachment as image/jpeg, \(dataSource.dataLength()) bytes") Logger.verbose("\(TAG) Compressing attachment as image/jpeg, \(dataSource.dataLength()) bytes")
return compressImageAsJPEG(image : image, attachment : attachment, filename:dataSource.sourceFilename, attachmentQuality:attachmentQuality) return compressImageAsJPEG(image : image, attachment : attachment, filename:dataSource.sourceFilename, imageQuality:imageQuality)
} }
} }
// If the proposed attachment already conforms to the // If the proposed attachment already conforms to the
// file size and content size limits, don't recompress it. // file size and content size limits, don't recompress it.
private class func isInputImageValidOutputImage(image: UIImage?, dataSource: DataSource?, dataUTI: String, attachmentQuality: TSAttachmentQuality) -> Bool { private class func isInputImageValidOutputImage(image: UIImage?, dataSource: DataSource?, dataUTI: String, imageQuality: TSImageQuality) -> Bool {
guard let image = image else { guard let image = image else {
return false return false
} }
@ -610,9 +610,9 @@ public class SignalAttachment: NSObject {
return false return false
} }
let imageQuality = attachmentQuality.imageQuality() let imageQualityTier = imageQuality.imageQualityTier()
let maxSize = maxSizeForImage(image: image, let maxSize = maxSizeForImage(image: image,
imageUploadQuality:imageQuality) imageUploadQuality:imageQualityTier)
if image.size.width <= maxSize && if image.size.width <= maxSize &&
image.size.height <= maxSize && image.size.height <= maxSize &&
dataSource.dataLength() <= kMaxFileSizeImage { dataSource.dataLength() <= kMaxFileSizeImage {
@ -626,7 +626,7 @@ public class SignalAttachment: NSObject {
// NOTE: The attachment returned by this method may nil or not be valid. // NOTE: The attachment returned by this method may nil or not be valid.
// Check the attachment's error property. // Check the attachment's error property.
@objc @objc
public class func imageAttachment(image: UIImage?, dataUTI: String, filename: String?, attachmentQuality: TSAttachmentQuality) -> SignalAttachment { public class func imageAttachment(image: UIImage?, dataUTI: String, filename: String?, imageQuality: TSImageQuality) -> SignalAttachment {
assert(dataUTI.count > 0) assert(dataUTI.count > 0)
guard let image = image else { guard let image = image else {
@ -644,13 +644,13 @@ public class SignalAttachment: NSObject {
attachment.cachedImage = image attachment.cachedImage = image
Logger.verbose("\(TAG) Writing \(attachment.mimeType) as image/jpeg") Logger.verbose("\(TAG) Writing \(attachment.mimeType) as image/jpeg")
return compressImageAsJPEG(image : image, attachment : attachment, filename:filename, attachmentQuality:attachmentQuality) return compressImageAsJPEG(image : image, attachment : attachment, filename:filename, imageQuality:imageQuality)
} }
private class func compressImageAsJPEG(image: UIImage, attachment: SignalAttachment, filename: String?, attachmentQuality: TSAttachmentQuality) -> SignalAttachment { private class func compressImageAsJPEG(image: UIImage, attachment: SignalAttachment, filename: String?, imageQuality: TSImageQuality) -> SignalAttachment {
assert(attachment.error == nil) assert(attachment.error == nil)
var imageUploadQuality = attachmentQuality.imageQuality() var imageUploadQuality = imageQuality.imageQualityTier()
while true { while true {
let maxSize = maxSizeForImage(image: image, imageUploadQuality:imageUploadQuality) let maxSize = maxSizeForImage(image: image, imageUploadQuality:imageUploadQuality)
@ -718,7 +718,7 @@ public class SignalAttachment: NSObject {
return updatedImage! return updatedImage!
} }
private class func maxSizeForImage(image: UIImage, imageUploadQuality: TSImageQuality) -> CGFloat { private class func maxSizeForImage(image: UIImage, imageUploadQuality: TSImageQualityTier) -> CGFloat {
switch imageUploadQuality { switch imageUploadQuality {
case .original: case .original:
return max(image.size.width, image.size.height) return max(image.size.width, image.size.height)
@ -735,7 +735,7 @@ public class SignalAttachment: NSObject {
} }
} }
private class func jpegCompressionQuality(imageUploadQuality: TSImageQuality) -> CGFloat { private class func jpegCompressionQuality(imageUploadQuality: TSImageQualityTier) -> CGFloat {
switch imageUploadQuality { switch imageUploadQuality {
case .original: case .original:
return 1 return 1
@ -821,9 +821,9 @@ public class SignalAttachment: NSObject {
// NOTE: The attachment returned by this method may not be valid. // NOTE: The attachment returned by this method may not be valid.
// Check the attachment's error property. // Check the attachment's error property.
@objc @objc
public class func attachment(dataSource: DataSource?, dataUTI: String, attachmentQuality: TSAttachmentQuality) -> SignalAttachment { public class func attachment(dataSource: DataSource?, dataUTI: String, imageQuality: TSImageQuality = .original) -> SignalAttachment {
if inputImageUTISet.contains(dataUTI) { if inputImageUTISet.contains(dataUTI) {
return imageAttachment(dataSource : dataSource, dataUTI : dataUTI, attachmentQuality:attachmentQuality) return imageAttachment(dataSource : dataSource, dataUTI : dataUTI, imageQuality:imageQuality)
} else if videoUTISet.contains(dataUTI) { } else if videoUTISet.contains(dataUTI) {
return videoAttachment(dataSource : dataSource, dataUTI : dataUTI) return videoAttachment(dataSource : dataSource, dataUTI : dataUTI)
} else if audioUTISet.contains(dataUTI) { } else if audioUTISet.contains(dataUTI) {
@ -837,7 +837,7 @@ public class SignalAttachment: NSObject {
public class func empty() -> SignalAttachment { public class func empty() -> SignalAttachment {
return SignalAttachment.attachment(dataSource : DataSourceValue.emptyDataSource(), return SignalAttachment.attachment(dataSource : DataSourceValue.emptyDataSource(),
dataUTI: kUTTypeContent as String, dataUTI: kUTTypeContent as String,
attachmentQuality:.original) imageQuality:.original)
} }
// MARK: Helper Methods // MARK: Helper Methods

@ -435,7 +435,7 @@ public class ShareViewController: UINavigationController, ShareViewDelegate, SAE
} }
} }
let attachment = SignalAttachment.attachment(dataSource: dataSource, dataUTI: specificUTIType, attachmentQuality:.medium) let attachment = SignalAttachment.attachment(dataSource: dataSource, dataUTI: specificUTIType, imageQuality:.medium)
return attachment return attachment
} }

Loading…
Cancel
Save