@@ -196,6 +197,7 @@ export default {
searchResults: [],
hasSearched: false,
selectedMatch: null,
+ selectedMatchOrig: null,
selectedMatchUsage: {
title: true,
subtitle: true,
@@ -251,7 +253,6 @@ export default {
})
},
set(val) {
- console.log('set series items', val)
this.selectedMatch.series = val
}
},
@@ -341,7 +342,7 @@ export default {
this.hasSearched = true
},
init() {
- this.selectedMatch = null
+ this.clearSelectedMatch()
this.selectedMatchUsage = {
title: true,
subtitle: true,
@@ -402,13 +403,15 @@ export default {
})
}
}
- if (match.genres && Array.isArray(match.genres)) {
- match.genres = match.genres.join(',')
+ if (match.genres && !Array.isArray(match.genres)) {
+ // match.genres = match.genres.join(',')
+ match.genres = match.genres.split(',').map((g) => g.trim())
}
}
console.log('Select Match', match)
this.selectedMatch = match
+ this.selectedMatchOrig = JSON.parse(JSON.stringify(match))
},
buildMatchUpdatePayload() {
var updatePayload = {}
@@ -452,7 +455,8 @@ export default {
} else if (key === 'narrator') {
updatePayload.metadata.narrators = this.selectedMatch[key].split(',').map((v) => v.trim())
} else if (key === 'genres') {
- updatePayload.metadata.genres = this.selectedMatch[key].split(',').map((v) => v.trim())
+ // updatePayload.metadata.genres = this.selectedMatch[key].split(',').map((v) => v.trim())
+ updatePayload.metadata.genres = [...this.selectedMatch[key]]
} else if (key === 'tags') {
updatePayload.tags = this.selectedMatch[key].split(',').map((v) => v.trim())
} else if (key === 'itunesId') {
@@ -503,15 +507,19 @@ export default {
} else {
this.$toast.info('No detail updates were necessary')
}
- this.selectedMatch = null
+ this.clearSelectedMatch()
this.$emit('selectTab', 'details')
} else {
this.$toast.error('Item Details Failed to Update')
}
} else {
- this.selectedMatch = null
+ this.clearSelectedMatch()
}
this.isProcessing = false
+ },
+ clearSelectedMatch() {
+ this.selectedMatch = null
+ this.selectedMatchOrig = null
}
}
}
diff --git a/server/providers/Audible.js b/server/providers/Audible.js
index 5bbda72f..4330f0b7 100644
--- a/server/providers/Audible.js
+++ b/server/providers/Audible.js
@@ -12,8 +12,8 @@ class Audible {
if (seriesPrimary) series.push(seriesPrimary)
if (seriesSecondary) series.push(seriesSecondary)
- var genresFiltered = genres ? genres.filter(g => g.type == "genre") : []
- var tagsFiltered = genres ? genres.filter(g => g.type == "tag") : []
+ const genresFiltered = genres ? genres.filter(g => g.type == "genre").map(g => g.name) : []
+ const tagsFiltered = genres ? genres.filter(g => g.type == "tag").map(g => g.name) : []
return {
title,
@@ -25,8 +25,8 @@ class Audible {
description: summary ? htmlSanitizer.stripAllTags(summary) : null,
cover: image,
asin,
- genres: genresFiltered.length > 0 ? genresFiltered.map(({ name }) => name).join(', ') : null,
- tags: tagsFiltered.length > 0 ? tagsFiltered.map(({ name }) => name).join(', ') : null,
+ genres: genresFiltered.length ? genresFiltered : null,
+ tags: tagsFiltered.length ? tagsFiltered.join(', ') : null,
series: series != [] ? series.map(({ name, position }) => ({ series: name, volumeNumber: position })) : null,
language: language ? language.charAt(0).toUpperCase() + language.slice(1) : null,
duration: runtimeLengthMin && !isNaN(runtimeLengthMin) ? Number(runtimeLengthMin) : 0
diff --git a/server/providers/GoogleBooks.js b/server/providers/GoogleBooks.js
index 0d78f0eb..975528eb 100644
--- a/server/providers/GoogleBooks.js
+++ b/server/providers/GoogleBooks.js
@@ -26,7 +26,7 @@ class GoogleBooks {
publishedYear: publisherDate ? publisherDate.split('-')[0] : null,
description,
cover: imageLinks && imageLinks.thumbnail ? imageLinks.thumbnail : null,
- genres: categories ? categories.join(', ') : null,
+ genres: categories && Array.isArray(categories) ? [...categories] : null,
isbn: this.extractIsbn(industryIdentifiers)
}
}
diff --git a/server/providers/iTunes.js b/server/providers/iTunes.js
index 5bf33fe5..143617b2 100644
--- a/server/providers/iTunes.js
+++ b/server/providers/iTunes.js
@@ -67,7 +67,7 @@ class iTunes {
author: data.artistName,
description: htmlSanitizer.stripAllTags(data.description || ''),
publishedYear: data.releaseDate ? data.releaseDate.split('-')[0] : null,
- genres: data.primaryGenreName ? [data.primaryGenreName] : [],
+ genres: data.primaryGenreName ? [data.primaryGenreName] : null,
cover: this.getCoverArtwork(data)
}
}
diff --git a/server/scanner/Scanner.js b/server/scanner/Scanner.js
index 21d95058..20d7a302 100644
--- a/server/scanner/Scanner.js
+++ b/server/scanner/Scanner.js
@@ -798,6 +798,7 @@ class Scanner {
const detailKeysToUpdate = ['title', 'subtitle', 'description', 'narrator', 'publisher', 'publishedYear', 'genres', 'tags', 'language', 'explicit', 'asin', 'isbn']
const updatePayload = {}
updatePayload.metadata = {}
+
for (const key in matchData) {
if (matchData[key] && detailKeysToUpdate.includes(key)) {
if (key === 'narrator') {
@@ -805,12 +806,21 @@ class Scanner {
updatePayload.metadata.narrators = matchData[key].split(',').map(v => v.trim()).filter(v => !!v)
}
} else if (key === 'genres') {
- if ((!libraryItem.media.metadata.genres || options.overrideDetails)) {
- updatePayload.metadata[key] = matchData[key].split(',').map(v => v.trim()).filter(v => !!v)
+ if ((!libraryItem.media.metadata.genres.length || options.overrideDetails)) {
+ var genresArray = []
+ if (Array.isArray(matchData[key])) genresArray = [...matchData[key]]
+ else { // Genres should always be passed in as an array but just incase handle a string
+ Logger.warn(`[Scanner] quickMatch genres is not an array ${matchData[key]}`)
+ genresArray = matchData[key].split(',').map(v => v.trim()).filter(v => !!v)
+ }
+ updatePayload.metadata[key] = genresArray
}
} else if (key === 'tags') {
- if ((!libraryItem.media.tags || options.overrideDetails)) {
- updatePayload[key] = matchData[key].split(',').map(v => v.trim()).filter(v => !!v)
+ if ((!libraryItem.media.tags.length || options.overrideDetails)) {
+ var tagsArray = []
+ if (Array.isArray(matchData[key])) tagsArray = [...matchData[key]]
+ else tagsArray = tagsArray[key].split(',').map(v => v.trim()).filter(v => !!v)
+ updatePayload[key] = tagsArray
}
} else if ((!libraryItem.media.metadata[key] || options.overrideDetails)) {
updatePayload.metadata[key] = matchData[key]