58 lines
1.5 KiB
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 { }
|