Skip to content

Commit

Permalink
fix(SingleTrackPlayer): Make sure we can navigate between audio file …
Browse files Browse the repository at this point in the history
…previews and it works seamlessly
  • Loading branch information
adrien-coye committed Aug 9, 2024
1 parent 381aad5 commit e5b86c9
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 14 deletions.
2 changes: 1 addition & 1 deletion kDrive/UI/View/Files/Preview/AudioCollectionViewCell.swift
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@ final class AudioCollectionViewCell: PreviewCollectionViewCell {

override func didEndDisplaying() {
MatomoUtils.trackMediaPlayer(leaveAt: singleTrackPlayer.progressPercentage)
singleTrackPlayer.reset()
singleTrackPlayer.pause()
}

private func updateUI(state: SingleTrackPlayer.State) {
Expand Down
36 changes: 23 additions & 13 deletions kDriveCore/AudioPlayer/SingleTrackPlayer.swift
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ public final class SingleTrackPlayer {
private var interruptionObserver: NSObjectProtocol?
private var timeObserver: Any?
private var rateObserver: NSKeyValueObservation?
private var statusObserver: NSObjectProtocol?
private var statusObserver: NSKeyValueObservation?
private var isInterrupted = false

// MARK: Data flow
Expand Down Expand Up @@ -115,17 +115,7 @@ public final class SingleTrackPlayer {
}

public func reset() {
if let interruptionObserver {
NotificationCenter.default.removeObserver(interruptionObserver)
}
interruptionObserver = nil
if let timeObserver {
player?.removeTimeObserver(timeObserver)
}
timeObserver = nil
rateObserver = nil
statusObserver = nil

removeAllObservers()
player?.pause()
player = nil
playerState = .stopped
Expand Down Expand Up @@ -215,7 +205,7 @@ public final class SingleTrackPlayer {

// MARK: - Observation

func setUpObservers() {
private func setUpObservers() {
interruptionObserver = NotificationCenter.default.addObserver(forName: AVAudioSession.interruptionNotification,
object: AVAudioSession.sharedInstance(),
queue: .main) { [weak self] notification in
Expand All @@ -240,6 +230,22 @@ public final class SingleTrackPlayer {
setUpRemoteControlEvents()
}

private func removeAllObservers() {
if let interruptionObserver = interruptionObserver {
NotificationCenter.default.removeObserver(interruptionObserver)
}

stopPlaybackObservation()

rateObserver?.invalidate()
rateObserver = nil

statusObserver?.invalidate()
statusObserver = nil

removeAllRemoteControlEvents()
}

public func startPlaybackObservationIfNeeded() {
guard timeObserver == nil else {
return
Expand Down Expand Up @@ -298,6 +304,10 @@ public final class SingleTrackPlayer {
}
}

private func removeAllRemoteControlEvents() {
registeredCommands.forEach { $0.removeHandler() }
}

@objc private func playerDidFinishPlaying() {
pause()
seek(to: 0)
Expand Down

0 comments on commit e5b86c9

Please sign in to comment.