« 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/things/album/Album.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/data/things/album/Album.js')
-rw-r--r--src/data/things/album/Album.js84
1 files changed, 9 insertions, 75 deletions
diff --git a/src/data/things/album/Album.js b/src/data/things/album/Album.js
index d5fd1682..48d52223 100644
--- a/src/data/things/album/Album.js
+++ b/src/data/things/album/Album.js
@@ -1,10 +1,4 @@
-export const DATA_ALBUM_DIRECTORY = 'album';
-
-import * as path from 'node:path';
-
 import {input, V} from '#composite';
-import {traverse} from '#node-utils';
-import {sortAlbumsTracksChronologically, sortChronologically} from '#sort';
 import {empty} from '#sugar';
 import Thing from '#thing';
 import {is, isContributionList, isDate, isDirectory, isNumber}
@@ -74,11 +68,15 @@ export class Album extends Thing {
   static [Thing.getPropertyDescriptors] = ({
     AdditionalFile,
     AdditionalName,
+    AlbumArtistContribution,
+    AlbumBannerArtistContribution,
+    AlbumWallpaperArtistContribution,
     ArtTag,
     Artwork,
     CommentaryEntry,
     CreditingSourcesEntry,
     Group,
+    TrackArtistContribution,
     TrackSection,
     WikiInfo,
   }) => ({
@@ -125,6 +123,7 @@ export class Album extends Thing {
     // > Update & expose - Credits and contributors
 
     artistContribs: contributionList({
+      class: input.value(AlbumArtistContribution),
       artistProperty: input.value('albumArtistContributions'),
     }),
 
@@ -133,6 +132,7 @@ export class Album extends Thing {
     trackArtistContribs: [
       withResolvedContribs({
         from: input.updateValue({validate: isContributionList}),
+        class: input.value(TrackArtistContribution),
         thingProperty: input.thisProperty(),
         artistProperty: input.value('albumTrackArtistContributions'),
       }).outputs({
@@ -142,6 +142,7 @@ export class Album extends Thing {
       exposeDependencyOrContinue('#trackArtistContribs', V('empty')),
 
       withRecontextualizedContributionList('artistContribs', {
+        reclass: input.value(TrackArtistContribution),
         artistProperty: input.value('albumTrackArtistContributions'),
       }),
 
@@ -267,6 +268,7 @@ export class Album extends Thing {
     ],
 
     wallpaperArtistContribs: contributionList({
+      class: input.value(AlbumWallpaperArtistContribution),
       date: 'coverArtDate',
       artistProperty: input.value('albumWallpaperArtistContributions'),
     }),
@@ -309,6 +311,7 @@ export class Album extends Thing {
     ],
 
     bannerArtistContribs: contributionList({
+      class: input.value(AlbumBannerArtistContribution),
       date: 'coverArtDate',
       artistProperty: input.value('albumBannerArtistContributions'),
     }),
@@ -794,75 +797,6 @@ export class Album extends Thing {
     ],
   };
 
-  static [Thing.getYamlLoadingSpec] = ({
-    documentModes: {headerAndEntries},
-    thingConstructors: {Album, Track, TrackSection},
-  }) => ({
-    title: `Process album files`,
-
-    files: dataPath =>
-      traverse(path.join(dataPath, DATA_ALBUM_DIRECTORY), {
-        filterFile: name => path.extname(name) === '.yaml',
-        prefixPath: DATA_ALBUM_DIRECTORY,
-      }),
-
-    documentMode: headerAndEntries,
-    headerDocumentThing: Album,
-    entryDocumentThing: document =>
-      ('Section' in document
-        ? TrackSection
-        : Track),
-
-    connect({header: album, entries}) {
-      const trackSections = [];
-
-      let currentTrackSection = new TrackSection();
-      let currentTrackSectionTracks = [];
-
-      Object.assign(currentTrackSection, {
-        name: `Default Track Section`,
-        isDefaultTrackSection: true,
-      });
-
-      const closeCurrentTrackSection = () => {
-        if (
-          currentTrackSection.isDefaultTrackSection &&
-          empty(currentTrackSectionTracks)
-        ) {
-          return;
-        }
-
-        currentTrackSection.tracks = currentTrackSectionTracks;
-        currentTrackSection.album = album;
-
-        trackSections.push(currentTrackSection);
-      };
-
-      for (const entry of entries) {
-        if (entry instanceof TrackSection) {
-          closeCurrentTrackSection();
-          currentTrackSection = entry;
-          currentTrackSectionTracks = [];
-          continue;
-        }
-
-        entry.album = album;
-        entry.trackSection = currentTrackSection;
-
-        currentTrackSectionTracks.push(entry);
-      }
-
-      closeCurrentTrackSection();
-
-      album.trackSections = trackSections;
-    },
-
-    sort({albumData, trackData}) {
-      sortChronologically(albumData);
-      sortAlbumsTracksChronologically(trackData);
-    },
-  });
-
   getOwnAdditionalFilePath(_file, filename) {
     return [
       'media.albumAdditionalFile',