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)
 | 
					      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