mirror of
https://github.com/advplyr/audiobookshelf-app.git
synced 2025-08-05 18:45:47 +02:00
IOS: Support autoRewind and disableAutoRewind setting
This commit is contained in:
parent
f65d3213fe
commit
922601eab7
3 changed files with 46 additions and 6 deletions
|
@ -12,9 +12,41 @@ final class PlayerTimeUtilsTests: XCTestCase {
|
|||
|
||||
func testCalcSeekBackTime() {
|
||||
let currentTime: Double = 1000
|
||||
let threeSecondsAgo = Date(timeIntervalSinceNow: -3)
|
||||
let lastPlayedMs = threeSecondsAgo.timeIntervalSince1970 * 1000
|
||||
XCTAssertEqual(PlayerTimeUtils.calcSeekBackTime(currentTime: currentTime, lastPlayedMs: lastPlayedMs), 998)
|
||||
|
||||
// 1. Nil lastPlayedMs → should seek back 5s
|
||||
XCTAssertEqual(PlayerTimeUtils.calcSeekBackTime(currentTime: currentTime, lastPlayedMs: nil), 995)
|
||||
|
||||
// 2. Played ~3s ago (<6s) → should seek back 2s
|
||||
let played3sAgo = Date(timeIntervalSinceNow: -3).timeIntervalSince1970 * 1000
|
||||
XCTAssertEqual(PlayerTimeUtils.calcSeekBackTime(currentTime: currentTime, lastPlayedMs: played3sAgo), 998)
|
||||
|
||||
// 3. Played ~8s ago (6-12s range) → should seek back 10s
|
||||
let played8sAgo = Date(timeIntervalSinceNow: -8).timeIntervalSince1970 * 1000
|
||||
XCTAssertEqual(PlayerTimeUtils.calcSeekBackTime(currentTime: currentTime, lastPlayedMs: played8sAgo), 990)
|
||||
|
||||
// 4. Played ~20s ago (12-30s range) → should seek back 15s
|
||||
let played20sAgo = Date(timeIntervalSinceNow: -20).timeIntervalSince1970 * 1000
|
||||
XCTAssertEqual(PlayerTimeUtils.calcSeekBackTime(currentTime: currentTime, lastPlayedMs: played20sAgo), 985)
|
||||
|
||||
// 5. Played ~60s ago (30-180s range) → should seek back 20s
|
||||
let played60sAgo = Date(timeIntervalSinceNow: -60).timeIntervalSince1970 * 1000
|
||||
XCTAssertEqual(PlayerTimeUtils.calcSeekBackTime(currentTime: currentTime, lastPlayedMs: played60sAgo), 980)
|
||||
|
||||
// 6. Played ~300s ago (180-3600s range) → should seek back 25s
|
||||
let played300sAgo = Date(timeIntervalSinceNow: -300).timeIntervalSince1970 * 1000
|
||||
XCTAssertEqual(PlayerTimeUtils.calcSeekBackTime(currentTime: currentTime, lastPlayedMs: played300sAgo), 975)
|
||||
|
||||
// 7. Played ~4000s ago (>3600s range) → should seek back 29s
|
||||
let played4000sAgo = Date(timeIntervalSinceNow: -4000).timeIntervalSince1970 * 1000
|
||||
XCTAssertEqual(PlayerTimeUtils.calcSeekBackTime(currentTime: currentTime, lastPlayedMs: played4000sAgo), 971)
|
||||
|
||||
// 8. Edge case where currentTime is small and would go negative
|
||||
XCTAssertEqual(PlayerTimeUtils.calcSeekBackTime(currentTime: 3, lastPlayedMs: played3sAgo), 1)
|
||||
XCTAssertEqual(PlayerTimeUtils.calcSeekBackTime(currentTime: 1, lastPlayedMs: played3sAgo), 0)
|
||||
|
||||
// 9. Edge case: negative lastPlayedMs (should be treated as an old timestamp)
|
||||
XCTAssertEqual(PlayerTimeUtils.calcSeekBackTime(currentTime: currentTime, lastPlayedMs: -5000), 971)
|
||||
|
||||
}
|
||||
|
||||
func testCalcSeekBackTimeWithZeroCurrentTime() {
|
||||
|
@ -27,7 +59,7 @@ final class PlayerTimeUtilsTests: XCTestCase {
|
|||
func testTimeSinceLastPlayed() throws {
|
||||
let fiveSecondsAgo = Date(timeIntervalSinceNow: -5)
|
||||
let lastPlayedMs = fiveSecondsAgo.timeIntervalSince1970 * 1000
|
||||
XCTAssertEqual(PlayerTimeUtils.timeSinceLastPlayed(lastPlayedMs)!, -5, accuracy: 1.0)
|
||||
XCTAssertEqual(PlayerTimeUtils.timeSinceLastPlayed(lastPlayedMs)!, 5, accuracy: 1.0)
|
||||
XCTAssertNil(PlayerTimeUtils.timeSinceLastPlayed(nil))
|
||||
}
|
||||
|
||||
|
|
|
@ -21,10 +21,13 @@ class PlayerTimeUtils {
|
|||
static internal func timeSinceLastPlayed(_ lastPlayedMs: Double?) -> TimeInterval? {
|
||||
guard let lastPlayedMs = lastPlayedMs else { return nil }
|
||||
let lastPlayed = Date(timeIntervalSince1970: lastPlayedMs / 1000)
|
||||
return lastPlayed.timeIntervalSinceNow
|
||||
return Date().timeIntervalSince(lastPlayed)
|
||||
}
|
||||
|
||||
static internal func timeToSeekBackForSinceLastPlayed(_ sinceLastPlayed: TimeInterval?) -> TimeInterval {
|
||||
if isAutoRewindDisabled(){
|
||||
return 0
|
||||
}
|
||||
if let sinceLastPlayed = sinceLastPlayed {
|
||||
if sinceLastPlayed < 6 {
|
||||
return 2
|
||||
|
@ -44,4 +47,9 @@ class PlayerTimeUtils {
|
|||
}
|
||||
}
|
||||
|
||||
static internal func isAutoRewindDisabled() -> Bool {
|
||||
let deviceSettings = Database.shared.getDeviceSettings()
|
||||
return deviceSettings.disableAutoRewind
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue