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.text = attachment.description
|
||||||
self.type = attachment.type.rawValue
|
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)
|
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)
|
self.metaImageHeight = Int32(height)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -73,8 +73,10 @@ public class HomeTimelineService {
|
||||||
return statusData
|
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.data = imageData
|
||||||
|
attachment.metaImageWidth = Int32(imageWidth)
|
||||||
|
attachment.metaImageHeight = Int32(imageHeight)
|
||||||
self.setExifProperties(in: attachment, from: imageData)
|
self.setExifProperties(in: attachment, from: imageData)
|
||||||
|
|
||||||
CoreDataHandler.shared.save()
|
CoreDataHandler.shared.save()
|
||||||
|
|
|
@ -28,14 +28,6 @@ struct ImageRow: View {
|
||||||
if let attachmentData, let size = ImageSizeService.shared.get(for: attachmentData.url) {
|
if let attachmentData, let size = ImageSizeService.shared.get(for: attachmentData.url) {
|
||||||
self.imageWidth = size.width
|
self.imageWidth = size.width
|
||||||
self.imageHeight = size.height
|
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 {
|
} else if let attachmentData, attachmentData.metaImageWidth > 0 && attachmentData.metaImageHeight > 0 {
|
||||||
let size = ImageSizeService.shared.calculate(for: attachmentData.url,
|
let size = ImageSizeService.shared.calculate(for: attachmentData.url,
|
||||||
width: attachmentData.metaImageWidth,
|
width: attachmentData.metaImageWidth,
|
||||||
|
@ -128,17 +120,17 @@ struct ImageRow: View {
|
||||||
|
|
||||||
private func downloadImage(attachmentData: AttachmentData) async {
|
private func downloadImage(attachmentData: AttachmentData) async {
|
||||||
do {
|
do {
|
||||||
if let imageData = try await RemoteFileService.shared.fetchData(url: attachmentData.url) {
|
if let imageData = try await RemoteFileService.shared.fetchData(url: attachmentData.url),
|
||||||
HomeTimelineService.shared.update(attachment: attachmentData, withData: imageData)
|
let downloadedImage = UIImage(data: imageData) {
|
||||||
if let downloadedImage = UIImage(data: imageData) {
|
|
||||||
|
|
||||||
let size = ImageSizeService.shared.calculate(for: attachmentData.url,
|
let size = ImageSizeService.shared.calculate(for: attachmentData.url,
|
||||||
width: downloadedImage.size.width,
|
width: downloadedImage.size.width,
|
||||||
height: downloadedImage.size.height)
|
height: downloadedImage.size.height)
|
||||||
self.imageWidth = size.width
|
self.imageWidth = size.width
|
||||||
self.imageHeight = size.height
|
self.imageHeight = size.height
|
||||||
self.uiImage = downloadedImage
|
self.uiImage = downloadedImage
|
||||||
}
|
|
||||||
|
HomeTimelineService.shared.update(attachment: attachmentData, withData: imageData, imageWidth: size.width, imageHeight: size.height)
|
||||||
}
|
}
|
||||||
} catch {
|
} catch {
|
||||||
ErrorService.shared.handle(error, message: "Cannot download the image.")
|
ErrorService.shared.handle(error, message: "Cannot download the image.")
|
||||||
|
|
Loading…
Reference in New Issue