mirror of
https://github.com/advplyr/audiobookshelf-app.git
synced 2025-08-03 09:34:51 +02:00
Handle multi-track files for sleep timer
This commit is contained in:
parent
c14f6ec4c2
commit
c8ff5a7817
3 changed files with 25 additions and 3 deletions
|
@ -19,6 +19,13 @@ class AudioTrack: EmbeddedObject, Codable {
|
|||
@Persisted var localFileId: String?
|
||||
@Persisted var serverIndex: Int?
|
||||
|
||||
var endOffset: Double? {
|
||||
if let startOffset = startOffset {
|
||||
return startOffset + duration
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
private enum CodingKeys : String, CodingKey {
|
||||
case index, startOffset, duration, title, contentUrl, mimeType, metadata, localFileId, serverIndex
|
||||
}
|
||||
|
|
|
@ -45,7 +45,7 @@ class AudioPlayer: NSObject {
|
|||
internal var sleepTimer: Timer?
|
||||
internal var sleepTimeRemaining: Double?
|
||||
|
||||
private var currentTrackIndex = 0
|
||||
internal var currentTrackIndex = 0
|
||||
private var allPlayerItems:[AVPlayerItem] = []
|
||||
|
||||
private var pausedTimer: Timer?
|
||||
|
|
|
@ -22,7 +22,7 @@ extension AudioPlayer {
|
|||
// Return the player time until sleep
|
||||
var sleepTimeRemaining: Double? = nil
|
||||
if let chapterStopAt = self.sleepTimeChapterStopAt {
|
||||
sleepTimeRemaining = chapterStopAt - currentTime
|
||||
sleepTimeRemaining = (chapterStopAt - currentTime) / Double(self.rate > 0 ? self.rate : 1.0)
|
||||
} else if self.isCountdownSleepTimerSet() {
|
||||
sleepTimeRemaining = self.sleepTimeRemaining
|
||||
}
|
||||
|
@ -59,7 +59,22 @@ extension AudioPlayer {
|
|||
|
||||
// Schedule the observation time
|
||||
self.sleepTimeChapterStopAt = stopAt
|
||||
let sleepTime = CMTime(seconds: stopAt, preferredTimescale: CMTimeScale(NSEC_PER_SEC))
|
||||
|
||||
// Get the current track
|
||||
guard let playbackSession = self.getPlaybackSession() else { return }
|
||||
let currentTrack = playbackSession.audioTracks[currentTrackIndex]
|
||||
|
||||
// Set values
|
||||
guard let trackStartTime = currentTrack.startOffset else { return }
|
||||
guard let trackEndTime = currentTrack.endOffset else { return }
|
||||
|
||||
// Verify the stop is during the current audio track
|
||||
guard trackEndTime >= stopAt else { return }
|
||||
|
||||
// Schedule the observation time
|
||||
let trackBasedStopTime = stopAt - trackStartTime
|
||||
|
||||
let sleepTime = CMTime(seconds: trackBasedStopTime, preferredTimescale: CMTimeScale(NSEC_PER_SEC))
|
||||
var times = [NSValue]()
|
||||
times.append(NSValue(time: sleepTime))
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue