Files
letro-ios/ElementX/Sources/Services/Audio/Player/AudioPlayerProtocol.swift

58 lines
1.5 KiB
Swift

//
// 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.
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<AudioPlayerAction, Never> { 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 { }