« get me outta code hell

hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/data/things/album.js95
-rw-r--r--src/gen-thumbs.js24
2 files changed, 94 insertions, 25 deletions
diff --git a/src/data/things/album.js b/src/data/things/album.js
index 1a1235e6..e0d9884f 100644
--- a/src/data/things/album.js
+++ b/src/data/things/album.js
@@ -35,6 +35,7 @@ import {
   commentary,
   color,
   commentatorArtists,
+  constitutibleArtwork,
   constitutibleArtworkList,
   contentString,
   contribsPresent,
@@ -139,7 +140,11 @@ export class Album extends Thing {
     ],
 
     wallpaperParts: [
-      exitWithoutContribs({contribs: 'wallpaperArtistContribs'}),
+      exitWithoutContribs({
+        contribs: 'wallpaperArtistContribs',
+        value: input.value([]),
+      }),
+
       wallpaperParts(),
     ],
 
@@ -160,6 +165,28 @@ export class Album extends Thing {
       dimensions(),
     ],
 
+    wallpaperArtwork: [
+      exitWithoutDependency({
+        dependency: 'wallpaperArtistContribs',
+        mode: input.value('empty'),
+        value: input.value(null),
+      }),
+
+      constitutibleArtwork.fromYAMLFieldSpec
+        .call(this, 'Wallpaper Artwork'),
+    ],
+
+    bannerArtwork: [
+      exitWithoutDependency({
+        dependency: 'bannerArtistContribs',
+        mode: input.value('empty'),
+        value: input.value(null),
+      }),
+
+      constitutibleArtwork.fromYAMLFieldSpec
+        .call(this, 'Banner Artwork'),
+    ],
+
     coverArtworks: [
       exitWithoutDependency({
         dependency: 'coverArtistContribs',
@@ -416,10 +443,10 @@ export class Album extends Thing {
       soupyReverse.artworkContributionsBy('albumData', 'coverArtworks'),
 
     albumWallpaperArtistContributionsBy:
-      soupyReverse.contributionsBy('albumData', 'wallpaperArtistContribs'),
+      soupyReverse.artworkContributionsBy('albumData', 'wallpaperArtwork', {single: true}),
 
     albumBannerArtistContributionsBy:
-      soupyReverse.contributionsBy('albumData', 'bannerArtistContribs'),
+      soupyReverse.artworkContributionsBy('albumData', 'bannerArtwork', {single: true}),
 
     albumsWithCommentaryBy: {
       bindTo: 'albumData',
@@ -480,6 +507,30 @@ export class Album extends Thing {
           }),
       },
 
+      'Banner Artwork': {
+        property: 'bannerArtwork',
+        transform:
+          parseArtwork({
+            single: true,
+            fileExtensionFromThingProperty: 'bannerFileExtension',
+            dateFromThingProperty: 'date',
+            artistContribsFromThingProperty: 'bannerArtistContribs',
+            artistContribsArtistProperty: 'albumBannerArtistContributions',
+          }),
+      },
+
+      'Wallpaper Artwork': {
+        property: 'wallpaperArtwork',
+        transform:
+          parseArtwork({
+            single: true,
+            fileExtensionFromThingProperty: 'wallpaperFileExtension',
+            dateFromThingProperty: 'date',
+            artistContribsFromThingProperty: 'wallpaperArtistContribs',
+            artistContribsArtistProperty: 'albumWallpaperArtistContributions',
+          }),
+      },
+
       'Cover Art Date': {
         property: 'coverArtDate',
         transform: parseDate,
@@ -661,6 +712,14 @@ export class Album extends Thing {
 
         artworkData.push(...album.coverArtworks);
 
+        if (album.bannerArtwork) {
+          artworkData.push(album.bannerArtwork);
+        }
+
+        if (album.wallpaperArtwork) {
+          artworkData.push(album.wallpaperArtwork);
+        }
+
         album.trackSections = trackSections;
       }
 
@@ -678,11 +737,35 @@ export class Album extends Thing {
     },
   });
 
-  getOwnArtworkPath(_artwork) {
+  getOwnArtworkPath(artwork) {
+    if (artwork === this.bannerArtwork) {
+      return [
+        'media.albumBanner',
+        this.directory,
+        artwork.fileExtension,
+      ];
+    }
+
+    if (artwork === this.wallpaperArtwork) {
+      if (!empty(this.wallpaperParts)) {
+        return null;
+      }
+
+      return [
+        'media.albumWallpaper',
+        this.directory,
+        artwork.fileExtension,
+      ];
+    }
+
     return [
       'media.albumCover',
-      this.directory,
-      this.coverArtFileExtension,
+
+      (artwork.unqualifiedDirectory
+        ? this.directory + '-' + artwork.unqualifiedDirectory
+        : this.directory),
+
+      artwork.fileExtension,
     ];
   }
 }
diff --git a/src/gen-thumbs.js b/src/gen-thumbs.js
index d89558d2..27a7e443 100644
--- a/src/gen-thumbs.js
+++ b/src/gen-thumbs.js
@@ -1243,28 +1243,14 @@ export function getExpectedImagePaths(mediaPath, {urls, wikiData}) {
 
   const paths = [
     wikiData.artworkData
+      .filter(artwork => artwork.path)
       .map(artwork => fromRoot.to(...artwork.path)),
 
     wikiData.albumData
-      .map(album => [
-        !empty(CacheableObject.getUpdateValue(album, 'bannerArtistContribs')) && [
-          fromRoot.to('media.albumBanner', album.directory, album.bannerFileExtension),
-        ],
-
-        !empty(CacheableObject.getUpdateValue(album, 'wallpaperArtistContribs')) &&
-        empty(album.wallpaperParts) && [
-          fromRoot.to('media.albumWallpaper', album.directory, album.wallpaperFileExtension),
-        ],
-
-        !empty(CacheableObject.getUpdateValue(album, 'wallpaperArtistContribs')) &&
-        !empty(album.wallpaperParts) &&
-          album.wallpaperParts.flatMap(part => [
-            part.asset &&
-              fromRoot.to('media.albumWallpaperPart', album.directory, part.asset),
-          ]),
-      ])
-      .flat(2)
-      .filter(Boolean),
+      .flatMap(album => album.wallpaperParts
+        .filter(part => part.asset)
+        .map(part =>
+          fromRoot.to('media.albumWallpaperPart', album.directory, part.asset))),
 
     wikiData.artistData
       .filter(artist => artist.hasAvatar)