From c084766a24a11b62a40b569f46a6827fd7f9064b Mon Sep 17 00:00:00 2001 From: sir-wilhelm Date: Sat, 27 Dec 2025 12:45:00 -0600 Subject: [PATCH] Added Started Series to the progress list (only on the series page). This allows people to see all Series they have started, but not finished. It'll only be used on the series page, keeping the original filters/behavior for the Library / bookshelf views. --- client/components/controls/LibraryFilterSelect.vue | 14 ++++++++++++-- server/utils/queries/seriesFilters.js | 3 +++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/client/components/controls/LibraryFilterSelect.vue b/client/components/controls/LibraryFilterSelect.vue index 4834a1a25..66c41c839 100644 --- a/client/components/controls/LibraryFilterSelect.vue +++ b/client/components/controls/LibraryFilterSelect.vue @@ -389,7 +389,7 @@ export default { return this.filterData.publishedDecades || [] }, progress() { - return [ + const items = [ { id: 'finished', name: this.$strings.LabelFinished @@ -398,6 +398,15 @@ export default { id: 'in-progress', name: this.$strings.LabelInProgress }, + ] + // only add "started series" filter in series view + if (this.isSeries) { + items.push({ + id: 'started-series', + name: this.$strings.LabelStarted + }) + } + items.push( { id: 'not-started', name: this.$strings.LabelNotStarted @@ -406,7 +415,8 @@ export default { id: 'not-finished', name: this.$strings.LabelNotFinished } - ] + ) + return items }, tracks() { return [ diff --git a/server/utils/queries/seriesFilters.js b/server/utils/queries/seriesFilters.js index ed71e5b3f..578934809 100644 --- a/server/utils/queries/seriesFilters.js +++ b/server/utils/queries/seriesFilters.js @@ -83,6 +83,9 @@ module.exports = { const progQuery = 'SELECT count(*) FROM books b, bookSeries bs LEFT OUTER JOIN mediaProgresses mp ON mp.mediaItemId = b.id AND mp.userId = :userId WHERE bs.seriesId = series.id AND bs.bookId = b.id AND (mp.isFinished = 1 OR mp.currentTime > 0)' seriesWhere.push(Sequelize.where(Sequelize.literal(`(${progQuery})`), 0)) userPermissionBookWhere.replacements.userId = user.id + } else if (filterValue === 'started-series') { + attrQuery = 'SELECT count(*) FROM books b, bookSeries bs LEFT OUTER JOIN mediaProgresses mp ON mp.mediaItemId = b.id AND mp.userId = :userId WHERE bs.seriesId = series.id AND bs.bookId = b.id AND (mp.isFinished = 1 OR mp.currentTime > 0 OR mp.ebookProgress > 0)' + userPermissionBookWhere.replacements.userId = user.id } else if (filterValue === 'in-progress') { attrQuery = 'SELECT count(*) FROM books b, bookSeries bs LEFT OUTER JOIN mediaProgresses mp ON mp.mediaItemId = b.id AND mp.userId = :userId WHERE bs.seriesId = series.id AND bs.bookId = b.id AND (mp.currentTime > 0 OR mp.ebookProgress > 0) AND mp.isFinished = 0' userPermissionBookWhere.replacements.userId = user.id