diff options
author | (quasar) nebula <qznebula@protonmail.com> | 2025-04-13 22:53:43 -0300 |
---|---|---|
committer | (quasar) nebula <qznebula@protonmail.com> | 2025-04-13 22:53:43 -0300 |
commit | c8a54326365571adc5ef1816158b02eec78701cf (patch) | |
tree | f0983d7a07e81f72639657d89ab05efa1699ba2c /src/data | |
parent | 997ac1902fdfebb2b9ec94d950d9f3248193046b (diff) |
data: Artwork.hasCoverArt: check coverArtworks, etc
Diffstat (limited to 'src/data')
-rw-r--r-- | src/data/composite/things/album/index.js | 1 | ||||
-rw-r--r-- | src/data/composite/things/album/withHasCoverArt.js | 64 | ||||
-rw-r--r-- | src/data/composite/things/track/withHasUniqueCoverArt.js | 23 | ||||
-rw-r--r-- | src/data/things/album.js | 26 |
4 files changed, 95 insertions, 19 deletions
diff --git a/src/data/composite/things/album/index.js b/src/data/composite/things/album/index.js index 8b5098f0..dfc6864f 100644 --- a/src/data/composite/things/album/index.js +++ b/src/data/composite/things/album/index.js @@ -1 +1,2 @@ +export {default as withHasCoverArt} from './withHasCoverArt.js'; export {default as withTracks} from './withTracks.js'; diff --git a/src/data/composite/things/album/withHasCoverArt.js b/src/data/composite/things/album/withHasCoverArt.js new file mode 100644 index 00000000..fd3f2894 --- /dev/null +++ b/src/data/composite/things/album/withHasCoverArt.js @@ -0,0 +1,64 @@ +// TODO: This shouldn't be coded as an Album-specific thing, +// or even really to do with cover artworks in particular, either. + +import {input, templateCompositeFrom} from '#composite'; + +import {raiseOutputWithoutDependency, withResultOfAvailabilityCheck} + from '#composite/control-flow'; +import {fillMissingListItems, withFlattenedList, withPropertyFromList} + from '#composite/data'; + +export default templateCompositeFrom({ + annotation: 'withHasCoverArt', + + outputs: ['#hasCoverArt'], + + steps: () => [ + withResultOfAvailabilityCheck({ + from: 'coverArtistContribs', + mode: input.value('empty'), + }), + + { + dependencies: ['#availability'], + compute: (continuation, { + ['#availability']: availability, + }) => + (availability + ? continuation.raiseOutput({ + ['#hasCoverArt']: true, + }) + : continuation()), + }, + + raiseOutputWithoutDependency({ + dependency: 'coverArtworks', + mode: input.value('empty'), + output: input.value({'#hasCoverArt': false}), + }), + + withPropertyFromList({ + list: 'coverArtworks', + property: input.value('artistContribs'), + internal: input.value(true), + }), + + // Since we're getting the update value for each artwork's artistContribs, + // it may not be set at all, and in that case won't be exposing as []. + fillMissingListItems({ + list: '#coverArtworks.artistContribs', + fill: input.value([]), + }), + + withFlattenedList({ + list: '#coverArtworks.artistContribs', + }), + + withResultOfAvailabilityCheck({ + from: '#flattenedList', + mode: input.value('empty'), + }).outputs({ + '#availability': '#hasCoverArt', + }), + ], +}); diff --git a/src/data/composite/things/track/withHasUniqueCoverArt.js b/src/data/composite/things/track/withHasUniqueCoverArt.js index af68073e..85d3b92a 100644 --- a/src/data/composite/things/track/withHasUniqueCoverArt.js +++ b/src/data/composite/things/track/withHasUniqueCoverArt.js @@ -15,7 +15,8 @@ import {input, templateCompositeFrom} from '#composite'; import {raiseOutputWithoutDependency, withResultOfAvailabilityCheck} from '#composite/control-flow'; -import {withFlattenedList, withPropertyFromList} from '#composite/data'; +import {fillMissingListItems, withFlattenedList, withPropertyFromList} + from '#composite/data'; import withPropertyFromAlbum from './withPropertyFromAlbum.js'; @@ -86,6 +87,13 @@ export default templateCompositeFrom({ internal: input.value(true), }), + // Since we're getting the update value for each artwork's artistContribs, + // it may not be set at all, and in that case won't be exposing as []. + fillMissingListItems({ + list: '#trackArtworks.artistContribs', + fill: input.value([]), + }), + withFlattenedList({ list: '#trackArtworks.artistContribs', }), @@ -93,17 +101,8 @@ export default templateCompositeFrom({ withResultOfAvailabilityCheck({ from: '#flattenedList', mode: input.value('empty'), + }).outputs({ + '#availability': '#hasUniqueCoverArt', }), - - { - dependencies: ['#availability'], - compute: (continuation, { - ['#availability']: availability, - }) => - continuation({ - ['#hasUniqueCoverArt']: - availability, - }), - }, ], }); diff --git a/src/data/things/album.js b/src/data/things/album.js index e8106e24..4c85ddfa 100644 --- a/src/data/things/album.js +++ b/src/data/things/album.js @@ -59,7 +59,7 @@ import { wikiData, } from '#composite/wiki-properties'; -import {withTracks} from '#composite/things/album'; +import {withHasCoverArt, withTracks} from '#composite/things/album'; import {withAlbum, withContinueCountingFrom, withStartCountingFrom} from '#composite/things/track-section'; @@ -188,9 +188,11 @@ export class Album extends Thing { ], coverArtworks: [ + withHasCoverArt(), + exitWithoutDependency({ - dependency: 'coverArtistContribs', - mode: input.value('empty'), + dependency: '#hasCoverArt', + mode: input.value('falsy'), value: input.value([]), }), @@ -297,7 +299,11 @@ export class Album extends Thing { commentatorArtists: commentatorArtists(), - hasCoverArt: contribsPresent({contribs: 'coverArtistContribs'}), + hasCoverArt: [ + withHasCoverArt(), + exposeDependency({dependency: '#hasCoverArt'}), + ], + hasWallpaperArt: contribsPresent({contribs: 'wallpaperArtistContribs'}), hasBannerArt: contribsPresent({contribs: 'bannerArtistContribs'}), @@ -763,12 +769,18 @@ export class Album extends Thing { ]; } + // TODO: using trackCover here is obviously, badly wrong + // but we ought to refactor banners and wallpapers similarly + // (i.e. depend on those intrinsic artwork paths rather than + // accessing media.{albumBanner,albumWallpaper} from content + // or other code directly) return [ - 'media.albumCover', + 'media.trackCover', + this.directory, (artwork.unqualifiedDirectory - ? this.directory + '-' + artwork.unqualifiedDirectory - : this.directory), + ? 'cover-' + artwork.unqualifiedDirectory + : 'cover'), artwork.fileExtension, ]; |