diff --git a/client/components/cards/LazyBookCard.vue b/client/components/cards/LazyBookCard.vue index 6cea7cdb..091f3b59 100644 --- a/client/components/cards/LazyBookCard.vue +++ b/client/components/cards/LazyBookCard.vue @@ -249,6 +249,7 @@ export default { }, displayTitle() { if (this.recentEpisode) return this.recentEpisode.title + if (this.collapsedSeries) return this.collapsedSeries.name if (this.orderBy === 'media.metadata.title' && this.sortingIgnorePrefix) { return this.mediaMetadata.titleIgnorePrefix } @@ -257,6 +258,7 @@ export default { displayLineTwo() { if (this.recentEpisode) return this.title if (this.isPodcast) return this.author + if (this.collapsedSeries) return '' if (this.isAuthorBookshelfView) { return this.mediaMetadata.publishedYear || '' } @@ -264,6 +266,7 @@ export default { return this.author }, displaySortLine() { + if (this.collapsedSeries) return null if (this.orderBy === 'mtimeMs') return 'Modified ' + this.$formatDate(this._libraryItem.mtimeMs, this.dateFormat) if (this.orderBy === 'birthtimeMs') return 'Born ' + this.$formatDate(this._libraryItem.birthtimeMs, this.dateFormat) if (this.orderBy === 'addedAt') return 'Added ' + this.$formatDate(this._libraryItem.addedAt, this.dateFormat) diff --git a/server/controllers/LibraryController.js b/server/controllers/LibraryController.js index dfad01c3..0bb88f2a 100644 --- a/server/controllers/LibraryController.js +++ b/server/controllers/LibraryController.js @@ -176,7 +176,8 @@ class LibraryController { } // Handle server setting sortingIgnorePrefix - if (sortKey === 'media.metadata.title' && this.db.serverSettings.sortingIgnorePrefix) { + const sortByTitle = sortKey === 'media.metadata.title' + if (sortByTitle && this.db.serverSettings.sortingIgnorePrefix) { // BookMetadata.js has titleIgnorePrefix getter sortKey += 'IgnorePrefix' } @@ -186,6 +187,16 @@ class LibraryController { var sortArray = [ { [direction]: (li) => { + // When collapsing by series and sorting by title use the series name instead of the book title + if (payload.mediaType === 'book' && payload.collapseseries && li.media.metadata.seriesName) { + if (sortByTitle) { + return li.media.metadata.seriesName + } else { + // When not sorting by title always show the collapsed series at the end + return direction === 'desc' ? -1 : 'zzzz' + } + } + // Supports dot notation strings i.e. "media.metadata.title" return sortKey.split('.').reduce((a, b) => a[b], li) }