Fixed media provider performance.

This commit is contained in:
Stefan Ceriu
2022-04-01 10:03:40 +03:00
parent c72c338e62
commit e0fb92c3fe

View File

@@ -30,34 +30,40 @@ struct MediaProvider: MediaProviderProtocol {
}
func loadImageFromURL(_ url: String, _ completion: @escaping (Result<UIImage, MediaProviderError>) -> Void) {
if let image = imageForURL(url) {
completion(.success(image))
return
}
imageCache.retrieveImage(forKey: url) { result in
if case let .success(cacheResult) = result,
let image = cacheResult.image {
completion(.success(image))
return
}
}
processingQueue.async {
do {
let imageData = try client.loadImage(url: url)
guard let image = UIImage(data: Data(bytes: imageData, count: imageData.count)) else {
MXLog.error("Invalid image data")
DispatchQueue.main.async {
completion(.failure(.invalidImageData))
processingQueue.async {
do {
let imageData = try client.loadImage(url: url)
guard let image = UIImage(data: Data(bytes: imageData, count: imageData.count)) else {
MXLog.error("Invalid image data")
DispatchQueue.main.async {
completion(.failure(.invalidImageData))
}
return
}
imageCache.store(image, forKey: url)
DispatchQueue.main.async {
completion(.success(image))
}
} catch {
MXLog.error("Failed retrieving image with error: \(error)")
DispatchQueue.main.async {
completion(.failure(.failedRetrievingImage))
}
return
}
imageCache.store(image, forKey: url)
DispatchQueue.main.async {
completion(.success(image))
}
} catch {
MXLog.error("Failed retrieving image with error: \(error)")
DispatchQueue.main.async {
completion(.failure(.failedRetrievingImage))
}
}
}