From e0fb92c3fec5bbb31c7d2a06b43b893754fa1d78 Mon Sep 17 00:00:00 2001 From: Stefan Ceriu Date: Fri, 1 Apr 2022 10:03:40 +0300 Subject: [PATCH] Fixed media provider performance. --- .../Services/Media/MediaProvider.swift | 50 +++++++++++-------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/ElementX/Sources/Services/Media/MediaProvider.swift b/ElementX/Sources/Services/Media/MediaProvider.swift index a5fc60005..9d37f4dc5 100644 --- a/ElementX/Sources/Services/Media/MediaProvider.swift +++ b/ElementX/Sources/Services/Media/MediaProvider.swift @@ -30,34 +30,40 @@ struct MediaProvider: MediaProviderProtocol { } func loadImageFromURL(_ url: String, _ completion: @escaping (Result) -> 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)) } } }