// // Copyright 2025 Element Creations Ltd. // Copyright 2023-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 Combine import Foundation enum AudioPlayerError: Error { case genericError } /// There used to be a MediaPlayerProtocol that AudioPlayerProtocol inherited from. /// This should be called something else but we already have an AudioPlayerState, /// AudioPlayerPlaybackState and InternalAudioPlayerState so who knows what to call this. nonisolated enum MediaPlayerState { case loading case playing case paused case stopped case error } enum AudioPlayerAction { case didStartLoading case didFinishLoading case didStartPlaying case didPausePlaying case didStopPlaying case didFinishPlaying case didFailWithError(error: Error) } protocol AudioPlayerProtocol: AnyObject { var sourceURL: URL? { get } var duration: TimeInterval { get } var currentTime: TimeInterval { get } var playbackURL: URL? { get } var state: MediaPlayerState { get } var playbackSpeed: Float { get } var actions: AnyPublisher { get } func load(sourceURL: URL, playbackURL: URL, autoplay: Bool) func reset() func play() func pause() func stop() func seek(to progress: Double) async func setPlaybackSpeed(_ speed: Float) } // sourcery: AutoMockable extension AudioPlayerProtocol { }