mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-04 01:20:12 +00:00
Fixed media provider performance.
This commit is contained in:
@@ -30,34 +30,40 @@ struct MediaProvider: MediaProviderProtocol {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func loadImageFromURL(_ url: String, _ completion: @escaping (Result<UIImage, MediaProviderError>) -> Void) {
|
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
|
imageCache.retrieveImage(forKey: url) { result in
|
||||||
if case let .success(cacheResult) = result,
|
if case let .success(cacheResult) = result,
|
||||||
let image = cacheResult.image {
|
let image = cacheResult.image {
|
||||||
completion(.success(image))
|
completion(.success(image))
|
||||||
|
return
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
processingQueue.async {
|
||||||
processingQueue.async {
|
do {
|
||||||
do {
|
let imageData = try client.loadImage(url: url)
|
||||||
let imageData = try client.loadImage(url: url)
|
|
||||||
|
guard let image = UIImage(data: Data(bytes: imageData, count: imageData.count)) else {
|
||||||
guard let image = UIImage(data: Data(bytes: imageData, count: imageData.count)) else {
|
MXLog.error("Invalid image data")
|
||||||
MXLog.error("Invalid image data")
|
DispatchQueue.main.async {
|
||||||
DispatchQueue.main.async {
|
completion(.failure(.invalidImageData))
|
||||||
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))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user