Added some function comments.
Simplified code a bit.
This commit is contained in:
@@ -58,6 +58,12 @@ function calculateDataLengthByExtension (torrent, extensions) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the largest file of a given torrent, filtered by provided extension
|
||||||
|
* @param torrent Torrent to search in
|
||||||
|
* @param extensions Extension whitelist filter
|
||||||
|
* @returns Torrent file object
|
||||||
|
*/
|
||||||
function getLargestFileByExtension (torrent, extensions) {
|
function getLargestFileByExtension (torrent, extensions) {
|
||||||
const files = filterOnExtension(torrent, extensions)
|
const files = filterOnExtension(torrent, extensions)
|
||||||
if (files.length === 0) return undefined
|
if (files.length === 0) return undefined
|
||||||
@@ -66,6 +72,12 @@ function getLargestFileByExtension (torrent, extensions) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filter file on a list extension, can be used to find al image files
|
||||||
|
* @param torrent Torrent to filter files from
|
||||||
|
* @param extensions File extensions to filter on
|
||||||
|
* @returns {number} Array of torrent file objects matching one of the given extensions
|
||||||
|
*/
|
||||||
function filterOnExtension (torrent, extensions) {
|
function filterOnExtension (torrent, extensions) {
|
||||||
return torrent.files.filter(file => {
|
return torrent.files.filter(file => {
|
||||||
const extname = path.extname(file.name).toLowerCase()
|
const extname = path.extname(file.name).toLowerCase()
|
||||||
@@ -73,8 +85,13 @@ function filterOnExtension (torrent, extensions) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
function scoreCoverFile (file) {
|
/**
|
||||||
const fileName = path.basename(file.name, path.extname(file.name)).toLowerCase()
|
* Returns a score how likely the file is suitable as a poster
|
||||||
|
* @param imgFile File object of an image
|
||||||
|
* @returns {number} Score, higher score is a better match
|
||||||
|
*/
|
||||||
|
function scoreAudioCoverFile (imgFile) {
|
||||||
|
const fileName = path.basename(imgFile.name, path.extname(imgFile.name)).toLowerCase()
|
||||||
const relevanceScore = {
|
const relevanceScore = {
|
||||||
cover: 100,
|
cover: 100,
|
||||||
folder: 95,
|
folder: 95,
|
||||||
@@ -100,18 +117,26 @@ function torrentPosterFromAudio (torrent, cb) {
|
|||||||
const bestCover = imageFiles.map(file => {
|
const bestCover = imageFiles.map(file => {
|
||||||
return {
|
return {
|
||||||
file: file,
|
file: file,
|
||||||
score: scoreCoverFile(file)
|
score: scoreAudioCoverFile(file)
|
||||||
|
}
|
||||||
|
}).reduce((a, b) => {
|
||||||
|
if (a.score > b.score) {
|
||||||
|
return a
|
||||||
|
}
|
||||||
|
if (b.score > a.score) {
|
||||||
|
return b
|
||||||
}
|
}
|
||||||
}).sort((a, b) => {
|
|
||||||
const delta = b.score - a.score
|
|
||||||
// If score is equal, pick the largest file, aiming for highest resolution
|
// If score is equal, pick the largest file, aiming for highest resolution
|
||||||
return delta === 0 ? b.file.length - a.file.length : delta
|
if (a.file.length > b.file.length) {
|
||||||
|
return a
|
||||||
|
}
|
||||||
|
return b
|
||||||
})
|
})
|
||||||
|
|
||||||
if (bestCover.length < 1) return cb(new Error('Generated poster contains no data'))
|
if (!bestCover) return cb(new Error('Generated poster contains no data'))
|
||||||
|
|
||||||
const extname = path.extname(bestCover[0].file.name)
|
const extname = path.extname(bestCover.file.name)
|
||||||
bestCover[0].file.getBuffer((err, buf) => cb(err, buf, extname))
|
bestCover.file.getBuffer((err, buf) => cb(err, buf, extname))
|
||||||
}
|
}
|
||||||
|
|
||||||
function torrentPosterFromVideo (torrent, cb) {
|
function torrentPosterFromVideo (torrent, cb) {
|
||||||
|
|||||||
Reference in New Issue
Block a user