« get me outta code hell

content: generateAdditionalFilesListChunk: zap artists all or none - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/content/dependencies/generateAdditionalFilesListChunk.js
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2026-05-22 10:18:40 -0300
committer(quasar) nebula <qznebula@protonmail.com>2026-05-22 10:18:40 -0300
commit347b0063794a74712123d02a71f700bdcf345b6b (patch)
tree8a186473614a35f3d3399c6143029f5ef5094fe0 /src/content/dependencies/generateAdditionalFilesListChunk.js
parentb45fb3b7f3585e32488f3e9f37fd675f010d03f3 (diff)
content: generateAdditionalFilesListChunk: zap artists all or none
Diffstat (limited to 'src/content/dependencies/generateAdditionalFilesListChunk.js')
-rw-r--r--src/content/dependencies/generateAdditionalFilesListChunk.js51
1 files changed, 38 insertions, 13 deletions
diff --git a/src/content/dependencies/generateAdditionalFilesListChunk.js b/src/content/dependencies/generateAdditionalFilesListChunk.js
index a9ae96c3..18d5b894 100644
--- a/src/content/dependencies/generateAdditionalFilesListChunk.js
+++ b/src/content/dependencies/generateAdditionalFilesListChunk.js
@@ -1,21 +1,46 @@
 import {compareArrays, stitchArrays} from '#sugar';
 
 export default {
-  query: (file) => ({
-    contextContribs:
-      ((file.thing.isTrack &&
-        compareArrays(
-          file.thing.artistContribs.map(contrib => contrib.artist),
-          file.thing.album.artistContribs.map(contrib => contrib.artist),
-          {checkOrder: false}))
-
-        ? file.thing.artistContribs
+  query(file) {
+    const query = {};
 
+    const album =
+      (file.thing.isTrack
+        ? file.thing.album
      : file.thing.isAlbum
-        ? file.thing.artistContribs
-
-        : []),
-  }),
+        ? file.thing
+        : []);
+
+    // Consider all presented additional file lists, not just ones
+    // of the same type as this chunk/list.
+    const nearbyAdditionalFiles =
+      (album
+        ? [...album.additionalFiles,
+           ...album.tracks.flatMap(track => [
+              ...track.additionalFiles,
+              ...track.sheetMusicFiles,
+              ...track.midiProjectFiles,
+            ])]
+        : []);
+
+    const contribsMatch = (a, b) =>
+      compareArrays(
+        a.artistContribs.map(contrib => contrib.artist),
+        b.artistContribs.map(contrib => contrib.artist),
+        {checkOrder: false});
+
+    if (
+      nearbyAdditionalFiles.every(x => contribsMatch(x, file)) &&
+      nearbyAdditionalFiles.every(x => contribsMatch(x, x.thing)) &&
+      nearbyAdditionalFiles.every(x => contribsMatch(x, album))
+    ) {
+      query.contextContribs = file.thing.artistContribs;
+    } else {
+      query.contextContribs = [];
+    }
+
+    return query;
+  },
 
   relations: (relation, query, file) => ({
     description: