diff --git a/Vernissage/CoreData/AttachmentData+Attachment.swift b/Vernissage/CoreData/AttachmentData+Attachment.swift index 653efae..05064b4 100644 --- a/Vernissage/CoreData/AttachmentData+Attachment.swift +++ b/Vernissage/CoreData/AttachmentData+Attachment.swift @@ -17,11 +17,13 @@ extension AttachmentData { self.text = attachment.description self.type = attachment.type.rawValue - if let width = (attachment.meta as? ImageMetadata)?.original?.width { + // We can set image width only when it wasn't previusly recalculated. + if let width = (attachment.meta as? ImageMetadata)?.original?.width, self.metaImageWidth <= 0 && width > 0 { self.metaImageWidth = Int32(width) } - if let height = (attachment.meta as? ImageMetadata)?.original?.height { + // We can set image height only when it wasn't previusly recalculated. + if let height = (attachment.meta as? ImageMetadata)?.original?.height, self.metaImageHeight <= 0 && height > 0 { self.metaImageHeight = Int32(height) } } diff --git a/Vernissage/Services/HomeTimelineService.swift b/Vernissage/Services/HomeTimelineService.swift index 2479210..fede524 100644 --- a/Vernissage/Services/HomeTimelineService.swift +++ b/Vernissage/Services/HomeTimelineService.swift @@ -73,8 +73,10 @@ public class HomeTimelineService { return statusData } - public func update(attachment: AttachmentData, withData imageData: Data) { + public func update(attachment: AttachmentData, withData imageData: Data, imageWidth: Double, imageHeight: Double) { attachment.data = imageData + attachment.metaImageWidth = Int32(imageWidth) + attachment.metaImageHeight = Int32(imageHeight) self.setExifProperties(in: attachment, from: imageData) CoreDataHandler.shared.save() diff --git a/Vernissage/Widgets/ImageRow.swift b/Vernissage/Widgets/ImageRow.swift index e9b638f..5ae2bbc 100644 --- a/Vernissage/Widgets/ImageRow.swift +++ b/Vernissage/Widgets/ImageRow.swift @@ -28,14 +28,6 @@ struct ImageRow: View { if let attachmentData, let size = ImageSizeService.shared.get(for: attachmentData.url) { self.imageWidth = size.width self.imageHeight = size.height - } else if let attachmentData, let imageData = attachmentData.data, let uiImage = UIImage(data: imageData) { - self.uiImage = uiImage - - let size = ImageSizeService.shared.calculate(for: attachmentData.url, - width: uiImage.size.width, - height: uiImage.size.height) - self.imageWidth = size.width - self.imageHeight = size.height } else if let attachmentData, attachmentData.metaImageWidth > 0 && attachmentData.metaImageHeight > 0 { let size = ImageSizeService.shared.calculate(for: attachmentData.url, width: attachmentData.metaImageWidth, @@ -128,17 +120,17 @@ struct ImageRow: View { private func downloadImage(attachmentData: AttachmentData) async { do { - if let imageData = try await RemoteFileService.shared.fetchData(url: attachmentData.url) { - HomeTimelineService.shared.update(attachment: attachmentData, withData: imageData) - if let downloadedImage = UIImage(data: imageData) { + if let imageData = try await RemoteFileService.shared.fetchData(url: attachmentData.url), + let downloadedImage = UIImage(data: imageData) { - let size = ImageSizeService.shared.calculate(for: attachmentData.url, - width: downloadedImage.size.width, - height: downloadedImage.size.height) - self.imageWidth = size.width - self.imageHeight = size.height - self.uiImage = downloadedImage - } + let size = ImageSizeService.shared.calculate(for: attachmentData.url, + width: downloadedImage.size.width, + height: downloadedImage.size.height) + self.imageWidth = size.width + self.imageHeight = size.height + self.uiImage = downloadedImage + + HomeTimelineService.shared.update(attachment: attachmentData, withData: imageData, imageWidth: size.width, imageHeight: size.height) } } catch { ErrorService.shared.handle(error, message: "Cannot download the image.")