From d193a91a70ba02d46d60efaa0a160a8078fca2d2 Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Thu, 17 Jul 2025 18:08:08 -0300 Subject: data, content: Album.trackArtistContribs --- src/data/things/album.js | 48 +++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 45 insertions(+), 3 deletions(-) (limited to 'src/data/things/album.js') diff --git a/src/data/things/album.js b/src/data/things/album.js index 3350d6da..427c5d7f 100644 --- a/src/data/things/album.js +++ b/src/data/things/album.js @@ -10,7 +10,8 @@ import {traverse} from '#node-utils'; import {sortAlbumsTracksChronologically, sortChronologically} from '#sort'; import {empty} from '#sugar'; import Thing from '#thing'; -import {is, isColor, isDate, isDirectory, isNumber} from '#validators'; +import {is, isColor, isContributionList, isDate, isDirectory, isNumber} + from '#validators'; import { parseAdditionalFiles, @@ -26,16 +27,22 @@ import { } from '#yaml'; import {withPropertyFromObject} from '#composite/data'; -import {exitWithoutArtwork, withDirectory, withHasArtwork} - from '#composite/wiki-data'; import { exitWithoutDependency, exposeConstant, exposeDependency, + exposeDependencyOrContinue, exposeUpdateValueOrContinue, } from '#composite/control-flow'; +import { + exitWithoutArtwork, + withDirectory, + withHasArtwork, + withResolvedContribs, +} from '#composite/wiki-data'; + import { color, commentatorArtists, @@ -137,6 +144,33 @@ export class Album extends Thing { artistProperty: input.value('albumArtistContributions'), }), + trackArtistContribs: [ + withResolvedContribs({ + from: input.updateValue({validate: isContributionList}), + thingProperty: input.thisProperty(), + artistProperty: input.value('albumTrackArtistContributions'), + date: 'date', + }).outputs({ + '#resolvedContribs': '#trackArtistContribs', + }), + + exposeDependencyOrContinue({ + dependency: '#trackArtistContribs', + mode: input.value('empty'), + }), + + withResolvedContribs({ + from: 'artistContribs', + thingProperty: input.thisProperty(), + artistProperty: input.value('albumTrackArtistContributions'), + date: 'date', + }).outputs({ + '#resolvedContribs': '#trackArtistContribs', + }), + + exposeDependency({dependency: '#trackArtistContribs'}), + ], + // > Update & expose - General configuration countTracksInArtistTotals: flag(true), @@ -540,6 +574,9 @@ export class Album extends Thing { albumArtistContributionsBy: soupyReverse.contributionsBy('albumData', 'artistContribs'), + albumTrackArtistContributionsBy: + soupyReverse.contributionsBy('albumData', 'trackArtistContribs'), + albumCoverArtistContributionsBy: soupyReverse.artworkContributionsBy('albumData', 'coverArtworks'), @@ -601,6 +638,11 @@ export class Album extends Thing { transform: parseContributors, }, + 'Track Artists': { + property: 'trackArtistContribs', + transform: parseContributors, + }, + // General configuration 'Count Tracks In Artist Totals': {property: 'countTracksInArtistTotals'}, -- cgit 1.3.0-6-gf8a5