diff options
author | (quasar) nebula <qznebula@protonmail.com> | 2025-04-06 15:44:16 -0300 |
---|---|---|
committer | (quasar) nebula <qznebula@protonmail.com> | 2025-04-10 16:02:39 -0300 |
commit | e8670dd43d70ef91df6dc1164d11397de639e3b8 (patch) | |
tree | 052d3297e549a2368fb9300688d8f4042796e255 /src/data | |
parent | f02db61b1da6b6a79a16550d9217cb3e1473ef98 (diff) |
data: Track: withHasUniqueCoverArt: process direct links only
No soupyFind/soupyReverse. This commit introduces a notion of difference between an artwork which is 'declared to exist' via, say, having cover artists, versus one which... is 'usable', because it has resolved cover artists. No other code addressing this yet, so it's in a tense state where existence is in every case according to declared cover artists, whether or not those cover artist references resolve.
Diffstat (limited to 'src/data')
-rw-r--r-- | src/data/composite/things/track/withHasUniqueCoverArt.js | 57 | ||||
-rw-r--r-- | src/data/composite/things/track/withPropertyFromAlbum.js | 12 |
2 files changed, 45 insertions, 24 deletions
diff --git a/src/data/composite/things/track/withHasUniqueCoverArt.js b/src/data/composite/things/track/withHasUniqueCoverArt.js index e0a435fe..af68073e 100644 --- a/src/data/composite/things/track/withHasUniqueCoverArt.js +++ b/src/data/composite/things/track/withHasUniqueCoverArt.js @@ -5,13 +5,17 @@ // or a placeholder. (This property is named hasUniqueCoverArt instead of // the usual hasCoverArt to emphasize that it does not inherit from the // album.) +// +// withHasUniqueCoverArt is based only around the presence of *specified* +// cover artist contributions, not whether the references to artists on those +// contributions actually resolve to anything. It completely evades interacting +// with find/replace. import {input, templateCompositeFrom} from '#composite'; -import {empty} from '#sugar'; -import {raiseOutputWithoutDependency} from '#composite/control-flow'; +import {raiseOutputWithoutDependency, withResultOfAvailabilityCheck} + from '#composite/control-flow'; import {withFlattenedList, withPropertyFromList} from '#composite/data'; -import {withResolvedContribs} from '#composite/wiki-data'; import withPropertyFromAlbum from './withPropertyFromAlbum.js'; @@ -31,38 +35,43 @@ export default templateCompositeFrom({ : continuation()), }, - withResolvedContribs({ + withResultOfAvailabilityCheck({ from: 'coverArtistContribs', - date: input.value(null), + mode: input.value('empty'), }), { - dependencies: ['#resolvedContribs'], + dependencies: ['#availability'], compute: (continuation, { - ['#resolvedContribs']: contribsFromTrack, + ['#availability']: availability, }) => - (empty(contribsFromTrack) - ? continuation() - : continuation.raiseOutput({ + (availability + ? continuation.raiseOutput({ ['#hasUniqueCoverArt']: true, - })), + }) + : continuation()), }, withPropertyFromAlbum({ property: input.value('trackCoverArtistContribs'), + internal: input.value(true), + }), + + withResultOfAvailabilityCheck({ + from: '#album.trackCoverArtistContribs', + mode: input.value('empty'), }), { - dependencies: ['#album.trackCoverArtistContribs'], + dependencies: ['#availability'], compute: (continuation, { - ['#album.trackCoverArtistContribs']: contribsFromAlbum, + ['#availability']: availability, }) => - (empty(contribsFromAlbum) - ? continuation() - : continuation.raiseOutput({ - ['#hasUniqueCoverArt']: - !empty(contribsFromAlbum), - })), + (availability + ? continuation.raiseOutput({ + ['#hasUniqueCoverArt']: true, + }) + : continuation()), }, raiseOutputWithoutDependency({ @@ -81,19 +90,19 @@ export default templateCompositeFrom({ list: '#trackArtworks.artistContribs', }), - withResolvedContribs({ + withResultOfAvailabilityCheck({ from: '#flattenedList', - date: input.value(null), + mode: input.value('empty'), }), { - dependencies: ['#resolvedContribs'], + dependencies: ['#availability'], compute: (continuation, { - ['#resolvedContribs']: contribsFromArtwork, + ['#availability']: availability, }) => continuation({ ['#hasUniqueCoverArt']: - !empty(contribsFromArtwork), + availability, }), }, ], diff --git a/src/data/composite/things/track/withPropertyFromAlbum.js b/src/data/composite/things/track/withPropertyFromAlbum.js index 311a3448..a203c2e7 100644 --- a/src/data/composite/things/track/withPropertyFromAlbum.js +++ b/src/data/composite/things/track/withPropertyFromAlbum.js @@ -10,6 +10,7 @@ export default templateCompositeFrom({ inputs: { property: input.staticValue({type: 'string'}), + internal: input({type: 'boolean', defaultValue: false}), }, outputs: ({ @@ -17,10 +18,21 @@ export default templateCompositeFrom({ }) => ['#album.' + property], steps: () => [ + // XXX: This is a ridiculous hack considering `defaultValue` above. + // If we were certain what was up, we'd just get around to fixing it LOL + { + dependencies: [input('internal')], + compute: (continuation, { + [input('internal')]: internal, + }) => continuation({ + ['#internal']: internal ?? false, + }), + }, withPropertyFromObject({ object: 'album', property: input('property'), + internal: '#internal', }), { |