diff --git a/components/app/AudioPlayerContainer.vue b/components/app/AudioPlayerContainer.vue index 060a2878..2cd17531 100644 --- a/components/app/AudioPlayerContainer.vue +++ b/components/app/AudioPlayerContainer.vue @@ -188,6 +188,7 @@ export default { const libraryItemId = payload.libraryItemId const episodeId = payload.episodeId const startTime = payload.startTime + const startWhenReady = !payload.paused // When playing local library item and can also play this item from the server // then store the server library item id so it can be used if a cast is made @@ -223,7 +224,7 @@ export default { } console.log('Called playLibraryItem', libraryItemId) - const preparePayload = { libraryItemId, episodeId, playWhenReady: true, playbackRate } + const preparePayload = { libraryItemId, episodeId, playWhenReady: startWhenReady, playbackRate } if (startTime !== undefined && startTime !== null) preparePayload.startTime = startTime AbsAudioPlayer.prepareLibraryItem(preparePayload) .then((data) => { diff --git a/pages/bookshelf/index.vue b/pages/bookshelf/index.vue index 2eaffa05..14770ec6 100644 --- a/pages/bookshelf/index.vue +++ b/pages/bookshelf/index.vue @@ -39,6 +39,7 @@ export default { shelves: [], loading: false, isFirstNetworkConnection: true, + isFirstAutoOpenPlayer: true, lastServerFetch: 0, lastServerFetchLibraryId: null, lastLocalFetch: 0, @@ -247,6 +248,8 @@ export default { return cat }) + this.openMediaPlayerWithMostRecentListening() + // Only add the local shelf with the same media type const localShelves = localCategories.filter((cat) => cat.type === this.currentLibraryMediaType && !cat.localOnly) this.shelves.push(...localShelves) @@ -261,6 +264,40 @@ export default { this.loading = false }, + openMediaPlayerWithMostRecentListening() { + // If we don't already have a player open + // Try opening the first book from continue-listening without playing it + if (this.$store.state.playerLibraryItemId || !this.isFirstAutoOpenPlayer) return + this.isFirstAutoOpenPlayer = false // Only run this once, not on every library change + + const continueListeningShelf = this.shelves.find((cat) => cat.id === 'continue-listening') + const mostRecentEntity = continueListeningShelf?.entities?.[0] + if (mostRecentEntity) { + const playObject = { + libraryItemId: mostRecentEntity.id, + episodeId: mostRecentEntity.recentEpisode?.id || null, + paused: true + } + + // Check if there is a local copy + if (mostRecentEntity.localLibraryItem) { + if (mostRecentEntity.recentEpisode) { + // Check if the podcast episode has a local copy + const localEpisode = mostRecentEntity.localLibraryItem.media.episodes.find((ep) => ep.serverEpisodeId === mostRecentEntity.recentEpisode.id) + if (localEpisode) { + playObject.libraryItemId = mostRecentEntity.localLibraryItem.id + playObject.episodeId = localEpisode.id + playObject.serverLibraryItemId = mostRecentEntity.id + playObject.serverEpisodeId = mostRecentEntity.recentEpisode.id + } + } else { + playObject.libraryItemId = mostRecentEntity.localLibraryItem.id + playObject.serverLibraryItemId = mostRecentEntity.id + } + } + this.$eventBus.$emit('play-item', playObject) + } + }, libraryChanged() { if (this.currentLibraryId) { console.log(`[categories] libraryChanged so fetching categories`)