mirror of
https://github.com/advplyr/audiobookshelf-app.git
synced 2025-08-19 09:08:26 +02:00
Update:Less aggressive seek back after pausing, first seek back starts on a 10s pause and jumps back 3s #230. Minimum seek back after a pause is the current chapter start time #244
This commit is contained in:
parent
f353a44fac
commit
3840f2f344
4 changed files with 30 additions and 8 deletions
|
@ -399,7 +399,12 @@ data class BookChapter(
|
||||||
var start:Double,
|
var start:Double,
|
||||||
var end:Double,
|
var end:Double,
|
||||||
var title:String?
|
var title:String?
|
||||||
)
|
) {
|
||||||
|
@get:JsonIgnore
|
||||||
|
val startMs get() = (start * 1000L).toLong()
|
||||||
|
@get:JsonIgnore
|
||||||
|
val endMs get() = (end * 1000L).toLong()
|
||||||
|
}
|
||||||
|
|
||||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
data class MediaProgress(
|
data class MediaProgress(
|
||||||
|
|
|
@ -67,15 +67,21 @@ class PlaybackSession(
|
||||||
|
|
||||||
@JsonIgnore
|
@JsonIgnore
|
||||||
fun getCurrentTrackIndex():Int {
|
fun getCurrentTrackIndex():Int {
|
||||||
for (i in 0..(audioTracks.size - 1)) {
|
for (i in 0 until audioTracks.size) {
|
||||||
val track = audioTracks[i]
|
val track = audioTracks[i]
|
||||||
if (currentTimeMs >= track.startOffsetMs && (track.endOffsetMs) > currentTimeMs) {
|
if (currentTimeMs >= track.startOffsetMs && (track.endOffsetMs > currentTimeMs)) {
|
||||||
return i
|
return i
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return audioTracks.size - 1
|
return audioTracks.size - 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@JsonIgnore
|
||||||
|
fun getChapterForTime(time:Long):BookChapter? {
|
||||||
|
if (chapters.isEmpty()) return null
|
||||||
|
return chapters.find { time >= it.startMs && it.endMs > time}
|
||||||
|
}
|
||||||
|
|
||||||
@JsonIgnore
|
@JsonIgnore
|
||||||
fun getCurrentTrackTimeMs():Long {
|
fun getCurrentTrackTimeMs():Long {
|
||||||
val currentTrack = audioTracks[this.getCurrentTrackIndex()]
|
val currentTrack = audioTracks[this.getCurrentTrackIndex()]
|
||||||
|
|
|
@ -75,12 +75,18 @@ class PlayerListener(var playerNotificationService:PlayerNotificationService) :
|
||||||
Log.d(tag, "SeekBackTime: playing started now set seek back time $lastPauseTime")
|
Log.d(tag, "SeekBackTime: playing started now set seek back time $lastPauseTime")
|
||||||
var backTime = calcPauseSeekBackTime()
|
var backTime = calcPauseSeekBackTime()
|
||||||
if (backTime > 0) {
|
if (backTime > 0) {
|
||||||
if (backTime >= playerNotificationService.getCurrentTime()) backTime = playerNotificationService.getCurrentTime() - 500
|
// Current chapter is used so that seek back does not go back to the previous chapter
|
||||||
|
val currentChapter = playerNotificationService.getCurrentBookChapter()
|
||||||
|
val minSeekBackTime = currentChapter?.startMs ?: 0
|
||||||
|
|
||||||
|
val currentTime = playerNotificationService.getCurrentTime()
|
||||||
|
val newTime = currentTime - backTime
|
||||||
|
if (newTime < minSeekBackTime) {
|
||||||
|
backTime = currentTime - minSeekBackTime
|
||||||
|
}
|
||||||
Log.d(tag, "SeekBackTime $backTime")
|
Log.d(tag, "SeekBackTime $backTime")
|
||||||
onSeekBack = true
|
onSeekBack = true
|
||||||
playerNotificationService.seekBackward(backTime)
|
playerNotificationService.seekBackward(backTime)
|
||||||
} else {
|
|
||||||
Log.d(tag, "SeekBackTime: back time is 0")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -113,8 +119,9 @@ class PlayerListener(var playerNotificationService:PlayerNotificationService) :
|
||||||
if (lastPauseTime <= 0) return 0
|
if (lastPauseTime <= 0) return 0
|
||||||
val time: Long = System.currentTimeMillis() - lastPauseTime
|
val time: Long = System.currentTimeMillis() - lastPauseTime
|
||||||
val seekback: Long
|
val seekback: Long
|
||||||
if (time < 3000) seekback = 0
|
if (time < 10000) seekback = 0 // 10s or less = no seekback
|
||||||
else if (time < 300000) seekback = 10000 // 3s to 5m = jump back 10s
|
else if (time < 60000) seekback = 3000 // 10s to 1m = jump back 3s
|
||||||
|
else if (time < 300000) seekback = 10000 // 1m to 5m = jump back 10s
|
||||||
else if (time < 1800000) seekback = 20000 // 5m to 30m = jump back 20s
|
else if (time < 1800000) seekback = 20000 // 5m to 30m = jump back 20s
|
||||||
else seekback = 29500 // 30m and up = jump back 30s
|
else seekback = 29500 // 30m and up = jump back 30s
|
||||||
return seekback
|
return seekback
|
||||||
|
|
|
@ -507,6 +507,10 @@ class PlayerNotificationService : MediaBrowserServiceCompat() {
|
||||||
return currentPlaybackSession?.id
|
return currentPlaybackSession?.id
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun getCurrentBookChapter():BookChapter? {
|
||||||
|
return currentPlaybackSession?.getChapterForTime(this.getCurrentTime())
|
||||||
|
}
|
||||||
|
|
||||||
// Called from PlayerListener play event
|
// Called from PlayerListener play event
|
||||||
// check with server if progress has updated since last play and sync progress update
|
// check with server if progress has updated since last play and sync progress update
|
||||||
fun checkCurrentSessionProgress():Boolean {
|
fun checkCurrentSessionProgress():Boolean {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue