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:
Doug
2024-11-28 08:34:38 +00:00
committed by GitHub
parent e70a95cfa2
commit 751be7b3a7
75 changed files with 222 additions and 590 deletions
@@ -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 {