mirror of
				https://github.com/advplyr/audiobookshelf.git
				synced 2025-10-27 11:18: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) | ||||
|     } | ||||
| 
 | ||||
|     payload.results = series | ||||
|     payload.results = sort(series).asc(s => s.name) | ||||
|     res.json(payload) | ||||
|   } | ||||
| 
 | ||||
| @ -194,7 +194,7 @@ class LibraryController { | ||||
|       return res.status(404).send('Series not found') | ||||
|     } | ||||
|     audiobooks = sort(audiobooks).asc(ab => { | ||||
|       return ab.book.volumeNumber | ||||
|       return Number(ab.book.volumeNumber) | ||||
|     }) | ||||
|     res.json({ | ||||
|       results: audiobooks.map(ab => ab.toJSONExpanded()), | ||||
|  | ||||
| @ -1,4 +1,5 @@ | ||||
| const { xmlToJSON } = require('./index') | ||||
| const { stripHtml } = require("string-strip-html") | ||||
| 
 | ||||
| function parseCreators(metadata) { | ||||
|   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
 | ||||
|   // calibre stores < and > as < and >
 | ||||
|   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 | ||||
| } | ||||
| 
 | ||||
| @ -69,6 +70,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 | ||||
| @ -79,6 +90,13 @@ module.exports.parseOpfMetadataXML = async (xml) => { | ||||
|     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 data = { | ||||
|     title: fetchTitle(metadata), | ||||
| @ -89,7 +107,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 | ||||
| } | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user