From 06b8d1194c33a9f30062f892603a7ca4f5c12fa0 Mon Sep 17 00:00:00 2001 From: advplyr Date: Sat, 30 Jul 2022 16:18:26 -0500 Subject: [PATCH] Fix:Library collapsed series to respect ignore prefixes setting #866 --- client/components/cards/LazyBookCard.vue | 8 +++----- client/components/prompt/Confirm.vue | 1 + server/controllers/LibraryController.js | 2 +- server/objects/metadata/BookMetadata.js | 19 +++++++++---------- server/utils/index.js | 12 ++++++++++++ server/utils/libraryHelpers.js | 2 ++ 6 files changed, 28 insertions(+), 16 deletions(-) diff --git a/client/components/cards/LazyBookCard.vue b/client/components/cards/LazyBookCard.vue index d4869df0..9d6028b4 100644 --- a/client/components/cards/LazyBookCard.vue +++ b/client/components/cards/LazyBookCard.vue @@ -249,11 +249,9 @@ 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 - } - return this.title + const ignorePrefix = this.orderBy === 'media.metadata.title' && this.sortingIgnorePrefix + if (this.collapsedSeries) return ignorePrefix ? this.collapsedSeries.nameIgnorePrefix : this.collapsedSeries.name + return ignorePrefix ? this.mediaMetadata.titleIgnorePrefix : this.title }, displayLineTwo() { if (this.recentEpisode) return this.title diff --git a/client/components/prompt/Confirm.vue b/client/components/prompt/Confirm.vue index 9e15472e..639d5ddf 100644 --- a/client/components/prompt/Confirm.vue +++ b/client/components/prompt/Confirm.vue @@ -69,6 +69,7 @@ export default { }, methods: { clickedOutside(evt) { + if (!this.show) return if (evt) { evt.stopPropagation() evt.preventDefault() diff --git a/server/controllers/LibraryController.js b/server/controllers/LibraryController.js index 0bb88f2a..32caba34 100644 --- a/server/controllers/LibraryController.js +++ b/server/controllers/LibraryController.js @@ -190,7 +190,7 @@ class LibraryController { // 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 + return this.db.serverSettings.sortingIgnorePrefix ? li.media.metadata.seriesNameIgnorePrefix : li.media.metadata.seriesName } else { // When not sorting by title always show the collapsed series at the end return direction === 'desc' ? -1 : 'zzzz' diff --git a/server/objects/metadata/BookMetadata.js b/server/objects/metadata/BookMetadata.js index 9a4a1db6..bd8dfe64 100644 --- a/server/objects/metadata/BookMetadata.js +++ b/server/objects/metadata/BookMetadata.js @@ -1,5 +1,5 @@ const Logger = require('../../Logger') -const { areEquivalent, copyValue, cleanStringForSearch } = require('../../utils/index') +const { areEquivalent, copyValue, cleanStringForSearch, getTitleIgnorePrefix } = require('../../utils/index') const parseNameString = require('../../utils/parsers/parseNameString') class BookMetadata { constructor(metadata) { @@ -109,15 +109,7 @@ class BookMetadata { } get titleIgnorePrefix() { - if (!this.title) return '' - var prefixesToIgnore = global.ServerSettings.sortingPrefixes || [] - for (const prefix of prefixesToIgnore) { - // e.g. for prefix "the". If title is "The Book Title" return "Book Title, The" - if (this.title.toLowerCase().startsWith(`${prefix} `)) { - return this.title.substr(prefix.length + 1) + `, ${prefix.substr(0, 1).toUpperCase() + prefix.substr(1)}` - } - } - return this.title + return getTitleIgnorePrefix(this.title) } get authorName() { if (!this.authors.length) return '' @@ -134,6 +126,13 @@ class BookMetadata { return `${se.name} #${se.sequence}` }).join(', ') } + get seriesNameIgnorePrefix() { + if (!this.series.length) return '' + return this.series.map(se => { + if (!se.sequence) return getTitleIgnorePrefix(se.name) + return `${getTitleIgnorePrefix(se.name)} #${se.sequence}` + }).join(', ') + } get narratorName() { return this.narrators.join(', ') } diff --git a/server/utils/index.js b/server/utils/index.js index 9ff14198..9b2cd23b 100644 --- a/server/utils/index.js +++ b/server/utils/index.js @@ -135,4 +135,16 @@ module.exports.cleanStringForSearch = (str) => { if (!str) return '' // Remove ' . ` " , return str.toLowerCase().replace(/[\'\.\`\",]/g, '').trim() +} + +module.exports.getTitleIgnorePrefix = (title) => { + if (!title) return '' + var prefixesToIgnore = global.ServerSettings.sortingPrefixes || [] + for (const prefix of prefixesToIgnore) { + // e.g. for prefix "the". If title is "The Book" return "Book, The" + if (title.toLowerCase().startsWith(`${prefix} `)) { + return title.substr(prefix.length + 1) + `, ${prefix.substr(0, 1).toUpperCase() + prefix.substr(1)}` + } + } + return title } \ No newline at end of file diff --git a/server/utils/libraryHelpers.js b/server/utils/libraryHelpers.js index 316e2534..df6e68bb 100644 --- a/server/utils/libraryHelpers.js +++ b/server/utils/libraryHelpers.js @@ -1,4 +1,5 @@ const { sort, createNewSortInstance } = require('../libs/fastSort') +const { getTitleIgnorePrefix } = require('../utils/index') const Logger = require('../Logger') const naturalSort = createNewSortInstance({ comparer: new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' }).compare @@ -228,6 +229,7 @@ module.exports = { libraryItemJson.collapsedSeries = { id: seriesToUse[li.id].id, name: seriesToUse[li.id].name, + nameIgnorePrefix: getTitleIgnorePrefix(seriesToUse[li.id].name), numBooks: seriesToUse[li.id].books.length } }