mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-02 21:33:26 +00:00
Update the SDK. (#3565)
* Update the SDK. * Add mockMXC URLs to fix all the crashes during tests. * Refactor Voice Messages to not use a MediaSource for local files.
This commit is contained in:
@@ -22,7 +22,7 @@ private enum InternalAudioPlayerState {
|
||||
}
|
||||
|
||||
class AudioPlayer: NSObject, AudioPlayerProtocol {
|
||||
var mediaSource: MediaSourceProxy?
|
||||
var sourceURL: URL?
|
||||
|
||||
private var playerItem: AVPlayerItem?
|
||||
private var internalAudioPlayer: AVQueuePlayer?
|
||||
@@ -46,7 +46,7 @@ class AudioPlayer: NSObject, AudioPlayerProtocol {
|
||||
|
||||
private let releaseAudioSessionTimeoutInterval = 5.0
|
||||
|
||||
private(set) var url: URL?
|
||||
private(set) var playbackURL: URL?
|
||||
|
||||
private var deinitInProgress = false
|
||||
|
||||
@@ -86,13 +86,13 @@ class AudioPlayer: NSObject, AudioPlayerProtocol {
|
||||
unloadContent()
|
||||
}
|
||||
|
||||
func load(mediaSource: MediaSourceProxy, using url: URL, autoplay: Bool) {
|
||||
func load(sourceURL: URL, playbackURL: URL, autoplay: Bool) {
|
||||
unloadContent()
|
||||
setInternalState(.loading)
|
||||
self.mediaSource = mediaSource
|
||||
self.url = url
|
||||
self.sourceURL = sourceURL
|
||||
self.playbackURL = playbackURL
|
||||
self.autoplay = autoplay
|
||||
playerItem = AVPlayerItem(url: url)
|
||||
playerItem = AVPlayerItem(url: playbackURL)
|
||||
internalAudioPlayer = AVQueuePlayer(playerItem: playerItem)
|
||||
addObservers()
|
||||
}
|
||||
@@ -162,8 +162,8 @@ class AudioPlayer: NSObject, AudioPlayerProtocol {
|
||||
}
|
||||
|
||||
private func unloadContent() {
|
||||
mediaSource = nil
|
||||
url = nil
|
||||
sourceURL = nil
|
||||
playbackURL = nil
|
||||
internalAudioPlayer?.replaceCurrentItem(with: nil)
|
||||
internalAudioPlayer = nil
|
||||
playerItem = nil
|
||||
|
||||
@@ -12,6 +12,17 @@ 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
|
||||
@@ -22,8 +33,21 @@ enum AudioPlayerAction {
|
||||
case didFailWithError(error: Error)
|
||||
}
|
||||
|
||||
protocol AudioPlayerProtocol: MediaPlayerProtocol {
|
||||
protocol AudioPlayerProtocol: AnyObject {
|
||||
var sourceURL: URL? { get }
|
||||
var duration: TimeInterval { get }
|
||||
var currentTime: TimeInterval { get }
|
||||
var playbackURL: URL? { get }
|
||||
var state: MediaPlayerState { 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
|
||||
}
|
||||
|
||||
// sourcery: AutoMockable
|
||||
|
||||
@@ -134,7 +134,7 @@ class AudioPlayerState: ObservableObject, Identifiable {
|
||||
MXLog.info("updating duration: \(duration) -> \(audioPlayerDuration)")
|
||||
duration = audioPlayerDuration
|
||||
}
|
||||
fileURL = audioPlayer?.url
|
||||
fileURL = audioPlayer?.playbackURL
|
||||
playbackState = .readyToPlay
|
||||
case .didStartPlaying:
|
||||
if let audioPlayer {
|
||||
|
||||
Reference in New Issue
Block a user