From 5ab71f37ef5076a0d070565804ec5f320496bc91 Mon Sep 17 00:00:00 2001 From: Stefan Ceriu Date: Mon, 18 Jul 2022 18:14:23 +0300 Subject: [PATCH 1/2] Prevent images cached on disk from loading on the main queue --- .../Services/Media/MediaProvider.swift | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/ElementX/Sources/Services/Media/MediaProvider.swift b/ElementX/Sources/Services/Media/MediaProvider.swift index 86ad7e1245..cf9ee6ee87 100644 --- a/ElementX/Sources/Services/Media/MediaProvider.swift +++ b/ElementX/Sources/Services/Media/MediaProvider.swift @@ -54,18 +54,18 @@ struct MediaProvider: MediaProviderProtocol { loadImageBgTask?.stop() } - let cachedImageLoadResult = await withCheckedContinuation { continuation in - imageCache.retrieveImage(forKey: source.underlyingSource.url()) { result in - continuation.resume(returning: result) - } - } - - if case let .success(cacheResult) = cachedImageLoadResult, - let image = cacheResult.image { - return .success(image) - } - return await Task.detached { () -> Result in + let cachedImageLoadResult = await withCheckedContinuation { continuation in + imageCache.retrieveImage(forKey: source.underlyingSource.url()) { result in + continuation.resume(returning: result) + } + } + + if case let .success(cacheResult) = cachedImageLoadResult, + let image = cacheResult.image { + return .success(image) + } + do { let imageData = try clientProxy.loadMediaContentForSource(source.underlyingSource) From 81053a0150ffa9945577dc3d6775de4e6ea2a283 Mon Sep 17 00:00:00 2001 From: Stefan Ceriu Date: Tue, 19 Jul 2022 09:13:25 +0300 Subject: [PATCH 2/2] Move Kingfisher checkedContinuation to separate extension method --- .../Sources/Services/Media/MediaProvider.swift | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/ElementX/Sources/Services/Media/MediaProvider.swift b/ElementX/Sources/Services/Media/MediaProvider.swift index cf9ee6ee87..fc6b54b797 100644 --- a/ElementX/Sources/Services/Media/MediaProvider.swift +++ b/ElementX/Sources/Services/Media/MediaProvider.swift @@ -55,13 +55,7 @@ struct MediaProvider: MediaProviderProtocol { } return await Task.detached { () -> Result in - let cachedImageLoadResult = await withCheckedContinuation { continuation in - imageCache.retrieveImage(forKey: source.underlyingSource.url()) { result in - continuation.resume(returning: result) - } - } - - if case let .success(cacheResult) = cachedImageLoadResult, + if case let .success(cacheResult) = await imageCache.retrieveImage(forKey: source.underlyingSource.url()), let image = cacheResult.image { return .success(image) } @@ -85,3 +79,13 @@ struct MediaProvider: MediaProviderProtocol { .value } } + +private extension ImageCache { + func retrieveImage(forKey key: String) async -> Result { + await withCheckedContinuation { continuation in + retrieveImage(forKey: key) { result in + continuation.resume(returning: result) + } + } + } +}