diff --git a/ElementX/Sources/Other/Extensions/UNNotificationContent.swift b/ElementX/Sources/Other/Extensions/UNNotificationContent.swift index 2b13e8b4d..df21c19f0 100644 --- a/ElementX/Sources/Other/Extensions/UNNotificationContent.swift +++ b/ElementX/Sources/Other/Extensions/UNNotificationContent.swift @@ -117,7 +117,7 @@ extension UNMutableNotificationContent { var fetchedImage: INImage? let image: INImage if let mediaSource = icon.mediaSource { - switch await mediaProvider?.loadImageDataFromSource(mediaSource) { + switch await mediaProvider?.loadThumbnailForSource(source: mediaSource, size: .init(width: 100, height: 100)) { case .success(let data): fetchedImage = INImage(imageData: data) case .failure(let error): diff --git a/ElementX/Sources/Services/Media/Provider/MediaProvider.swift b/ElementX/Sources/Services/Media/Provider/MediaProvider.swift index d3e655ca1..930171dea 100644 --- a/ElementX/Sources/Services/Media/Provider/MediaProvider.swift +++ b/ElementX/Sources/Services/Media/Provider/MediaProvider.swift @@ -104,6 +104,18 @@ struct MediaProvider: MediaProviderProtocol { } } + // MARK: Thumbnail + + func loadThumbnailForSource(source: MediaSourceProxy, size: CGSize) async -> Result { + do { + let thumbnailData = try await mediaLoader.loadMediaThumbnailForSource(source, width: UInt(size.width), height: UInt(size.height)) + return .success(thumbnailData) + } catch { + MXLog.error("Failed retrieving image with error: \(error)") + return .failure(.failedRetrievingThumbnail) + } + } + // MARK: - Private private func cacheKeyForURL(_ url: URL, size: CGSize?) -> String { diff --git a/ElementX/Sources/Services/Media/Provider/MediaProviderProtocol.swift b/ElementX/Sources/Services/Media/Provider/MediaProviderProtocol.swift index a2762a91e..2bc47764d 100644 --- a/ElementX/Sources/Services/Media/Provider/MediaProviderProtocol.swift +++ b/ElementX/Sources/Services/Media/Provider/MediaProviderProtocol.swift @@ -21,10 +21,12 @@ enum MediaProviderError: Error { case failedRetrievingImage case failedRetrievingFile case invalidImageData + case failedRetrievingThumbnail } protocol MediaProviderProtocol: ImageProviderProtocol { func loadFileFromSource(_ source: MediaSourceProxy, body: String?) async -> Result + func loadThumbnailForSource(source: MediaSourceProxy, size: CGSize) async -> Result } extension MediaProviderProtocol { diff --git a/ElementX/Sources/Services/Media/Provider/MockMediaProvider.swift b/ElementX/Sources/Services/Media/Provider/MockMediaProvider.swift index 7e4d3a58d..63064a247 100644 --- a/ElementX/Sources/Services/Media/Provider/MockMediaProvider.swift +++ b/ElementX/Sources/Services/Media/Provider/MockMediaProvider.swift @@ -18,6 +18,10 @@ import Foundation import UIKit struct MockMediaProvider: MediaProviderProtocol { + func loadThumbnailForSource(source: MediaSourceProxy, size: CGSize) async -> Result { + fatalError("Not implemented") + } + func imageFromSource(_ source: MediaSourceProxy?, size: CGSize?) -> UIImage? { guard source != nil else { return nil diff --git a/changelog.d/2136.bugfix b/changelog.d/2136.bugfix new file mode 100644 index 000000000..4af133daa --- /dev/null +++ b/changelog.d/2136.bugfix @@ -0,0 +1 @@ +Fixed a bug that made iOS 17 render avatars sideways in notifications. \ No newline at end of file