« get me outta code hell

hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/data
diff options
context:
space:
mode:
Diffstat (limited to 'src/data')
-rw-r--r--src/data/composite/things/track/withHasUniqueCoverArt.js36
1 files changed, 34 insertions, 2 deletions
diff --git a/src/data/composite/things/track/withHasUniqueCoverArt.js b/src/data/composite/things/track/withHasUniqueCoverArt.js
index f7e65f25..2ea845f6 100644
--- a/src/data/composite/things/track/withHasUniqueCoverArt.js
+++ b/src/data/composite/things/track/withHasUniqueCoverArt.js
@@ -9,6 +9,8 @@
 import {input, templateCompositeFrom} from '#composite';
 import {empty} from '#sugar';
 
+import {raiseOutputWithoutDependency} from '#composite/control-flow';
+import {withPropertyFromObject} from '#composite/data';
 import {withResolvedContribs} from '#composite/wiki-data';
 
 import withPropertyFromAlbum from './withPropertyFromAlbum.js';
@@ -55,9 +57,39 @@ export default templateCompositeFrom({
       compute: (continuation, {
         ['#album.trackCoverArtistContribs']: contribsFromAlbum,
       }) =>
-        continuation.raiseOutput({
+        (empty(contribsFromAlbum)
+          ? continuation()
+          : continuation.raiseOutput({
+              ['#hasUniqueCoverArt']:
+                !empty(contribsFromAlbum),
+            })),
+    },
+
+    withPropertyFromObject({
+      object: 'trackArtwork',
+      property: input.value('artistContribs'),
+      internal: input.value(true),
+    }),
+
+    raiseOutputWithoutDependency({
+      dependency: '#trackArtwork.artistContribs',
+      mode: input.value('empty'),
+      output: input.value({'#hasUniqueCoverArt': false}),
+    }),
+
+    withResolvedContribs({
+      from: '#trackArtwork.artistContribs',
+      date: input.value(null),
+    }),
+
+    {
+      dependencies: ['#resolvedContribs'],
+      compute: (continuation, {
+        ['#resolvedContribs']: contribsFromArtwork,
+      }) =>
+        continuation({
           ['#hasUniqueCoverArt']:
-            !empty(contribsFromAlbum),
+            !empty(contribsFromArtwork),
         }),
     },
   ],