« get me outta code hell

data, content: Album.trackArtistContribs - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/data/things
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2025-07-17 18:08:08 -0300
committer(quasar) nebula <qznebula@protonmail.com>2025-07-17 18:08:08 -0300
commitd193a91a70ba02d46d60efaa0a160a8078fca2d2 (patch)
treef6245f9c8d51cc8cbbb3baa26337fd565c62c62a /src/data/things
parent816ae960d2c1cf995cb241b26abf5f30780f6b81 (diff)
data, content: Album.trackArtistContribs preview
Diffstat (limited to 'src/data/things')
-rw-r--r--src/data/things/album.js48
-rw-r--r--src/data/things/artist.js4
-rw-r--r--src/data/things/track.js8
3 files changed, 53 insertions, 7 deletions
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,17 +27,23 @@ 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,
   constitutibleArtwork,
@@ -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: [