mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2025-01-08 00:08:14 +01:00
Merge pull request #218 from igorkaldowski/master
Get more data from opf
This commit is contained in:
commit
415b58e393
@ -179,7 +179,7 @@ class LibraryController {
|
|||||||
series = series.slice(startIndex, startIndex + payload.limit)
|
series = series.slice(startIndex, startIndex + payload.limit)
|
||||||
}
|
}
|
||||||
|
|
||||||
payload.results = series
|
payload.results = sort(series).asc(s => s.name)
|
||||||
res.json(payload)
|
res.json(payload)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -194,7 +194,7 @@ class LibraryController {
|
|||||||
return res.status(404).send('Series not found')
|
return res.status(404).send('Series not found')
|
||||||
}
|
}
|
||||||
audiobooks = sort(audiobooks).asc(ab => {
|
audiobooks = sort(audiobooks).asc(ab => {
|
||||||
return ab.book.volumeNumber
|
return Number(ab.book.volumeNumber)
|
||||||
})
|
})
|
||||||
res.json({
|
res.json({
|
||||||
results: audiobooks.map(ab => ab.toJSONExpanded()),
|
results: audiobooks.map(ab => ab.toJSONExpanded()),
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
const { xmlToJSON } = require('./index')
|
const { xmlToJSON } = require('./index')
|
||||||
|
const { stripHtml } = require("string-strip-html")
|
||||||
|
|
||||||
function parseCreators(metadata) {
|
function parseCreators(metadata) {
|
||||||
if (!metadata['dc:creator']) return null
|
if (!metadata['dc:creator']) return null
|
||||||
@ -56,7 +57,7 @@ function fetchDescription(metadata) {
|
|||||||
// check if description is HTML or plain text. only plain text allowed
|
// check if description is HTML or plain text. only plain text allowed
|
||||||
// calibre stores < and > as < and >
|
// calibre stores < and > as < and >
|
||||||
description = description.replace(/</g, '<').replace(/>/g, '>')
|
description = description.replace(/</g, '<').replace(/>/g, '>')
|
||||||
if (description.match(/<!DOCTYPE html>|<\/?\s*[a-z-][^>]*\s*>|(\&(?:[\w\d]+|#\d+|#x[a-f\d]+);)/)) return null
|
if (description.match(/<!DOCTYPE html>|<\/?\s*[a-z-][^>]*\s*>|(\&(?:[\w\d]+|#\d+|#x[a-f\d]+);)/)) return stripHtml(description).result
|
||||||
return description
|
return description
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -69,6 +70,16 @@ function fetchLanguage(metadata) {
|
|||||||
return fetchTagString(metadata, 'dc:language')
|
return fetchTagString(metadata, 'dc:language')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function fetchSeries(metadata) {
|
||||||
|
if(typeof metadata.meta == "undefined") return null
|
||||||
|
return fetchTagString(metadata.meta, "calibre:series")
|
||||||
|
}
|
||||||
|
|
||||||
|
function fetchVolumeNumber(metadata) {
|
||||||
|
if(typeof metadata.meta == "undefined") return null
|
||||||
|
return fetchTagString(metadata.meta, "calibre:series_index")
|
||||||
|
}
|
||||||
|
|
||||||
module.exports.parseOpfMetadataXML = async (xml) => {
|
module.exports.parseOpfMetadataXML = async (xml) => {
|
||||||
var json = await xmlToJSON(xml)
|
var json = await xmlToJSON(xml)
|
||||||
if (!json || !json.package || !json.package.metadata) return null
|
if (!json || !json.package || !json.package.metadata) return null
|
||||||
@ -79,6 +90,13 @@ module.exports.parseOpfMetadataXML = async (xml) => {
|
|||||||
metadata = metadata[0]
|
metadata = metadata[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (typeof metadata.meta != "undefined") {
|
||||||
|
metadata.meta = {}
|
||||||
|
for(var match of xml.matchAll(/<meta name="(?<name>.+)" content="(?<content>.+)"\/>/g)) {
|
||||||
|
metadata.meta[match.groups['name']] = [match.groups['content']]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var creators = parseCreators(metadata)
|
var creators = parseCreators(metadata)
|
||||||
var data = {
|
var data = {
|
||||||
title: fetchTitle(metadata),
|
title: fetchTitle(metadata),
|
||||||
@ -89,7 +107,9 @@ module.exports.parseOpfMetadataXML = async (xml) => {
|
|||||||
isbn: fetchISBN(metadata),
|
isbn: fetchISBN(metadata),
|
||||||
description: fetchDescription(metadata),
|
description: fetchDescription(metadata),
|
||||||
genres: fetchGenres(metadata),
|
genres: fetchGenres(metadata),
|
||||||
language: fetchLanguage(metadata)
|
language: fetchLanguage(metadata),
|
||||||
|
series: fetchSeries(metadata),
|
||||||
|
volumeNumber: fetchVolumeNumber(metadata)
|
||||||
}
|
}
|
||||||
return data
|
return data
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user