From 4935155078dfd7cfec512abb4635ef4df74295cc Mon Sep 17 00:00:00 2001 From: svd Date: Tue, 26 Oct 2021 10:36:08 +0800 Subject: [PATCH] add auto seekback --- .../app/PlayerNotificationService.kt | 19 ++++++++++++++++ components/AudioPlayerMini.vue | 22 +++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/android/app/src/main/java/com/audiobookshelf/app/PlayerNotificationService.kt b/android/app/src/main/java/com/audiobookshelf/app/PlayerNotificationService.kt index 6c6f9251..c1fc72f5 100644 --- a/android/app/src/main/java/com/audiobookshelf/app/PlayerNotificationService.kt +++ b/android/app/src/main/java/com/audiobookshelf/app/PlayerNotificationService.kt @@ -488,6 +488,19 @@ class PlayerNotificationService : MediaBrowserServiceCompat() { return lastPauseTime } + fun calcPauseSeekBackTime() : Long { + if (lastPauseTime <= 0) return 0 + var time: Long = System.currentTimeMillis() - lastPauseTime + var seekback: Long = 0 + if (time < 3) seekback = 0 + else if (time < 60000) seekback = time / 6 + else if (time < 300000) seekback = 15000 + else if (time < 1800000) seekback = 20000 + else if (time < 3600000) seekback = 25000 + else seekback = 29500 + return seekback + } + fun getPlayStatus() : Boolean { return mPlayer.isPlaying } @@ -501,6 +514,12 @@ class PlayerNotificationService : MediaBrowserServiceCompat() { Log.d(tag, "Already playing") return } + if (lastPauseTime > 0) { + var backTime = calcPauseSeekBackTime() + if (backTime >= mPlayer.currentPosition) backTime = mPlayer.currentPosition - 500 + Log.d(tag, "SeekBackTime $backTime") + seekBackward(backTime) + } mPlayer.play() } diff --git a/components/AudioPlayerMini.vue b/components/AudioPlayerMini.vue index aaf505f4..905ae743 100644 --- a/components/AudioPlayerMini.vue +++ b/components/AudioPlayerMini.vue @@ -198,6 +198,17 @@ export default { this.pause() } }, + calcSeekBackTime(lastUpdate) { + var time = Date.now() - lastUpdate + var seekback = 0 + if (time < 3) seekback = 0 + else if (time < 60000) seekback = time / 6 + else if (time < 300000) seekback = 15000 + else if (time < 1800000) seekback = 20000 + else if (time < 3600000) seekback = 25000 + else seekback = 29500 + return seekback + }, async set(audiobookStreamData, stream, fromAppDestroy) { this.isResetting = false this.initObject = { ...audiobookStreamData } @@ -222,6 +233,17 @@ export default { init = false this.initObject.startTime = String(Math.floor(this.currentTime * 1000)) } + //new audiobook stream or sync from other client + else if (stream.clientCurrentTime > 0) { + console.log('new audiobook stream or sync from other client') + if (!!stream.lastUpdate) { + var backTime = this.calcSeekBackTime(stream.lastUpdate) + var currentTime = Math.floor(stream.clientCurrentTime * 1000) + if (backTime >= currentTime) backTime = currentTime - 500 + console.log('SeekBackTime', backTime) + this.initObject.startTime = String(Math.floor(currentTime - backTime)) + } + } } this.currentPlaybackRate = this.initObject.playbackSpeed if (init) MyNativeAudio.initPlayer(this.initObject).then((res) => {