From 2b02b8deb65cfd3e6e16c45fb611f8d4c558b3e7 Mon Sep 17 00:00:00 2001 From: sunxiaojian Date: Tue, 9 Mar 2021 17:13:17 +0800 Subject: [PATCH] fix: play audio between two toots --- .../ViewModel/AudioContainerViewModel.swift | 31 +++++++++++-------- Mastodon/Service/AudioPlayer.swift | 2 +- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/Mastodon/Scene/Share/ViewModel/AudioContainerViewModel.swift b/Mastodon/Scene/Share/ViewModel/AudioContainerViewModel.swift index 303eae2a..510df76b 100644 --- a/Mastodon/Scene/Share/ViewModel/AudioContainerViewModel.swift +++ b/Mastodon/Scene/Share/ViewModel/AudioContainerViewModel.swift @@ -20,18 +20,18 @@ class AudioContainerViewModel { audioView.playButton.publisher(for: .touchUpInside) .sink { _ in - if AudioPlayer.shared.isPlaying() { - AudioPlayer.shared.pause() - } else { - if audioAttachment === AudioPlayer.shared.attachment { - if AudioPlayer.shared.currentTimeSubject.value == 0 { - AudioPlayer.shared.playAudio(audioAttachment: audioAttachment) - } else { - AudioPlayer.shared.resume() - } + + if audioAttachment === AudioPlayer.shared.attachment { + if AudioPlayer.shared.isPlaying() { + AudioPlayer.shared.pause() } else { + AudioPlayer.shared.resume() + } + if AudioPlayer.shared.currentTimeSubject.value == 0 { AudioPlayer.shared.playAudio(audioAttachment: audioAttachment) } + } else { + AudioPlayer.shared.playAudio(audioAttachment: audioAttachment) } } .store(in: &cell.disposeBag) @@ -44,7 +44,7 @@ class AudioContainerViewModel { .store(in: &cell.disposeBag) self.observePlayer(cell: cell, audioAttachment: audioAttachment) if audioAttachment != AudioPlayer.shared.attachment { - self.resetAudioView(audioView: audioView) + self.resetAudioView(audioView: audioView, audioAttachment: audioAttachment) } } @@ -73,18 +73,23 @@ class AudioContainerViewModel { audioView.playButton.isSelected = isPlaying audioView.slider.isEnabled = isPlaying if playbackState == .stopped { - self.resetAudioView(audioView: audioView) + self.resetAudioView(audioView: audioView, audioAttachment: audioAttachment) } } else { - self.resetAudioView(audioView: audioView) + self.resetAudioView(audioView: audioView, audioAttachment: audioAttachment) } }) .store(in: &cell.disposeBag) } - static func resetAudioView(audioView: AudioContainerView) { + static func resetAudioView( + audioView: AudioContainerView, + audioAttachment: Attachment + ) { audioView.playButton.isSelected = false audioView.slider.setValue(0, animated: false) audioView.slider.isEnabled = false + guard let duration = audioAttachment.meta?.original?.duration else { return } + audioView.timeLabel.text = duration.asString(style: .positional) } } diff --git a/Mastodon/Service/AudioPlayer.swift b/Mastodon/Service/AudioPlayer.swift index 15168c76..458ca761 100644 --- a/Mastodon/Service/AudioPlayer.swift +++ b/Mastodon/Service/AudioPlayer.swift @@ -51,7 +51,7 @@ extension AudioPlayer { self.playbackState.value = .playing return } - + player.pause() let playerItem = AVPlayerItem(url: url) player.replaceCurrentItem(with: playerItem) attachment = audioAttachment