mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2025-11-24 20:05:41 +01:00
add rating support on custom metadata
This commit is contained in:
parent
e7d0771261
commit
ec27323a64
@ -128,6 +128,12 @@ components:
|
|||||||
type: integer
|
type: integer
|
||||||
format: int64
|
format: int64
|
||||||
description: Duration in seconds
|
description: Duration in seconds
|
||||||
|
rating:
|
||||||
|
type: number
|
||||||
|
format: float
|
||||||
|
minimum: 0
|
||||||
|
maximum: 5
|
||||||
|
description: Star rating (0-5, typically 0.5 increments)
|
||||||
|
|
||||||
SeriesMetadata:
|
SeriesMetadata:
|
||||||
type: object
|
type: object
|
||||||
|
|||||||
@ -92,7 +92,7 @@ class CustomProviderAdapter {
|
|||||||
|
|
||||||
// re-map keys to throw out
|
// re-map keys to throw out
|
||||||
return matches.map((match) => {
|
return matches.map((match) => {
|
||||||
const { title, subtitle, author, narrator, publisher, publishedYear, description, cover, isbn, asin, genres, tags, series, language, duration } = match
|
const { title, subtitle, author, narrator, publisher, publishedYear, description, cover, isbn, asin, genres, tags, series, language, duration, rating } = match
|
||||||
|
|
||||||
const payload = {
|
const payload = {
|
||||||
title: toStringOrUndefined(title),
|
title: toStringOrUndefined(title),
|
||||||
@ -109,7 +109,8 @@ class CustomProviderAdapter {
|
|||||||
tags: toStringOrUndefined(tags),
|
tags: toStringOrUndefined(tags),
|
||||||
series: validateSeriesArray(series),
|
series: validateSeriesArray(series),
|
||||||
language: toStringOrUndefined(language),
|
language: toStringOrUndefined(language),
|
||||||
duration: !isNaN(duration) && duration !== null ? Number(duration) : undefined
|
duration: !isNaN(duration) && duration !== null ? Number(duration) : undefined,
|
||||||
|
rating: rating !== undefined && rating !== null ? (!isNaN(Number(rating)) && Number(rating) > 0 ? Number(rating) : undefined) : undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove undefined values
|
// Remove undefined values
|
||||||
|
|||||||
@ -193,11 +193,11 @@ class Scanner {
|
|||||||
*/
|
*/
|
||||||
async quickMatchBookBuildUpdatePayload(apiRouterCtx, libraryItem, matchData, options) {
|
async quickMatchBookBuildUpdatePayload(apiRouterCtx, libraryItem, matchData, options) {
|
||||||
// Update media metadata if not set OR overrideDetails flag
|
// Update media metadata if not set OR overrideDetails flag
|
||||||
const detailKeysToUpdate = ['title', 'subtitle', 'description', 'narrator', 'publisher', 'publishedYear', 'genres', 'tags', 'language', 'explicit', 'abridged', 'asin', 'isbn']
|
const detailKeysToUpdate = ['title', 'subtitle', 'description', 'narrator', 'publisher', 'publishedYear', 'genres', 'tags', 'language', 'explicit', 'abridged', 'asin', 'isbn', 'rating']
|
||||||
const updatePayload = {}
|
const updatePayload = {}
|
||||||
|
|
||||||
for (const key in matchData) {
|
for (const key in matchData) {
|
||||||
if (matchData[key] && detailKeysToUpdate.includes(key)) {
|
if ((matchData[key] || key === 'rating') && detailKeysToUpdate.includes(key)) {
|
||||||
if (key === 'narrator') {
|
if (key === 'narrator') {
|
||||||
if (!libraryItem.media.narrators?.length || options.overrideDetails) {
|
if (!libraryItem.media.narrators?.length || options.overrideDetails) {
|
||||||
updatePayload.narrators = matchData[key]
|
updatePayload.narrators = matchData[key]
|
||||||
@ -230,6 +230,20 @@ class Scanner {
|
|||||||
.filter((v) => !!v)
|
.filter((v) => !!v)
|
||||||
updatePayload[key] = tagsArray
|
updatePayload[key] = tagsArray
|
||||||
}
|
}
|
||||||
|
} else if (key === 'rating') {
|
||||||
|
// Normalize rating: convert object with average to number, or number to number
|
||||||
|
let ratingValue = matchData[key]
|
||||||
|
if (ratingValue && typeof ratingValue === 'object' && ratingValue.average) {
|
||||||
|
ratingValue = Number(ratingValue.average) || null
|
||||||
|
} else if (ratingValue !== undefined && ratingValue !== null) {
|
||||||
|
ratingValue = Number(ratingValue) || null
|
||||||
|
}
|
||||||
|
if (ratingValue === 0) ratingValue = null
|
||||||
|
if ((!libraryItem.media.rating || options.overrideDetails) && ratingValue !== null && !isNaN(ratingValue) && ratingValue > 0) {
|
||||||
|
updatePayload[key] = ratingValue
|
||||||
|
} else if (ratingValue === null && libraryItem.media.rating && options.overrideDetails) {
|
||||||
|
updatePayload[key] = null
|
||||||
|
}
|
||||||
} else if (!libraryItem.media[key] || options.overrideDetails) {
|
} else if (!libraryItem.media[key] || options.overrideDetails) {
|
||||||
updatePayload[key] = matchData[key]
|
updatePayload[key] = matchData[key]
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user