From cf2a3b894872af8054a4f5004c88b7271327f23a Mon Sep 17 00:00:00 2001 From: Borewit Date: Sun, 4 Mar 2018 16:24:07 +0100 Subject: [PATCH] #1332: Improve cover image score algorithm: - If filename score is equal, pick highest resolution - Search for keyword occurrence in file name --- src/renderer/lib/torrent-poster.js | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/src/renderer/lib/torrent-poster.js b/src/renderer/lib/torrent-poster.js index d90d6b87..d4d2e601 100644 --- a/src/renderer/lib/torrent-poster.js +++ b/src/renderer/lib/torrent-poster.js @@ -74,15 +74,23 @@ function filterOnExtension (torrent, extensions) { } function scoreCoverFile (file) { - const name = path.basename(file.name, path.extname(file.name)).toLowerCase() - switch (name) { - case 'cover': return 100 - case 'folder': return 95 - case 'front': return 85 - case 'front-cover': return 90 - case 'back': return 40 - default: return 0 + const fileName = path.basename(file.name, path.extname(file.name)).toLowerCase() + const relevanceScore = { + cover: 100, + folder: 95, + front: 90, + back: 20 } + + for (let keyword in relevanceScore) { + if (fileName === keyword) { + return relevanceScore[keyword] + } + if (fileName.indexOf(keyword) !== -1) { + return 0.8 * relevanceScore[keyword] + } + } + return 0 } function torrentPosterFromAudio (torrent, cb) { @@ -94,7 +102,9 @@ function torrentPosterFromAudio (torrent, cb) { score: scoreCoverFile(file) } }).sort((a, b) => { - return b.score - a.score + const delta = b.score - a.score + // If score is equal, pick the largest file, aiming for highest resolution + return delta === 0 ? b.file.length - a.file.length : delta }) if (bestCover.length < 1) return cb(new Error('Generated poster contains no data'))