From 02bf55b401291481c829bc0dc6b874ebd21ad191 Mon Sep 17 00:00:00 2001 From: Selfhost Alt Date: Sun, 17 Apr 2022 23:31:39 -0700 Subject: [PATCH] Add a filter for media that is missing specific fields --- client/components/controls/FilterSelect.vue | 8 ++++++++ server/utils/libraryHelpers.js | 18 +++++++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/client/components/controls/FilterSelect.vue b/client/components/controls/FilterSelect.vue index dd4a6734..e41847cc 100644 --- a/client/components/controls/FilterSelect.vue +++ b/client/components/controls/FilterSelect.vue @@ -107,6 +107,11 @@ export default { value: 'progress', sublist: true }, + { + text: 'Missing', + value: 'missing', + sublist: true + }, { text: 'Issues', value: 'issues', @@ -200,6 +205,9 @@ export default { progress() { return ['Finished', 'In Progress', 'Not Started'] }, + missing() { + return ['ASIN', 'ISBN', 'Subtitle', 'Author', 'Publish Year', 'Series', 'Volume Number', 'Description', 'Genres', 'Tags', 'Narrator', 'Publisher', 'Language', ] + }, sublistItems() { return (this[this.sublist] || []).map((item) => { if (typeof item === 'string') { diff --git a/server/utils/libraryHelpers.js b/server/utils/libraryHelpers.js index 1578401f..98387d69 100644 --- a/server/utils/libraryHelpers.js +++ b/server/utils/libraryHelpers.js @@ -11,7 +11,7 @@ module.exports = { getFilteredLibraryItems(libraryItems, filterBy, user) { var filtered = libraryItems - var searchGroups = ['genres', 'tags', 'series', 'authors', 'progress', 'narrators', 'languages'] + var searchGroups = ['genres', 'tags', 'series', 'authors', 'progress', 'narrators', 'missing', 'languages'] var group = searchGroups.find(_group => filterBy.startsWith(_group + '.')) if (group) { var filterVal = filterBy.replace(`${group}.`, '') @@ -34,6 +34,22 @@ module.exports = { if (filter === 'In Progress' && (itemProgress && itemProgress.inProgress)) return true return false }) + } else if (group == 'missing') { + filtered = filtered.filter(li => { + if (filter === 'ASIN' && li.media.metadata.asin === null) return true; + if (filter === 'ISBN' && li.media.metadata.isbn === null) return true; + if (filter === 'Subtitle' && li.media.metadata.subtitle === null) return true; + if (filter === 'Author' && li.media.metadata.authors.length === 0) return true; + if (filter === 'Publish Year' && li.media.metadata.publishedYear === null) return true; + if (filter === 'Series' && li.media.metadata.series.length === 0) return true; + if (filter === 'Volume Number' && (li.media.metadata.series.length === 0 || li.media.metadata.series[0].sequence === null)) return true; + if (filter === 'Description' && li.media.metadata.description === null) return true; + if (filter === 'Genres' && li.media.metadata.genres.length === 0) return true; + if (filter === 'Tags' && li.media.tags.length === 0) return true; + if (filter === 'Narrator' && li.media.metadata.narrators.length === 0) return true; + if (filter === 'Publisher' && li.media.metadata.publisher === null) return true; + if (filter === 'Language' && li.media.metadata.language === null) return true; + }) } else if (group === 'languages') { filtered = filtered.filter(li => li.media.metadata && li.media.metadata.language === filter) }