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 2a7ae64
Showing 1 changed file with 22 additions and 3 deletions.
25 changes: 22 additions & 3 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 @@ -127,7 +127,6 @@ public final class SingleTrackPlayer {
statusObserver = nil

player?.pause()
player = nil
playerState = .stopped
}

Expand Down Expand Up @@ -215,7 +214,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 +239,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 +313,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 2a7ae64

Please sign in to comment.