Fix cluegy way chapter sleep timer was being reset after skipping past

This commit is contained in:
ronaldheft
2022-09-03 16:44:01 -04:00
parent fb8e6408bb
commit b697deac1c
2 changed files with 10 additions and 17 deletions
+5
View File
@@ -178,6 +178,11 @@ class AudioPlayer: NSObject {
if self.isSleepTimerSet() { if self.isSleepTimerSet() {
// Update the UI // Update the UI
NotificationCenter.default.post(name: NSNotification.Name(PlayerEvents.sleepSet.rawValue), object: nil) NotificationCenter.default.post(name: NSNotification.Name(PlayerEvents.sleepSet.rawValue), object: nil)
// Handle a sitation where the user skips past the chapter end
if self.isChapterSleepTimerBeforeTime(currentTime) {
self.removeSleepTimer()
}
} }
} }
} }
@@ -27,12 +27,6 @@ extension AudioPlayer {
sleepTimeRemaining = self.sleepTimeRemaining sleepTimeRemaining = self.sleepTimeRemaining
} }
// Guard against invalid sleep timers, but give it a chance to go 1 second negative to prevent a raise condition
if sleepTimeRemaining?.isLess(than: -1) ?? false {
self.removeSleepTimer()
return nil
}
return sleepTimeRemaining return sleepTimeRemaining
} }
@@ -110,14 +104,8 @@ extension AudioPlayer {
self.removeChapterSleepTimer() self.removeChapterSleepTimer()
self.sleepTimeRemaining = nil self.sleepTimeRemaining = nil
// Update the UI after a delay, to avoid a race condition when changing chapters // Update the UI
DispatchQueue.runOnMainQueue { NotificationCenter.default.post(name: NSNotification.Name(PlayerEvents.sleepEnded.rawValue), object: self)
Timer.scheduledTimer(withTimeInterval: 0.1, repeats: false) { _ in
if !self.isSleepTimerSet() {
NotificationCenter.default.post(name: NSNotification.Name(PlayerEvents.sleepEnded.rawValue), object: self)
}
}
}
} }
@@ -149,7 +137,7 @@ extension AudioPlayer {
self.sleepTimeChapterStopAt = nil self.sleepTimeChapterStopAt = nil
} }
private func isChapterSleepTimerBeforeTime(_ time: Double) -> Bool { internal func isChapterSleepTimerBeforeTime(_ time: Double) -> Bool {
if let chapterStopAt = self.sleepTimeChapterStopAt { if let chapterStopAt = self.sleepTimeChapterStopAt {
return chapterStopAt <= time return chapterStopAt <= time
} }
@@ -157,11 +145,11 @@ extension AudioPlayer {
return false return false
} }
private func isCountdownSleepTimerSet() -> Bool { internal func isCountdownSleepTimerSet() -> Bool {
return self.sleepTimeRemaining != nil return self.sleepTimeRemaining != nil
} }
private func isChapterSleepTimerSet() -> Bool { internal func isChapterSleepTimerSet() -> Bool {
return self.sleepTimeChapterStopAt != nil return self.sleepTimeChapterStopAt != nil
} }