diff --git a/android/app/src/main/java/com/audiobookshelf/app/MyNativeAudio.kt b/android/app/src/main/java/com/audiobookshelf/app/MyNativeAudio.kt index b1104a4d..796db4c2 100644 --- a/android/app/src/main/java/com/audiobookshelf/app/MyNativeAudio.kt +++ b/android/app/src/main/java/com/audiobookshelf/app/MyNativeAudio.kt @@ -96,11 +96,14 @@ class MyNativeAudio : Plugin() { //if (!isPlaying) currentTime -= playerNotificationService.calcPauseSeekBackTime() var id = playerNotificationService.getCurrentAudiobookId() Log.d(tag, "Get Current id $id") + var duration = playerNotificationService.getDuration() + Log.d(tag, "Get duration $duration") val ret = JSObject() ret.put("lastPauseTime", lastPauseTime) ret.put("currentTime", currentTime) ret.put("isPlaying", isPlaying) ret.put("id", id) + ret.put("duration", duration) call.resolve(ret) } } 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 6c15b91b..c04975ab 100644 --- a/android/app/src/main/java/com/audiobookshelf/app/PlayerNotificationService.kt +++ b/android/app/src/main/java/com/audiobookshelf/app/PlayerNotificationService.kt @@ -388,11 +388,16 @@ class PlayerNotificationService : MediaBrowserServiceCompat() { }*/ currentAudiobook!!.hasPlayerLoaded = true - sendClientMetadata("ready") + if (lastPauseTime == 0L) { + sendClientMetadata("ready_no_sync") + lastPauseTime = -1; + } + else sendClientMetadata("ready") } if (mPlayer.playbackState == Player.STATE_BUFFERING) { Log.d(tag, "STATE_BUFFERING : " + mPlayer.currentPosition.toString()) - sendClientMetadata("buffering") + if (lastPauseTime == 0L) sendClientMetadata("buffering_no_sync") + else sendClientMetadata("buffering") } if (mPlayer.playbackState == Player.STATE_ENDED) { Log.d(tag, "STATE_ENDED") @@ -488,6 +493,10 @@ class PlayerNotificationService : MediaBrowserServiceCompat() { return lastPauseTime } + fun getDuration() : Long { + return mPlayer.duration + } + fun calcPauseSeekBackTime() : Long { if (lastPauseTime <= 0) return 0 var time: Long = System.currentTimeMillis() - lastPauseTime diff --git a/components/AudioPlayerMini.vue b/components/AudioPlayerMini.vue index 7661c3e6..4c4642d2 100644 --- a/components/AudioPlayerMini.vue +++ b/components/AudioPlayerMini.vue @@ -74,7 +74,8 @@ export default { seekedTime: 0, seekLoading: false, onPlayingUpdateListener: null, - onMetadataListener: null + onMetadataListener: null, + noSyncUpdateTime: false } }, computed: { @@ -100,7 +101,7 @@ export default { MyNativeAudio.seekForward({ amount: '10000' }) }, sendStreamUpdate() { - this.$emit('updateTime', this.currentTime) + this.$emit('updateTime', this.currentTime) }, setStreamReady() { this.readyTrackWidth = this.trackWidth @@ -150,7 +151,8 @@ export default { } this.updateTimestamp() - this.sendStreamUpdate() + if (this.noSyncUpdateTime) this.noSyncUpdateTime = false + else this.sendStreamUpdate() var perc = this.currentTime / this.totalDuration var ptWidth = Math.round(perc * this.trackWidth) @@ -226,6 +228,7 @@ export default { console.log('Same audiobook') this.isPaused = !data.isPlaying this.currentTime = Number((data.currentTime / 1000).toFixed(2)) + this.totalDuration = Number((data.duration / 1000).toFixed(2)) this.timeupdate() if (data.isPlaying) { console.log('playing - continue') @@ -330,7 +333,9 @@ export default { this.setFromObj() } - this.timeupdate() + if ((this.stateName === 'ready_no_sync') || (this.stateName === 'buffering_no_sync')) this.noSyncUpdateTime = true + + this.timeupdate() }, init() { this.onPlayingUpdateListener = MyNativeAudio.addListener('onPlayingUpdate', this.onPlayingUpdate)