« get me outta code hell

data: make referencedArtworkList work again - 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:
author(quasar) nebula <qznebula@protonmail.com>2025-04-06 17:40:51 -0300
committer(quasar) nebula <qznebula@protonmail.com>2025-04-10 16:02:41 -0300
commita446ecc747e7919f6dee4bc3b073e7edb6156a91 (patch)
treeace69dd336957a07e3c55f275f303cac8d8c13cb /src/data
parent9696dbe1688dcf9641875ea7a4fab50c5776017b (diff)
data: make referencedArtworkList work again
Using new find specs {track,album}PrimaryArtwork.
It's still mixedFind, and it still does not support
matching artworks besides the primary one.
Diffstat (limited to 'src/data')
-rw-r--r--src/data/checks.js9
-rw-r--r--src/data/composite/wiki-properties/referencedArtworkList.js25
-rw-r--r--src/data/things/album.js35
-rw-r--r--src/data/things/track.js30
-rw-r--r--src/data/yaml.js5
5 files changed, 63 insertions, 41 deletions
diff --git a/src/data/checks.js b/src/data/checks.js
index 44f640a6..b11b5d55 100644
--- a/src/data/checks.js
+++ b/src/data/checks.js
@@ -313,15 +313,12 @@ export function filterReferenceErrors(wikiData, {
               case '_artwork': {
                 const mixed =
                   find.mixed({
-                    album: find.albumWithArtwork,
-                    track: find.trackWithArtwork,
+                    album: find.albumPrimaryArtwork,
+                    track: find.trackPrimaryArtwork,
                   });
 
                 const data =
-                  combineWikiDataArrays([
-                    wikiData.albumData,
-                    wikiData.trackData,
-                  ]);
+                  wikiData.artworkData;
 
                 findFn = ref => mixed(ref.reference, data, {mode: 'error'});
 
diff --git a/src/data/composite/wiki-properties/referencedArtworkList.js b/src/data/composite/wiki-properties/referencedArtworkList.js
index 819b2f43..f9d5c2f8 100644
--- a/src/data/composite/wiki-properties/referencedArtworkList.js
+++ b/src/data/composite/wiki-properties/referencedArtworkList.js
@@ -1,7 +1,6 @@
 import {input, templateCompositeFrom} from '#composite';
 import find from '#find';
 import {isDate} from '#validators';
-import {combineWikiDataArrays} from '#wiki-data';
 
 import annotatedReferenceList from './annotatedReferenceList.js';
 
@@ -19,36 +18,18 @@ export default templateCompositeFrom({
 
   steps: () => [
     {
-      dependencies: [
-        'albumData',
-        'trackData',
-      ],
-
-      compute: (continuation, {
-        albumData,
-        trackData,
-      }) => continuation({
-        ['#data']:
-          combineWikiDataArrays([
-            albumData,
-            trackData,
-          ]),
-      }),
-    },
-
-    {
       compute: (continuation) => continuation({
         ['#find']:
           find.mixed({
-            track: find.trackWithArtwork,
-            album: find.albumWithArtwork,
+            track: find.trackPrimaryArtwork,
+            album: find.albumPrimaryArtwork,
           }),
       }),
     },
 
     annotatedReferenceList({
       referenceType: input.value(['album', 'track']),
-      data: '#data',
+      data: 'artworkData',
       find: '#find',
       date: input('date'),
     }),
diff --git a/src/data/things/album.js b/src/data/things/album.js
index fc5c9d7e..9137ac31 100644
--- a/src/data/things/album.js
+++ b/src/data/things/album.js
@@ -67,6 +67,7 @@ export class Album extends Thing {
 
   static [Thing.getPropertyDescriptors] = ({
     ArtTag,
+    Artwork,
     Group,
     Track,
     TrackSection,
@@ -269,13 +270,8 @@ export class Album extends Thing {
     reverse: soupyReverse(),
 
     // used for referencedArtworkList (mixedFind)
-    albumData: wikiData({
-      class: input.value(Album),
-    }),
-
-    // used for referencedArtworkList (mixedFind)
-    trackData: wikiData({
-      class: input.value(Track),
+    artworkData: wikiData({
+      class: input.value(Artwork),
     }),
 
     // used for withMatchingContributionPresets (indirectly by Contribution)
@@ -381,6 +377,31 @@ export class Album extends Thing {
           ? [] 
           : [album.name]),
     },
+
+    albumPrimaryArtwork: {
+      [Thing.findThisThingOnly]: false,
+
+      referenceTypes: [
+        'album',
+        'album-referencing-artworks',
+        'album-referenced-artworks',
+      ],
+
+      bindTo: 'artworkData',
+
+      include: (artwork, {Artwork, Album}) =>
+        artwork instanceof Artwork &&
+        artwork.thing instanceof Album &&
+        artwork === artwork.thing.coverArtworks[0],
+
+      getMatchableNames: ({thing: album}) =>
+        (album.alwaysReferenceByDirectory
+          ? []
+          : [album.name]),
+
+      getMatchableDirectories: ({thing: album}) =>
+        [album.directory],
+    },
   };
 
   static [Thing.reverseSpecs] = {
diff --git a/src/data/things/track.js b/src/data/things/track.js
index 1cc169be..6645008c 100644
--- a/src/data/things/track.js
+++ b/src/data/things/track.js
@@ -347,11 +347,10 @@ export class Track extends Thing {
     reverse: soupyReverse(),
 
     // used for referencedArtworkList (mixedFind)
-    albumData: wikiData({
-      class: input.value(Album),
+    artworkData: wikiData({
+      class: input.value(Artwork),
     }),
 
-    // used for referencedArtworkList (mixedFind)
     // used for withAlwaysReferenceByDirectory (for some reason)
     trackData: wikiData({
       class: input.value(Track),
@@ -641,6 +640,31 @@ export class Track extends Thing {
           ? []
           : [track.name]),
     },
+
+    trackPrimaryArtwork: {
+      [Thing.findThisThingOnly]: false,
+
+      referenceTypes: [
+        'track',
+        'track-referencing-artworks',
+        'track-referenced-artworks',
+      ],
+
+      bindTo: 'artworkData',
+
+      include: (artwork, {Artwork, Track}) =>
+        artwork instanceof Artwork &&
+        artwork.thing instanceof Track &&
+        artwork === artwork.thing.trackArtworks[0],
+
+      getMatchableNames: ({thing: track}) =>
+        (track.alwaysReferenceByDirectory
+          ? []
+          : [track.name]),
+
+      getMatchableDirectories: ({thing: track}) =>
+        [track.directory],
+    },
   };
 
   static [Thing.reverseSpecs] = {
diff --git a/src/data/yaml.js b/src/data/yaml.js
index 006513be..24f58f36 100644
--- a/src/data/yaml.js
+++ b/src/data/yaml.js
@@ -1480,8 +1480,7 @@ export function linkWikiDataArrays(wikiData, {bindFind, bindReverse}) {
     // link if the 'find' or 'reverse' properties will be implicitly linked
 
     ['albumData', [
-      'albumData',
-      'trackData',
+      'artworkData',
       'wikiInfo',
     ]],
 
@@ -1506,7 +1505,7 @@ export function linkWikiDataArrays(wikiData, {bindFind, bindReverse}) {
     ['homepageLayout.sections.rows', [/* find */]],
 
     ['trackData', [
-      'albumData',
+      'artworkData',
       'trackData',
       'wikiInfo',
     ]],