From 4bc7cd204535c169154d33ba13a434922b982295 Mon Sep 17 00:00:00 2001 From: advplyr Date: Sun, 24 Apr 2022 18:05:15 -0500 Subject: [PATCH] Fix: show books with invalid audio files and add error icon on book items #491 --- client/components/cards/LazyBookCard.vue | 12 ++++++++++-- client/components/controls/FilterSelect.vue | 2 +- client/pages/item/_id/index.vue | 10 ++++++++++ server/objects/mediaTypes/Book.js | 6 +++++- server/utils/libraryHelpers.js | 7 +------ 5 files changed, 27 insertions(+), 10 deletions(-) diff --git a/client/components/cards/LazyBookCard.vue b/client/components/cards/LazyBookCard.vue index 36891e79..3bebacce 100644 --- a/client/components/cards/LazyBookCard.vue +++ b/client/components/cards/LazyBookCard.vue @@ -273,7 +273,7 @@ export default { }, showError() { if (this.recentEpisode) return false // Dont show podcast error on episode card - return this.numMissingParts || this.isMissing || this.isInvalid + return this.numInvalidAudioFiles || this.numMissingParts || this.isMissing || this.isInvalid }, isStreaming() { return this.store.getters['getlibraryItemIdStreaming'] === this.libraryItemId @@ -297,6 +297,10 @@ export default { if (this.isPodcast) return 0 return this.media.numMissingParts }, + numInvalidAudioFiles() { + if (this.isPodcast) return 0 + return this.media.numInvalidAudioFiles + }, errorText() { if (this.isMissing) return 'Item directory is missing!' else if (this.isInvalid) { @@ -305,7 +309,11 @@ export default { } var txt = '' if (this.numMissingParts) { - txt = `${this.numMissingParts} missing parts.` + txt += `${this.numMissingParts} missing parts.` + } + if (this.numInvalidAudioFiles) { + if (txt) txt += ' ' + txt += `${this.numInvalidAudioFiles} invalid audio files.` } return txt || 'Unknown Error' }, diff --git a/client/components/controls/FilterSelect.vue b/client/components/controls/FilterSelect.vue index dc5ed98c..2359e870 100644 --- a/client/components/controls/FilterSelect.vue +++ b/client/components/controls/FilterSelect.vue @@ -217,7 +217,7 @@ export default { return ['Finished', 'In Progress', 'Not Started'] }, missing() { - return ['ASIN', 'ISBN', 'Subtitle', 'Author', 'Publish Year', 'Series', 'Volume Number', 'Description', 'Genres', 'Tags', 'Narrator', 'Publisher', 'Language'] + return ['ASIN', 'ISBN', 'Subtitle', 'Author', 'Publish Year', 'Series', 'Description', 'Genres', 'Tags', 'Narrator', 'Publisher', 'Language'] }, sublistItems() { return (this[this.sublist] || []).map((item) => { diff --git a/client/pages/item/_id/index.vue b/client/pages/item/_id/index.vue index 1798e057..9e6f8be9 100644 --- a/client/pages/item/_id/index.vue +++ b/client/pages/item/_id/index.vue @@ -159,6 +159,12 @@

{{ description }}

+
+

Invalid audio files

+ +

- {{ audioFile.metadata.filename }} ({{ audioFile.error }})

+
+ @@ -228,6 +234,10 @@ export default { isInvalid() { return this.libraryItem.isInvalid }, + invalidAudioFiles() { + if (this.isPodcast) return [] + return this.libraryItem.media.audioFiles.filter((af) => af.invalid) + }, showPlayButton() { if (this.isMissing || this.isInvalid) return false if (this.isPodcast) return this.podcastEpisodes.length diff --git a/server/objects/mediaTypes/Book.js b/server/objects/mediaTypes/Book.js index 3f02a303..29f552fb 100644 --- a/server/objects/mediaTypes/Book.js +++ b/server/objects/mediaTypes/Book.js @@ -65,6 +65,7 @@ class Book { numAudioFiles: this.audioFiles.length, numChapters: this.chapters.length, numMissingParts: this.missingParts.length, + numInvalidAudioFiles: this.invalidAudioFiles.length, duration: this.duration, size: this.size, ebookFormat: this.ebookFile ? this.ebookFile.ebookFormat : null @@ -106,8 +107,11 @@ class Book { get hasEmbeddedCoverArt() { return this.audioFiles.some(af => af.embeddedCoverArt) } + get invalidAudioFiles() { + return this.audioFiles.filter(af => af.invalid) + } get hasIssues() { - return this.missingParts.length || this.audioFiles.some(af => af.invalid) + return this.missingParts.length || this.invalidAudioFiles.length } get tracks() { var startOffset = 0 diff --git a/server/utils/libraryHelpers.js b/server/utils/libraryHelpers.js index 55dc5da2..ac714913 100644 --- a/server/utils/libraryHelpers.js +++ b/server/utils/libraryHelpers.js @@ -43,7 +43,6 @@ module.exports = { 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; @@ -55,11 +54,7 @@ module.exports = { filtered = filtered.filter(li => li.media.metadata && li.media.metadata.language === filter) } } else if (filterBy === 'issues') { - filtered = filtered.filter(ab => { - // TODO: Update filter for issues - return ab.isMissing || ab.isInvalid - // return ab.numMissingParts || ab.numInvalidParts || ab.isMissing || ab.isInvalid - }) + filtered = filtered.filter(li => li.hasIssues) } return filtered