diff --git a/server/utils/index.js b/server/utils/index.js index 79b6a93a..ff7db7a2 100644 --- a/server/utils/index.js +++ b/server/utils/index.js @@ -56,6 +56,12 @@ const xmlToJSON = (xml) => { Logger.error(`[xmlToJSON] Error`, err) resolve(null) } else { + if (typeof results.package.metadata[0].meta != "undefined") { + results.package.metadata[0].meta = {} + for(var match of xml.matchAll(//g)) { + results.package.metadata[0].meta[match.groups['name']] = [match.groups['content']] + } + } resolve(results) } }) diff --git a/server/utils/parseOpfMetadata.js b/server/utils/parseOpfMetadata.js index 68ed4cd2..74df3e6a 100644 --- a/server/utils/parseOpfMetadata.js +++ b/server/utils/parseOpfMetadata.js @@ -69,6 +69,16 @@ function fetchLanguage(metadata) { 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) => { var json = await xmlToJSON(xml) if (!json || !json.package || !json.package.metadata) return null @@ -89,7 +99,9 @@ module.exports.parseOpfMetadataXML = async (xml) => { isbn: fetchISBN(metadata), description: fetchDescription(metadata), genres: fetchGenres(metadata), - language: fetchLanguage(metadata) + language: fetchLanguage(metadata), + series: fetchSeries(metadata), + volumeNumber: fetchVolumeNumber(metadata) } return data } \ No newline at end of file