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 --- .../dependencies/generateAlbumTrackListItem.js | 2 +- src/data/things/album.js | 48 ++++++++++++++++++++-- src/data/things/artist.js | 4 ++ src/data/things/track.js | 8 ++-- 4 files changed, 54 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/content/dependencies/generateAlbumTrackListItem.js b/src/content/dependencies/generateAlbumTrackListItem.js index 44297c15..201ca53a 100644 --- a/src/content/dependencies/generateAlbumTrackListItem.js +++ b/src/content/dependencies/generateAlbumTrackListItem.js @@ -20,7 +20,7 @@ export default { item: relation('generateTrackListItem', track, - track.album.artistContribs), + track.album.trackArtistContribs), }), data: (query, track, album) => ({ 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'}, diff --git a/src/data/things/artist.js b/src/data/things/artist.js index accebf20..2905d893 100644 --- a/src/data/things/artist.js +++ b/src/data/things/artist.js @@ -109,6 +109,10 @@ export class Artist extends Thing { reverse: soupyReverse.input('albumArtistContributionsBy'), }), + albumTrackArtistContributions: reverseReferenceList({ + reverse: soupyReverse.input('albumTrackArtistContributionsBy'), + }), + albumCoverArtistContributions: reverseReferenceList({ reverse: soupyReverse.input('albumCoverArtistContributionsBy'), }), diff --git a/src/data/things/track.js b/src/data/things/track.js index c2dd7b8f..18faebc3 100644 --- a/src/data/things/track.js +++ b/src/data/things/track.js @@ -177,20 +177,20 @@ export class Track extends Thing { }), withPropertyFromAlbum({ - property: input.value('artistContribs'), + property: input.value('trackArtistContribs'), }), withRecontextualizedContributionList({ - list: '#album.artistContribs', + list: '#album.trackArtistContribs', artistProperty: input.value('trackArtistContributions'), }), withRedatedContributionList({ - list: '#album.artistContribs', + list: '#album.trackArtistContribs', date: '#date', }), - exposeDependency({dependency: '#album.artistContribs'}), + exposeDependency({dependency: '#album.trackArtistContribs'}), ], contributorContribs: [ -- cgit 1.3.0-6-gf8a5