diff --git a/ElementX/Sources/Other/Extensions/ImageCache.swift b/ElementX/Sources/Other/Extensions/ImageCache.swift index 7423826ef..badb9f27b 100644 --- a/ElementX/Sources/Other/Extensions/ImageCache.swift +++ b/ElementX/Sources/Other/Extensions/ImageCache.swift @@ -20,6 +20,7 @@ import Kingfisher extension ImageCache { static var onlyInMemory: ImageCache { let result = ImageCache.default + result.memoryStorage.config.keepWhenEnteringBackground = true result.diskStorage.config.sizeLimit = 1 return result } diff --git a/ElementX/Sources/Other/SwiftUI/Views/LoadableAvatarImage.swift b/ElementX/Sources/Other/SwiftUI/Views/LoadableAvatarImage.swift index d7516a1c3..06d4972fe 100644 --- a/ElementX/Sources/Other/SwiftUI/Views/LoadableAvatarImage.swift +++ b/ElementX/Sources/Other/SwiftUI/Views/LoadableAvatarImage.swift @@ -46,6 +46,7 @@ struct LoadableAvatarImage: View { var avatar: some View { if let url { LoadableImage(url: url, + mediaType: .avatar, size: avatarSize.scaledSize, imageProvider: imageProvider) { image in image diff --git a/ElementX/Sources/Other/SwiftUI/Views/LoadableImage.swift b/ElementX/Sources/Other/SwiftUI/Views/LoadableImage.swift index 5597c73c6..0b04f8996 100644 --- a/ElementX/Sources/Other/SwiftUI/Views/LoadableImage.swift +++ b/ElementX/Sources/Other/SwiftUI/Views/LoadableImage.swift @@ -17,8 +17,15 @@ import Kingfisher import SwiftUI +/// Used to configure animations +enum LoadableImageMediaType { + case avatar + case generic +} + struct LoadableImage: View { private let mediaSource: MediaSourceProxy + private let mediaType: LoadableImageMediaType private let blurhash: String? private let size: CGSize? private let imageProvider: ImageProviderProtocol? @@ -34,12 +41,14 @@ struct LoadableImage: View { /// - transformer: entry point for configuring the resulting image view /// - placeholder: a view to show while the image or blurhash are not available init(mediaSource: MediaSourceProxy, + mediaType: LoadableImageMediaType = .generic, blurhash: String? = nil, size: CGSize? = nil, imageProvider: ImageProviderProtocol?, transformer: @escaping (AnyView) -> TransformerView = { $0 }, placeholder: @escaping () -> PlaceholderView) { self.mediaSource = mediaSource + self.mediaType = mediaType self.blurhash = blurhash self.size = size self.imageProvider = imageProvider @@ -48,12 +57,14 @@ struct LoadableImage: View { } init(url: URL, + mediaType: LoadableImageMediaType = .generic, blurhash: String? = nil, size: CGSize? = nil, imageProvider: ImageProviderProtocol?, transformer: @escaping (AnyView) -> TransformerView = { $0 }, placeholder: @escaping () -> PlaceholderView) { self.init(mediaSource: MediaSourceProxy(url: url, mimeType: nil), + mediaType: mediaType, blurhash: blurhash, size: size, imageProvider: imageProvider, @@ -63,6 +74,7 @@ struct LoadableImage: View { var body: some View { LoadableImageContent(mediaSource: mediaSource, + mediaType: mediaType, blurhash: blurhash, size: size, imageProvider: imageProvider, @@ -76,6 +88,7 @@ struct LoadableImage: View { private struct LoadableImageContent: View, ImageDataProvider { private let mediaSource: MediaSourceProxy + private let mediaType: LoadableImageMediaType private let blurhash: String? private let transformer: (AnyView) -> TransformerView private let placeholder: () -> PlaceholderView @@ -83,12 +96,14 @@ private struct LoadableImageContent TransformerView, placeholder: @escaping () -> PlaceholderView) { self.mediaSource = mediaSource + self.mediaType = mediaType self.blurhash = blurhash self.transformer = transformer self.placeholder = placeholder @@ -122,7 +137,7 @@ private struct LoadableImageContent UserSessionProtocol { - let imageCache = ImageCache.onlyInMemory - imageCache.memoryStorage.config.keepWhenEnteringBackground = true - let mediaProvider = MediaProvider(mediaLoader: clientProxy, - imageCache: imageCache, + imageCache: .onlyInMemory, backgroundTaskService: backgroundTaskService) let voiceMessageMediaManager = VoiceMessageMediaManager(mediaProvider: mediaProvider,