Match rewind times to android

This commit is contained in:
Adam Traeger 2025-03-11 19:52:07 -05:00
parent 922601eab7
commit 35d60ecaa0
No known key found for this signature in database
GPG key ID: 136E380CBA630639
2 changed files with 31 additions and 44 deletions

View file

@ -14,38 +14,33 @@ final class PlayerTimeUtilsTests: XCTestCase {
let currentTime: Double = 1000
// 1. Nil lastPlayedMs should seek back 5s
XCTAssertEqual(PlayerTimeUtils.calcSeekBackTime(currentTime: currentTime, lastPlayedMs: nil), 995)
XCTAssertEqual(PlayerTimeUtils.calcSeekBackTime(currentTime: currentTime, lastPlayedMs: nil), 1000)
// 2. Played ~3s ago (<6s) should seek back 2s
let played3sAgo = Date(timeIntervalSinceNow: -3).timeIntervalSince1970 * 1000
XCTAssertEqual(PlayerTimeUtils.calcSeekBackTime(currentTime: currentTime, lastPlayedMs: played3sAgo), 998)
// 2. Played ~2s ago (<6s) should seek back 2s
let played2sAgo = Date(timeIntervalSinceNow: -2).timeIntervalSince1970 * 1000
XCTAssertEqual(PlayerTimeUtils.calcSeekBackTime(currentTime: currentTime, lastPlayedMs: played2sAgo), 1000)
// 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)
// 3. Played ~12s ago (6-12s range) should seek back 10s
let played12sAgo = Date(timeIntervalSinceNow: -12).timeIntervalSince1970 * 1000
XCTAssertEqual(PlayerTimeUtils.calcSeekBackTime(currentTime: currentTime, lastPlayedMs: played12sAgo), 997)
// 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)
// 4. Played ~62s ago (12-30s range) should seek back 15s
let played62sAgo = Date(timeIntervalSinceNow: -62).timeIntervalSince1970 * 1000
XCTAssertEqual(PlayerTimeUtils.calcSeekBackTime(currentTime: currentTime, lastPlayedMs: played62sAgo), 990)
// 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)
// 5. Played ~302s ago (30-180s range) should seek back 20s
let played302sAgo = Date(timeIntervalSinceNow: -302).timeIntervalSince1970 * 1000
XCTAssertEqual(PlayerTimeUtils.calcSeekBackTime(currentTime: currentTime, lastPlayedMs: played302sAgo), 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)
// 6. Played ~1802s ago (180-3600s range) should seek back 25s
let played1802sAgo = Date(timeIntervalSinceNow: -1802).timeIntervalSince1970 * 1000
XCTAssertEqual(PlayerTimeUtils.calcSeekBackTime(currentTime: currentTime, lastPlayedMs: played1802sAgo), 970)
// 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)
XCTAssertEqual(PlayerTimeUtils.calcSeekBackTime(currentTime: 1, lastPlayedMs: played12sAgo), 0)
// 9. Edge case: negative lastPlayedMs (should be treated as an old timestamp)
XCTAssertEqual(PlayerTimeUtils.calcSeekBackTime(currentTime: currentTime, lastPlayedMs: -5000), 971)
XCTAssertEqual(PlayerTimeUtils.calcSeekBackTime(currentTime: currentTime, lastPlayedMs: -5000), 970)
}
@ -64,13 +59,13 @@ final class PlayerTimeUtilsTests: XCTestCase {
}
func testTimeToSeekBackForSinceLastPlayed() throws {
XCTAssertEqual(PlayerTimeUtils.timeToSeekBackForSinceLastPlayed(nil), 5, "Seeks back 5 seconds for nil")
XCTAssertEqual(PlayerTimeUtils.timeToSeekBackForSinceLastPlayed(5), 2, "Seeks back 2 seconds for less than 6 seconds")
XCTAssertEqual(PlayerTimeUtils.timeToSeekBackForSinceLastPlayed(11), 10, "Seeks back 10 seconds for less than 12 seconds")
XCTAssertEqual(PlayerTimeUtils.timeToSeekBackForSinceLastPlayed(29), 15, "Seeks back 15 seconds for less than 30 seconds")
XCTAssertEqual(PlayerTimeUtils.timeToSeekBackForSinceLastPlayed(179), 20, "Seeks back 20 seconds for less than 2 minutes")
XCTAssertEqual(PlayerTimeUtils.timeToSeekBackForSinceLastPlayed(3599), 25, "Seeks back 25 seconds for less than 59 minutes")
XCTAssertEqual(PlayerTimeUtils.timeToSeekBackForSinceLastPlayed(60000), 29, "Seeks back 29 seconds for anything over 59 minuts")
XCTAssertEqual(PlayerTimeUtils.timeToSeekBackForSinceLastPlayed(nil), 0, "Seeks back 0 seconds for nil")
XCTAssertEqual(PlayerTimeUtils.timeToSeekBackForSinceLastPlayed(5), 0, "Seeks back 0 seconds for less than 10 seconds")
XCTAssertEqual(PlayerTimeUtils.timeToSeekBackForSinceLastPlayed(11), 3, "Seeks back 3 seconds for less than 1 minute")
XCTAssertEqual(PlayerTimeUtils.timeToSeekBackForSinceLastPlayed(298), 10, "Seeks back 10 seconds for less than 5 minutes")
XCTAssertEqual(PlayerTimeUtils.timeToSeekBackForSinceLastPlayed(1798), 20, "Seeks back 20 seconds for less than 30 minutes")
XCTAssertEqual(PlayerTimeUtils.timeToSeekBackForSinceLastPlayed(3599), 30, "Seeks back 30 seconds for greater than 30 minutes")
}
}

View file

@ -29,21 +29,13 @@ class PlayerTimeUtils {
return 0
}
if let sinceLastPlayed = sinceLastPlayed {
if sinceLastPlayed < 6 {
return 2
} else if sinceLastPlayed < 12 {
return 10
} else if sinceLastPlayed < 30 {
return 15
} else if sinceLastPlayed < 180 {
return 20
} else if sinceLastPlayed < 3600 {
return 25
} else {
return 29
}
if sinceLastPlayed < 10 { return 0 } // 10s or less = no seekback
else if sinceLastPlayed < 60 { return 3 } // 10s to 1m = jump back 3s
else if sinceLastPlayed < 300 { return 10 } // 1m to 5m = jump back 10s
else if sinceLastPlayed < 1800 { return 20 } // 5m to 30m = jump back 20s
else { return 30 } // 30m and up = jump back 30s
} else {
return 5
return 0
}
}