Update episode list to come from component ref, populate queue from table order when playing episode

This commit is contained in:
advplyr 2025-02-25 17:25:56 -06:00
parent 72169990ac
commit fd1c8ee513
3 changed files with 11 additions and 28 deletions

View File

@ -89,13 +89,6 @@ export default {
handler() { handler() {
this.refresh() this.refresh()
} }
},
episodesList: {
handler(newList) {
const episodeIds = newList.map((ep) => ep.id)
this.$store.commit('setSortedEpisodeIds', episodeIds)
},
immediate: true
} }
}, },
computed: { computed: {
@ -368,20 +361,20 @@ export default {
playEpisode(episode) { playEpisode(episode) {
const queueItems = [] const queueItems = []
const episodesInListeningOrder = this.episodesCopy.map((ep) => ({ ...ep })).sort((a, b) => String(a.publishedAt).localeCompare(String(b.publishedAt), undefined, { numeric: true, sensitivity: 'base' })) const episodesInListeningOrder = this.episodesList
const episodeIndex = episodesInListeningOrder.findIndex((e) => e.id === episode.id) const episodeIndex = episodesInListeningOrder.findIndex((e) => e.id === episode.id)
for (let i = episodeIndex; i < episodesInListeningOrder.length; i++) { for (let i = episodeIndex; i < episodesInListeningOrder.length; i++) {
const episode = episodesInListeningOrder[i] const _episode = episodesInListeningOrder[i]
const podcastProgress = this.$store.getters['user/getUserMediaProgress'](this.libraryItem.id, episode.id) const podcastProgress = this.$store.getters['user/getUserMediaProgress'](this.libraryItem.id, _episode.id)
if (!podcastProgress || !podcastProgress.isFinished) { if (!podcastProgress?.isFinished || episode.id === _episode.id) {
queueItems.push({ queueItems.push({
libraryItemId: this.libraryItem.id, libraryItemId: this.libraryItem.id,
libraryId: this.libraryItem.libraryId, libraryId: this.libraryItem.libraryId,
episodeId: episode.id, episodeId: _episode.id,
title: episode.title, title: _episode.title,
subtitle: this.mediaMetadata.title, subtitle: this.mediaMetadata.title,
caption: episode.publishedAt ? this.$getString('LabelPublishedDate', [this.$formatDate(episode.publishedAt, this.dateFormat)]) : this.$strings.LabelUnknownPublishDate, caption: _episode.publishedAt ? this.$getString('LabelPublishedDate', [this.$formatDate(_episode.publishedAt, this.dateFormat)]) : this.$strings.LabelUnknownPublishDate,
duration: episode.audioFile.duration || null, duration: _episode.audioFile.duration || null,
coverPath: this.media.coverPath || null coverPath: this.media.coverPath || null
}) })
} }

View File

@ -132,7 +132,7 @@
<tables-tracks-table v-if="tracks.length" :title="$strings.LabelStatsAudioTracks" :tracks="tracksWithAudioFile" :is-file="isFile" :library-item-id="libraryItemId" class="mt-6" /> <tables-tracks-table v-if="tracks.length" :title="$strings.LabelStatsAudioTracks" :tracks="tracksWithAudioFile" :is-file="isFile" :library-item-id="libraryItemId" class="mt-6" />
<tables-podcast-lazy-episodes-table v-if="isPodcast" :library-item="libraryItem" /> <tables-podcast-lazy-episodes-table ref="episodesTable" v-if="isPodcast" :library-item="libraryItem" />
<tables-ebook-files-table v-if="ebookFiles.length" :library-item="libraryItem" class="mt-6" /> <tables-ebook-files-table v-if="ebookFiles.length" :library-item="libraryItem" class="mt-6" />
@ -267,9 +267,6 @@ export default {
podcastEpisodes() { podcastEpisodes() {
return this.media.episodes || [] return this.media.episodes || []
}, },
sortedEpisodeIds() {
return this.$store.getters.getSortedEpisodeIds
},
title() { title() {
return this.mediaMetadata.title || 'No Title' return this.mediaMetadata.title || 'No Title'
}, },
@ -537,8 +534,8 @@ export default {
let episodeId = null let episodeId = null
const queueItems = [] const queueItems = []
if (this.isPodcast) { if (this.isPodcast) {
// Sort the episodes based on the sorting and filtering from the episode table component // Uses the sorting and filtering from the episode table component
const episodesInListeningOrder = this.sortedEpisodeIds.map((id) => this.podcastEpisodes.find((ep) => ep.id === id)) const episodesInListeningOrder = this.$refs.episodesTable?.episodesList || []
// Find the first unplayed episode from the table // Find the first unplayed episode from the table
let episodeIndex = episodesInListeningOrder.findIndex((ep) => { let episodeIndex = episodesInListeningOrder.findIndex((ep) => {

View File

@ -25,7 +25,6 @@ export const state = () => ({
previousPath: '/', previousPath: '/',
bookshelfBookIds: [], bookshelfBookIds: [],
episodeTableEpisodeIds: [], episodeTableEpisodeIds: [],
sortedEpisodeIds: [],
openModal: null, openModal: null,
innerModalOpen: false, innerModalOpen: false,
lastBookshelfScrollData: {}, lastBookshelfScrollData: {},
@ -62,9 +61,6 @@ export const getters = {
getHomeBookshelfView: (state) => { getHomeBookshelfView: (state) => {
if (!state.serverSettings || isNaN(state.serverSettings.homeBookshelfView)) return Constants.BookshelfView.STANDARD if (!state.serverSettings || isNaN(state.serverSettings.homeBookshelfView)) return Constants.BookshelfView.STANDARD
return state.serverSettings.homeBookshelfView return state.serverSettings.homeBookshelfView
},
getSortedEpisodeIds: (state) => {
return state.sortedEpisodeIds || []
} }
} }
@ -150,9 +146,6 @@ export const mutations = {
setEpisodeTableEpisodeIds(state, val) { setEpisodeTableEpisodeIds(state, val) {
state.episodeTableEpisodeIds = val || [] state.episodeTableEpisodeIds = val || []
}, },
setSortedEpisodeIds(state, episodeIds) {
state.sortedEpisodeIds = episodeIds || []
},
setPreviousPath(state, val) { setPreviousPath(state, val) {
state.previousPath = val state.previousPath = val
}, },