diff --git a/android/app/src/main/java/com/audiobookshelf/app/AudiobookProgressSyncer.kt b/android/app/src/main/java/com/audiobookshelf/app/AudiobookProgressSyncer.kt index 4420ed98..f628f4c7 100644 --- a/android/app/src/main/java/com/audiobookshelf/app/AudiobookProgressSyncer.kt +++ b/android/app/src/main/java/com/audiobookshelf/app/AudiobookProgressSyncer.kt @@ -24,6 +24,7 @@ class AudiobookProgressSyncer constructor(playerNotificationService:PlayerNotifi var listeningTimerRunning:Boolean = false private var webviewOpenOnStart:Boolean = false + private var webviewClosedMidSession:Boolean = false private var listeningBookTitle:String? = "" private var listeningBookIsLocal:Boolean = false private var listeningBookId:String? = "" @@ -54,9 +55,16 @@ class AudiobookProgressSyncer constructor(playerNotificationService:PlayerNotifi listeningTimerTask = Timer("ListeningTimer", false).schedule(0L, 5000L) { Handler(Looper.getMainLooper()).post() { // Webview was closed while android auto is open - switch to native sync - if (!playerNotificationService.getIsWebviewOpen() && webviewOpenOnStart) { + var isWebviewOpen = playerNotificationService.getIsWebviewOpen() + if (!isWebviewOpen && webviewOpenOnStart) { Log.d(tag, "Listening Timer: webview closed Switching to native sync tracking") webviewOpenOnStart = false + webviewClosedMidSession = true + lastUpdateTime = System.currentTimeMillis() / 1000L + } else if (isWebviewOpen && webviewClosedMidSession) { + Log.d(tag, "Listening Timer: webview re-opened Switching back to webview sync tracking") + webviewClosedMidSession = false + webviewOpenOnStart = true lastUpdateTime = System.currentTimeMillis() / 1000L } if (!webviewOpenOnStart && playerNotificationService.currentPlayer.isPlaying) { @@ -97,7 +105,7 @@ class AudiobookProgressSyncer constructor(playerNotificationService:PlayerNotifi // Send sync data only for streaming books var syncData: JSObject = JSObject() syncData.put("timeListened", elapsed) - syncData.put("currentTime", playerNotificationService.getCurrentTime()) + syncData.put("currentTime", playerNotificationService.getCurrentTime() / 1000) syncData.put("streamId", listeningStreamId) syncData.put("audiobookId", listeningBookId) sendStreamSyncData(syncData) { diff --git a/components/app/AudioPlayer.vue b/components/app/AudioPlayer.vue index ea0f4f5e..ec142972 100644 --- a/components/app/AudioPlayer.vue +++ b/components/app/AudioPlayer.vue @@ -185,15 +185,20 @@ export default { return this.book.authorFL }, chapters() { - return this.audiobook ? this.audiobook.chapters || [] : [] + return (this.audiobook ? this.audiobook.chapters || [] : []).map((chapter) => { + var chap = { ...chapter } + chap.start = Number(chap.start) + chap.end = Number(chap.end) + return chap + }) }, currentChapter() { if (!this.audiobook || !this.chapters.length) return null - return this.chapters.find((ch) => Number(ch.start.toFixed(2)) <= this.currentTime && Number(ch.end.toFixed(2)) > this.currentTime) + return this.chapters.find((ch) => Number(Number(ch.start).toFixed(2)) <= this.currentTime && Number(Number(ch.end).toFixed(2)) > this.currentTime) }, nextChapter() { if (!this.chapters.length) return - return this.chapters.find((c) => Number(c.start.toFixed(2)) > this.currentTime) + return this.chapters.find((c) => Number(Number(c.start).toFixed(2)) > this.currentTime) }, currentChapterTitle() { return this.currentChapter ? this.currentChapter.title : '' @@ -336,7 +341,7 @@ export default { // If 1 second or less into current chapter, then go to previous if (this.currentTime - this.currentChapter.start <= 1) { - var currChapterIndex = this.chapters.findIndex((ch) => ch.start <= this.currentTime && ch.end >= this.currentTime) + var currChapterIndex = this.chapters.findIndex((ch) => Number(ch.start) <= this.currentTime && Number(ch.end) >= this.currentTime) if (currChapterIndex > 0) { var prevChapter = this.chapters[currChapterIndex - 1] this.seek(prevChapter.start) diff --git a/components/app/AudioPlayerContainer.vue b/components/app/AudioPlayerContainer.vue index 53ab10e4..bfba919b 100644 --- a/components/app/AudioPlayerContainer.vue +++ b/components/app/AudioPlayerContainer.vue @@ -78,7 +78,7 @@ export default { }, currentChapter() { if (!this.audiobook || !this.chapters.length) return null - return this.chapters.find((ch) => ch.start <= this.currentTime && ch.end > this.currentTime) + return this.chapters.find((ch) => Number(ch.start) <= this.currentTime && Number(ch.end) > this.currentTime) }, socketConnected() { return this.$store.state.socketConnected