« get me outta code hell

data, content: stub multiple artworks - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/content/dependencies
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2025-04-02 15:10:58 -0300
committer(quasar) nebula <qznebula@protonmail.com>2025-04-10 16:02:38 -0300
commit58fba5a7a859c5398e0e58f31d7e8e5a649db63b (patch)
tree39f4ac7ed8292d2af453263f63ecdfaf93cba42d /src/content/dependencies
parent4030a62fc518627071dc792e2754d9d99fa46546 (diff)
data, content: stub multiple artworks
Only for tracks as of this commit, most anything else is in a
severely broken state aye
Diffstat (limited to 'src/content/dependencies')
-rw-r--r--src/content/dependencies/generateCoverArtwork.js34
-rw-r--r--src/content/dependencies/generateTrackCoverArtwork.js89
-rw-r--r--src/content/dependencies/generateTrackCoverArtworks.js26
-rw-r--r--src/content/dependencies/generateTrackInfoPage.js14
4 files changed, 96 insertions, 67 deletions
diff --git a/src/content/dependencies/generateCoverArtwork.js b/src/content/dependencies/generateCoverArtwork.js
index 58c29830..719d14e9 100644
--- a/src/content/dependencies/generateCoverArtwork.js
+++ b/src/content/dependencies/generateCoverArtwork.js
@@ -1,7 +1,24 @@
 export default {
-  contentDependencies: ['image'],
+  contentDependencies: [
+    'generateCoverArtworkArtTagDetails',
+    'generateCoverArtworkArtistDetails',
+    'generateCoverArtworkOriginDetails',
+    'image',
+  ],
+
   extraDependencies: ['html'],
 
+  relations: (relation, artwork) => ({
+    originDetails:
+      relation('generateCoverArtworkOriginDetails', artwork),
+
+    artTagDetails:
+      relation('generateCoverArtworkArtTagDetails', artwork),
+
+    artistDetails:
+      relation('generateCoverArtworkArtistDetails', artwork),
+  }),
+
   slots: {
     image: {
       type: 'html',
@@ -21,13 +38,17 @@ export default {
       validate: v => v.looseArrayOf(v.isString),
     },
 
+    showOriginDetails: {type: 'boolean', default: false},
+    showArtTagDetails: {type: 'boolean', default: false},
+    showArtistDetails: {type: 'boolean', default: false},
+
     details: {
       type: 'html',
       mutable: false,
     },
   },
 
-  generate(slots, {html}) {
+  generate(relations, slots, {html}) {
     const square =
       (slots.dimensions
         ? slots.dimensions[0] === slots.dimensions[1]
@@ -54,7 +75,14 @@ export default {
                 ...sizeSlots,
               }),
 
-              slots.details,
+              slots.showOriginDetails &&
+                relations.originDetails,
+
+              slots.showArtTagDetails &&
+                relations.artTagDetails,
+
+              slots.showArtistDetails &&
+                relations.artistDetails,
             ]
        : slots.mode === 'thumbnail'
           ? slots.image.slots({
diff --git a/src/content/dependencies/generateTrackCoverArtwork.js b/src/content/dependencies/generateTrackCoverArtwork.js
index 937347a3..3fc219c8 100644
--- a/src/content/dependencies/generateTrackCoverArtwork.js
+++ b/src/content/dependencies/generateTrackCoverArtwork.js
@@ -1,9 +1,6 @@
 export default {
   contentDependencies: [
     'generateCoverArtwork',
-    'generateCoverArtworkArtTagDetails',
-    'generateCoverArtworkArtistDetails',
-    'generateCoverArtworkOriginDetails',
     'generateCoverArtworkReferenceDetails',
     'image',
     'linkAlbum',
@@ -13,65 +10,52 @@ export default {
 
   extraDependencies: ['html', 'language'],
 
-  query: (track) => ({
-    artTags:
-      (track.hasUniqueCoverArt
-        ? track.trackArtwork.artTags
-     : track.album.hasCoverArt
-        ? track.album.coverArtwork.artTags
-        : []),
-  }),
-
-  relations: (relation, query, track) => ({
+  relations: (relation, artwork) => ({
     coverArtwork:
-      relation('generateCoverArtwork'),
+      relation('generateCoverArtwork', artwork),
 
     image:
       relation('image'),
 
-    originDetails:
-      relation('generateCoverArtworkOriginDetails', track.trackArtwork),
-
-    artTagDetails:
-      relation('generateCoverArtworkArtTagDetails', track.trackArtwork),
-
-    artistDetails:
-      relation('generateCoverArtworkArtistDetails', track.trackArtwork),
-
-    referenceDetails:
-      relation('generateCoverArtworkReferenceDetails',
-        track.referencedArtworks,
-        track.referencedByArtworks),
+    // referenceDetails:
+    //   relation('generateCoverArtworkReferenceDetails',
+    //     artwork.referencedArtworks,
+    //     artwork.referencedByArtworks),
 
-    referencedArtworksLink:
-      relation('linkTrackReferencedArtworks', track),
+    // referencedArtworksLink:
+    //   relation('linkTrackReferencedArtworks', track),
 
-    referencingArtworksLink:
-      relation('linkTrackReferencingArtworks', track),
+    // referencingArtworksLink:
+    //   relation('linkTrackReferencingArtworks', track),
 
     albumLink:
-      relation('linkAlbum', track.album),
+      (artwork.thing.album
+        ? relation('linkAlbum', artwork.thing.album)
+        : relation('linkAlbum', artwork.thing)),
   }),
 
-  data: (query, track) => ({
+  data: (artwork) => ({
     path:
-      (track.hasUniqueCoverArt
-        ? ['media.trackCover', track.album.directory, track.directory, track.coverArtFileExtension]
-        : ['media.albumCover', track.album.directory, track.album.coverArtFileExtension]),
-
-    color:
-      track.color,
+      (artwork.thing.album
+        ? ['media.trackCover',
+           artwork.thing.album.directory,
+           artwork.thing.directory,
+           artwork.thing.coverArtFileExtension]
+        : ['media.albumCover',
+           artwork.thing.directory,
+           artwork.thing.coverArtFileExtension]),
+
+    // color:
+    //   track.color,
 
     dimensions:
-      (track.hasUniqueCoverArt
-        ? track.coverArtDimensions
-        : track.album.coverArtDimensions),
+      artwork.thing.coverArtDimensions,
 
     nonUnique:
-      !track.hasUniqueCoverArt,
+      !artwork.thing.album,
 
     warnings:
-      query.artTags
+      artwork.artTags
         .filter(tag => tag.isContentWarning)
         .map(tag => tag.name),
   }),
@@ -107,23 +91,19 @@ export default {
       image:
         relations.image.slots({
           path: data.path,
-          color: data.color,
+          // color: data.color,
           alt: language.$('misc.alt.trackCover'),
         }),
 
       dimensions: data.dimensions,
       warnings: data.warnings,
 
-      details: [
-        slots.showOriginDetails &&
-          relations.originDetails,
-
-        slots.details === 'tags' &&
-          relations.artTagDetails,
-
-        slots.details === 'artists'&&
-          relations.artistDetails,
+      showOriginDetails: slots.showOriginDetails,
+      showArtTagDetails: slots.details === 'tags',
+      showArtistDetails: slots.details === 'artists',
 
+      details: [
+        /*
         slots.showReferenceLinks &&
           relations.referenceDetails.slots({
             referencedLink:
@@ -132,6 +112,7 @@ export default {
             referencingLink:
               relations.referencingArtworksLink,
           }),
+        */
 
         slots.showNonUniqueLine &&
         data.nonUnique &&
diff --git a/src/content/dependencies/generateTrackCoverArtworks.js b/src/content/dependencies/generateTrackCoverArtworks.js
new file mode 100644
index 00000000..60d27d60
--- /dev/null
+++ b/src/content/dependencies/generateTrackCoverArtworks.js
@@ -0,0 +1,26 @@
+export default {
+  contentDependencies: ['generateTrackCoverArtwork'],
+
+  relations: (relation, track) => ({
+    albumCover:
+      (!track.hasUniqueCoverArt && track.album.hasCoverArt
+        ? relation('generateTrackCoverArtwork', track.album.coverArtworks[0])
+        : null),
+
+    trackCovers:
+      (track.hasUniqueCoverArt
+        ? track.trackArtworks.map(artwork =>
+            relation('generateTrackCoverArtwork', artwork))
+        : null),
+  }),
+
+  generate: (relations) =>
+    [relations.albumCover, ...relations.trackCovers ?? []]
+      .filter(Boolean)
+      .map(cover =>
+        cover.slots({
+          showOriginDetails: true,
+          showReferenceLinks: true,
+          showNonUniqueLine: true,
+        })),
+};
diff --git a/src/content/dependencies/generateTrackInfoPage.js b/src/content/dependencies/generateTrackInfoPage.js
index a5e2a476..d2cdf416 100644
--- a/src/content/dependencies/generateTrackInfoPage.js
+++ b/src/content/dependencies/generateTrackInfoPage.js
@@ -11,7 +11,7 @@ export default {
     'generateContributionList',
     'generatePageLayout',
     'generateTrackArtistCommentarySection',
-    'generateTrackCoverArtwork',
+    'generateTrackCoverArtworks',
     'generateTrackInfoPageFeaturedByFlashesList',
     'generateTrackInfoPageOtherReleasesList',
     'generateTrackList',
@@ -58,9 +58,9 @@ export default {
     additionalNamesBox:
       relation('generateAdditionalNamesBox', track.additionalNames),
 
-    cover:
+    covers:
       (track.hasUniqueCoverArt || track.album.hasCoverArt
-        ? relation('generateTrackCoverArtwork', track)
+        ? relation('generateTrackCoverArtworks', track)
         : null),
 
     contentHeading:
@@ -142,13 +142,7 @@ export default {
         styleRules: [relations.albumStyleRules],
 
         coverColumnContent:
-          (relations.cover
-            ? relations.cover.slots({
-                showOriginDetails: true,
-                showReferenceLinks: true,
-                showNonUniqueLine: true,
-              })
-            : null),
+          relations.covers,
 
         mainContent: [
           relations.releaseInfo,