// // Copyright 2025 Element Creations Ltd. // Copyright 2022-2025 New Vector Ltd. // // SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial. // Please see LICENSE files in the repository root for full details. // import Foundation import UIKit enum MediaProviderError: Error { case failedRetrievingImage case failedRetrievingFile case invalidImageData case failedRetrievingThumbnail case cancelled } // sourcery: AutoMockable nonisolated protocol MediaProviderProtocol: Sendable { func imageFromSource(_ source: MediaSourceProxy?, size: CGSize?) -> UIImage? func loadImageDataFromSource(_ source: MediaSourceProxy) async -> Result func loadImageRetryingOnReconnection(_ source: MediaSourceProxy, size: CGSize?) -> Task func loadThumbnailForSource(source: MediaSourceProxy, size: CGSize) async -> Result func loadFileFromSource(_ source: MediaSourceProxy, filename: String?) async -> Result } extension MediaProviderProtocol { func imageFromSource(_ source: MediaSourceProxy?) -> UIImage? { imageFromSource(source, size: nil) } func loadImageRetryingOnReconnection(_ source: MediaSourceProxy) -> Task { loadImageRetryingOnReconnection(source, size: nil) } func loadFileFromSource(_ source: MediaSourceProxy) async -> Result { await loadFileFromSource(source, filename: nil) } }