diff options
author | (quasar) nebula <qznebula@protonmail.com> | 2025-04-06 17:40:51 -0300 |
---|---|---|
committer | (quasar) nebula <qznebula@protonmail.com> | 2025-04-10 16:02:41 -0300 |
commit | a446ecc747e7919f6dee4bc3b073e7edb6156a91 (patch) | |
tree | ace69dd336957a07e3c55f275f303cac8d8c13cb /src/data | |
parent | 9696dbe1688dcf9641875ea7a4fab50c5776017b (diff) |
data: make referencedArtworkList work again
Using new find specs {track,album}PrimaryArtwork. It's still mixedFind, and it still does not support matching artworks besides the primary one.
Diffstat (limited to 'src/data')
-rw-r--r-- | src/data/checks.js | 9 | ||||
-rw-r--r-- | src/data/composite/wiki-properties/referencedArtworkList.js | 25 | ||||
-rw-r--r-- | src/data/things/album.js | 35 | ||||
-rw-r--r-- | src/data/things/track.js | 30 | ||||
-rw-r--r-- | src/data/yaml.js | 5 |
5 files changed, 63 insertions, 41 deletions
diff --git a/src/data/checks.js b/src/data/checks.js index 44f640a6..b11b5d55 100644 --- a/src/data/checks.js +++ b/src/data/checks.js @@ -313,15 +313,12 @@ export function filterReferenceErrors(wikiData, { case '_artwork': { const mixed = find.mixed({ - album: find.albumWithArtwork, - track: find.trackWithArtwork, + album: find.albumPrimaryArtwork, + track: find.trackPrimaryArtwork, }); const data = - combineWikiDataArrays([ - wikiData.albumData, - wikiData.trackData, - ]); + wikiData.artworkData; findFn = ref => mixed(ref.reference, data, {mode: 'error'}); diff --git a/src/data/composite/wiki-properties/referencedArtworkList.js b/src/data/composite/wiki-properties/referencedArtworkList.js index 819b2f43..f9d5c2f8 100644 --- a/src/data/composite/wiki-properties/referencedArtworkList.js +++ b/src/data/composite/wiki-properties/referencedArtworkList.js @@ -1,7 +1,6 @@ import {input, templateCompositeFrom} from '#composite'; import find from '#find'; import {isDate} from '#validators'; -import {combineWikiDataArrays} from '#wiki-data'; import annotatedReferenceList from './annotatedReferenceList.js'; @@ -19,36 +18,18 @@ export default templateCompositeFrom({ steps: () => [ { - dependencies: [ - 'albumData', - 'trackData', - ], - - compute: (continuation, { - albumData, - trackData, - }) => continuation({ - ['#data']: - combineWikiDataArrays([ - albumData, - trackData, - ]), - }), - }, - - { compute: (continuation) => continuation({ ['#find']: find.mixed({ - track: find.trackWithArtwork, - album: find.albumWithArtwork, + track: find.trackPrimaryArtwork, + album: find.albumPrimaryArtwork, }), }), }, annotatedReferenceList({ referenceType: input.value(['album', 'track']), - data: '#data', + data: 'artworkData', find: '#find', date: input('date'), }), diff --git a/src/data/things/album.js b/src/data/things/album.js index fc5c9d7e..9137ac31 100644 --- a/src/data/things/album.js +++ b/src/data/things/album.js @@ -67,6 +67,7 @@ export class Album extends Thing { static [Thing.getPropertyDescriptors] = ({ ArtTag, + Artwork, Group, Track, TrackSection, @@ -269,13 +270,8 @@ export class Album extends Thing { reverse: soupyReverse(), // used for referencedArtworkList (mixedFind) - albumData: wikiData({ - class: input.value(Album), - }), - - // used for referencedArtworkList (mixedFind) - trackData: wikiData({ - class: input.value(Track), + artworkData: wikiData({ + class: input.value(Artwork), }), // used for withMatchingContributionPresets (indirectly by Contribution) @@ -381,6 +377,31 @@ export class Album extends Thing { ? [] : [album.name]), }, + + albumPrimaryArtwork: { + [Thing.findThisThingOnly]: false, + + referenceTypes: [ + 'album', + 'album-referencing-artworks', + 'album-referenced-artworks', + ], + + bindTo: 'artworkData', + + include: (artwork, {Artwork, Album}) => + artwork instanceof Artwork && + artwork.thing instanceof Album && + artwork === artwork.thing.coverArtworks[0], + + getMatchableNames: ({thing: album}) => + (album.alwaysReferenceByDirectory + ? [] + : [album.name]), + + getMatchableDirectories: ({thing: album}) => + [album.directory], + }, }; static [Thing.reverseSpecs] = { diff --git a/src/data/things/track.js b/src/data/things/track.js index 1cc169be..6645008c 100644 --- a/src/data/things/track.js +++ b/src/data/things/track.js @@ -347,11 +347,10 @@ export class Track extends Thing { reverse: soupyReverse(), // used for referencedArtworkList (mixedFind) - albumData: wikiData({ - class: input.value(Album), + artworkData: wikiData({ + class: input.value(Artwork), }), - // used for referencedArtworkList (mixedFind) // used for withAlwaysReferenceByDirectory (for some reason) trackData: wikiData({ class: input.value(Track), @@ -641,6 +640,31 @@ export class Track extends Thing { ? [] : [track.name]), }, + + trackPrimaryArtwork: { + [Thing.findThisThingOnly]: false, + + referenceTypes: [ + 'track', + 'track-referencing-artworks', + 'track-referenced-artworks', + ], + + bindTo: 'artworkData', + + include: (artwork, {Artwork, Track}) => + artwork instanceof Artwork && + artwork.thing instanceof Track && + artwork === artwork.thing.trackArtworks[0], + + getMatchableNames: ({thing: track}) => + (track.alwaysReferenceByDirectory + ? [] + : [track.name]), + + getMatchableDirectories: ({thing: track}) => + [track.directory], + }, }; static [Thing.reverseSpecs] = { diff --git a/src/data/yaml.js b/src/data/yaml.js index 006513be..24f58f36 100644 --- a/src/data/yaml.js +++ b/src/data/yaml.js @@ -1480,8 +1480,7 @@ export function linkWikiDataArrays(wikiData, {bindFind, bindReverse}) { // link if the 'find' or 'reverse' properties will be implicitly linked ['albumData', [ - 'albumData', - 'trackData', + 'artworkData', 'wikiInfo', ]], @@ -1506,7 +1505,7 @@ export function linkWikiDataArrays(wikiData, {bindFind, bindReverse}) { ['homepageLayout.sections.rows', [/* find */]], ['trackData', [ - 'albumData', + 'artworkData', 'trackData', 'wikiInfo', ]], |