diff options
author | (quasar) nebula <qznebula@protonmail.com> | 2024-05-13 09:02:54 -0300 |
---|---|---|
committer | (quasar) nebula <qznebula@protonmail.com> | 2024-05-31 12:11:52 -0300 |
commit | 1b399c2451b222597bf734dbf8a211e8b421fe07 (patch) | |
tree | 8e5d3fcbf5c3a517c53bd82f5ef7af6f339409d1 /src/util | |
parent | 5038549631b0413552fe6589e7c77f66e53e7bcd (diff) |
search, client: refactor & simplify search result image processing
Diffstat (limited to 'src/util')
-rw-r--r-- | src/util/search-spec.js | 75 |
1 files changed, 61 insertions, 14 deletions
diff --git a/src/util/search-spec.js b/src/util/search-spec.js index 92ed4dec..6c8eb1ee 100644 --- a/src/util/search-spec.js +++ b/src/util/search-spec.js @@ -1,30 +1,77 @@ // Index structures shared by client and server, and relevant interfaces. -function prepareArtwork(thing) { +function getArtworkPath(thing) { switch (thing.constructor[Symbol.for('Thing.referenceType')]) { case 'flash': { - return ['flash', thing.coverArtFileExtension]; + return [ + 'media.flashArt', + thing.directory, + thing.coverArtFileExtension, + ]; } case 'track': { if (thing.hasUniqueCoverArt) { - if (thing.coverArtFileExtension === 'gif') - return undefined; - return ['track', thing.album.directory]; + return [ + 'media.trackCover', + thing.album.directory, + thing.directory, + thing.coverArtFileExtension, + ]; } else if (thing.album.hasCoverArt) { - if (thing.album.coverArtFileExtension === 'gif') - return undefined; - return ['track-album', thing.album.directory]; + return [ + 'media.albumCover', + thing.album.directory, + thing.album.coverArtFileExtension, + ]; } else { - return undefined; + return null; } } default: - return undefined; + return null; } } +function prepareArtwork(thing, { + checkIfImagePathHasCachedThumbnails, + getThumbnailEqualOrSmaller, + urls, +}) { + const artworkPath = + getArtworkPath(thing); + + if (!artworkPath) { + return undefined; + } + + const mediaSrc = + urls + .from('media.root') + .to(...artworkPath); + + if (!checkIfImagePathHasCachedThumbnails(mediaSrc)) { + return undefined; + } + + const selectedSize = + getThumbnailEqualOrSmaller('small', mediaSrc); + + const mediaSrcJpeg = + mediaSrc.replace(/\.(png|jpg)$/, `.${selectedSize}.jpg`); + + const displaySrc = + urls + .from('thumb.root') + .to('thumb.path', mediaSrcJpeg); + + const serializeSrc = + displaySrc.replace(thing.directory, '<>'); + + return serializeSrc; +} + export const searchSpec = { generic: { query: ({ @@ -46,7 +93,7 @@ export const searchSpec = { .filter(track => !track.originalReleaseTrack), ].flat(), - process: (thing) => ({ + process: (thing, opts) => ({ primaryName: thing.name, @@ -80,7 +127,7 @@ export const searchSpec = { : []), artwork: - prepareArtwork(thing), + prepareArtwork(thing, opts), }), index: [ @@ -117,7 +164,7 @@ export const searchSpec = { tracks: { query: ({trackData}) => trackData, - process: (track) => ({ + process: (track, opts) => ({ name: track.name, @@ -140,7 +187,7 @@ export const searchSpec = { .map(entry => entry.name), artwork: - prepareArtwork(track), + prepareArtwork(track, opts), }), index: [ |