|
|
@ -453,8 +453,6 @@ public class OWSLinkPreview: MTLModel {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
class func allPreviewUrls(forMessageBodyText body: String?) -> [String] {
|
|
|
|
class func allPreviewUrls(forMessageBodyText body: String?) -> [String] {
|
|
|
|
AssertIsOnMainThread()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
guard OWSLinkPreview.featureEnabled else {
|
|
|
|
guard OWSLinkPreview.featureEnabled else {
|
|
|
|
return []
|
|
|
|
return []
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -650,16 +648,21 @@ public class OWSLinkPreview: MTLModel {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
let data = try Data(contentsOf: URL(fileURLWithPath: asset.filePath))
|
|
|
|
let data = try Data(contentsOf: URL(fileURLWithPath: asset.filePath))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
guard let srcImage = UIImage(data: data) else {
|
|
|
|
|
|
|
|
Logger.error("Could not parse image.")
|
|
|
|
|
|
|
|
return Promise(error: LinkPreviewError.invalidContent)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
let maxImageSize: CGFloat = 1024
|
|
|
|
let maxImageSize: CGFloat = 1024
|
|
|
|
let shouldResize = imageSize.width > maxImageSize || imageSize.height > maxImageSize
|
|
|
|
let shouldResize = imageSize.width > maxImageSize || imageSize.height > maxImageSize
|
|
|
|
guard shouldResize else {
|
|
|
|
guard shouldResize else {
|
|
|
|
return Promise.value(data)
|
|
|
|
guard let dstData = UIImageJPEGRepresentation(srcImage, 0.8) else {
|
|
|
|
}
|
|
|
|
Logger.error("Could not write resized image.")
|
|
|
|
|
|
|
|
|
|
|
|
guard let srcImage = UIImage(data: data) else {
|
|
|
|
|
|
|
|
Logger.error("Could not parse image.")
|
|
|
|
|
|
|
|
return Promise(error: LinkPreviewError.invalidContent)
|
|
|
|
return Promise(error: LinkPreviewError.invalidContent)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return Promise.value(dstData)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
guard let dstImage = srcImage.resized(withMaxDimensionPoints: maxImageSize) else {
|
|
|
|
guard let dstImage = srcImage.resized(withMaxDimensionPoints: maxImageSize) else {
|
|
|
|
Logger.error("Could not resize image.")
|
|
|
|
Logger.error("Could not resize image.")
|
|
|
|
return Promise(error: LinkPreviewError.invalidContent)
|
|
|
|
return Promise(error: LinkPreviewError.invalidContent)
|
|
|
@ -710,23 +713,14 @@ public class OWSLinkPreview: MTLModel {
|
|
|
|
|
|
|
|
|
|
|
|
return downloadImage(url: imageUrl, imageMimeType: imageMimeType)
|
|
|
|
return downloadImage(url: imageUrl, imageMimeType: imageMimeType)
|
|
|
|
.then(on: DispatchQueue.global()) { (imageData: Data) -> Promise<OWSLinkPreviewDraft> in
|
|
|
|
.then(on: DispatchQueue.global()) { (imageData: Data) -> Promise<OWSLinkPreviewDraft> in
|
|
|
|
let imageFilePath = OWSFileSystem.temporaryFilePath(withFileExtension: imageFileExtension)
|
|
|
|
// We always recompress images to Jpeg.
|
|
|
|
|
|
|
|
let imageFilePath = OWSFileSystem.temporaryFilePath(withFileExtension: "jpg")
|
|
|
|
do {
|
|
|
|
do {
|
|
|
|
try imageData.write(to: NSURL.fileURL(withPath: imageFilePath), options: .atomicWrite)
|
|
|
|
try imageData.write(to: NSURL.fileURL(withPath: imageFilePath), options: .atomicWrite)
|
|
|
|
} catch let error as NSError {
|
|
|
|
} catch let error as NSError {
|
|
|
|
owsFailDebug("file write failed: \(imageFilePath), \(error)")
|
|
|
|
owsFailDebug("file write failed: \(imageFilePath), \(error)")
|
|
|
|
return Promise(error: LinkPreviewError.assertionFailure)
|
|
|
|
return Promise(error: LinkPreviewError.assertionFailure)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// NOTE: imageSize(forFilePath:...) will call ows_isValidImage(...).
|
|
|
|
|
|
|
|
let imageSize = NSData.imageSize(forFilePath: imageFilePath, mimeType: imageMimeType)
|
|
|
|
|
|
|
|
let kMaxImageSize: CGFloat = 2048
|
|
|
|
|
|
|
|
guard imageSize.width > 0,
|
|
|
|
|
|
|
|
imageSize.height > 0,
|
|
|
|
|
|
|
|
imageSize.width < kMaxImageSize,
|
|
|
|
|
|
|
|
imageSize.height < kMaxImageSize else {
|
|
|
|
|
|
|
|
Logger.error("Image has invalid size: \(imageSize).")
|
|
|
|
|
|
|
|
return Promise(error: LinkPreviewError.assertionFailure)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let linkPreviewDraft = OWSLinkPreviewDraft(urlString: linkUrlString, title: title, imageFilePath: imageFilePath)
|
|
|
|
let linkPreviewDraft = OWSLinkPreviewDraft(urlString: linkUrlString, title: title, imageFilePath: imageFilePath)
|
|
|
|
return Promise.value(linkPreviewDraft)
|
|
|
|
return Promise.value(linkPreviewDraft)
|
|
|
|