Improve a home timeline performance.
This commit is contained in:
parent
461df5e453
commit
f8b996dae9
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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.")
|
||||
|
|
Loading…
Reference in New Issue