#4094 - Added multiple observation on media services and a mediaServiceProvider that prevents simultaneous playback from multiple player instances.

This commit is contained in:
Stefan Ceriu
2021-06-23 17:52:08 +03:00
parent 1000736265
commit 7e2305464c
8 changed files with 237 additions and 35 deletions
@@ -25,6 +25,7 @@ enum VoiceMessagePlaybackControllerState {
}
class VoiceMessagePlaybackController: VoiceMessageAudioPlayerDelegate, VoiceMessagePlaybackViewDelegate {
private let audioPlayer: VoiceMessageAudioPlayer
private let timeFormatter: DateFormatter
private var displayLink: CADisplayLink!
@@ -39,14 +40,14 @@ class VoiceMessagePlaybackController: VoiceMessageAudioPlayerDelegate, VoiceMess
let playbackView: VoiceMessagePlaybackView
init() {
init(mediaServiceProvider: VoiceMessageMediaServiceProvider) {
playbackView = VoiceMessagePlaybackView.loadFromNib()
audioPlayer = VoiceMessageAudioPlayer()
audioPlayer = mediaServiceProvider.audioPlayer()
timeFormatter = DateFormatter()
timeFormatter.dateFormat = "m:ss"
audioPlayer.delegate = self
audioPlayer.registerDelegate(self)
playbackView.delegate = self
displayLink = CADisplayLink(target: WeakObjectWrapper(self), selector: #selector(handleDisplayLinkTick))
@@ -94,10 +95,14 @@ class VoiceMessagePlaybackController: VoiceMessageAudioPlayerDelegate, VoiceMess
state = .playing
}
func audioPlayerDidStopPlaying(_ audioPlayer: VoiceMessageAudioPlayer) {
func audioPlayerDidPausePlaying(_ audioPlayer: VoiceMessageAudioPlayer) {
state = .paused
}
func audioPlayerDidStopPlaying(_ audioPlayer: VoiceMessageAudioPlayer) {
state = .stopped
}
func audioPlayer(_ audioPlayer: VoiceMessageAudioPlayer, didFailWithError error: Error) {
state = .error
MXLog.error("Failed playing voice message with error: \(error)")