« get me outta code hell

data: Album: chop withTracks, withCoverArtDate - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/data/things/album.js
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2025-11-26 18:50:55 -0400
committer(quasar) nebula <qznebula@protonmail.com>2025-11-26 18:50:55 -0400
commit342c028a597aa42c5ddf0f47a4fd1b2111289dd7 (patch)
treef1b20dcd56fdd2e35b7e9fda7cf965a2dc71d235 /src/data/things/album.js
parent8f64d50645a6cabc16ba12d31e5872b693e860f6 (diff)
data: Album: chop withTracks, withCoverArtDate
Diffstat (limited to 'src/data/things/album.js')
-rw-r--r--src/data/things/album.js82
1 files changed, 49 insertions, 33 deletions
diff --git a/src/data/things/album.js b/src/data/things/album.js
index 594046b9..42db1773 100644
--- a/src/data/things/album.js
+++ b/src/data/things/album.js
@@ -34,8 +34,6 @@ import {
   parseWallpaperParts,
 } from '#yaml';
 
-import {withPropertyFromObject} from '#composite/data';
-
 import {
   exitWithoutDependency,
   exposeConstant,
@@ -45,6 +43,12 @@ import {
 } from '#composite/control-flow';
 
 import {
+  withFlattenedList,
+  withPropertyFromList,
+  withPropertyFromObject,
+} from '#composite/data';
+
+import {
   exitWithoutArtwork,
   withDirectory,
   withHasArtwork,
@@ -77,7 +81,6 @@ import {
   wikiData,
 } from '#composite/wiki-properties';
 
-import {withCoverArtDate, withTracks} from '#composite/things/album';
 import {withContinueCountingFrom, withStartCountingFrom}
   from '#composite/things/track-section';
 
@@ -219,23 +222,29 @@ export class Album extends Thing {
         .call(this, 'Cover Artwork'),
     ],
 
-    coverArtistContribs: [
-      withCoverArtDate(),
+    coverArtistContribs: contributionList({
+      date: 'coverArtDate',
+      artistProperty: input.value('albumCoverArtistContributions'),
+    }),
 
-      contributionList({
-        date: '#coverArtDate',
-        artistProperty: input.value('albumCoverArtistContributions'),
+    coverArtDate: [
+      withHasArtwork({
+        contribs: '_coverArtistContribs',
+        artworks: '_coverArtworks',
       }),
-    ],
 
-    coverArtDate: [
-      withCoverArtDate({
-        from: input.updateValue({
-          validate: isDate,
-        }),
+      exitWithoutDependency({
+        dependency: '#hasArtwork',
+        mode: input.value('falsy'),
+      }),
+
+      exposeUpdateValueOrContinue({
+        validate: input.value(isDate),
       }),
 
-      exposeDependency({dependency: '#coverArtDate'}),
+      exposeDependency({
+        dependency: 'date',
+      }),
     ],
 
     coverArtFileExtension: [
@@ -306,14 +315,10 @@ export class Album extends Thing {
         .call(this, 'Wallpaper Artwork'),
     ],
 
-    wallpaperArtistContribs: [
-      withCoverArtDate(),
-
-      contributionList({
-        date: '#coverArtDate',
-        artistProperty: input.value('albumWallpaperArtistContributions'),
-      }),
-    ],
+    wallpaperArtistContribs: contributionList({
+      date: 'coverArtDate',
+      artistProperty: input.value('albumWallpaperArtistContributions'),
+    }),
 
     wallpaperFileExtension: [
       exitWithoutArtwork({
@@ -355,14 +360,10 @@ export class Album extends Thing {
         .call(this, 'Banner Artwork'),
     ],
 
-    bannerArtistContribs: [
-      withCoverArtDate(),
-
-      contributionList({
-        date: '#coverArtDate',
-        artistProperty: input.value('albumBannerArtistContributions'),
-      }),
-    ],
+    bannerArtistContribs: contributionList({
+      date: 'coverArtDate',
+      artistProperty: input.value('albumBannerArtistContributions'),
+    }),
 
     bannerFileExtension: [
       exitWithoutArtwork({
@@ -452,8 +453,23 @@ export class Album extends Thing {
     hasBannerArt: contribsPresent({contribs: '_bannerArtistContribs'}),
 
     tracks: [
-      withTracks(),
-      exposeDependency({dependency: '#tracks'}),
+      exitWithoutDependency({
+        dependency: 'trackSections',
+        value: input.value([]),
+      }),
+
+      withPropertyFromList({
+        list: 'trackSections',
+        property: input.value('tracks'),
+      }),
+
+      withFlattenedList({
+        list: '#trackSections.tracks',
+      }),
+
+      exposeDependency({
+        dependency: '#flattenedList',
+      }),
     ],
   });