« get me outta code hell

data: Track.suffixDirectory, Album.directorySuffix - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/data/things
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2024-11-03 09:59:31 -0400
committer(quasar) nebula <qznebula@protonmail.com>2024-11-14 07:59:22 -0400
commit163c541f4b8244f3c2fd8568ab3ef5cc4ed114a2 (patch)
tree6ce776cc82296686adee36b97346113634c6563c /src/data/things
parent6ac3a98cb60651b82d2f93a3ced0e56162ea4be7 (diff)
data: Track.suffixDirectory, Album.directorySuffix
Diffstat (limited to 'src/data/things')
-rw-r--r--src/data/things/album.js13
-rw-r--r--src/data/things/track.js27
2 files changed, 36 insertions, 4 deletions
diff --git a/src/data/things/album.js b/src/data/things/album.js
index b8009063..9cbab427 100644
--- a/src/data/things/album.js
+++ b/src/data/things/album.js
@@ -11,7 +11,7 @@ import {traverse} from '#node-utils';
 import {sortAlbumsTracksChronologically, sortChronologically} from '#sort';
 import {accumulateSum, empty} from '#sugar';
 import Thing from '#thing';
-import {isColor, isDate, validateWikiData} from '#validators';
+import {isColor, isDate, isDirectory, validateWikiData} from '#validators';
 
 import {
   parseAdditionalFiles,
@@ -75,12 +75,18 @@ export class Album extends Thing {
     // Update & expose
 
     name: name('Unnamed Album'),
-    color: color(),
     directory: directory(),
-    urls: urls(),
+
+    directorySuffix: {
+      flags: {update: true, expose: true},
+      update: {validate: isDirectory},
+    },
 
     alwaysReferenceTracksByDirectory: flag(false),
 
+    color: color(),
+    urls: urls(),
+
     additionalNames: additionalNameList(),
 
     bandcampAlbumIdentifier: simpleString(),
@@ -328,6 +334,7 @@ export class Album extends Thing {
     fields: {
       'Album': {property: 'name'},
       'Directory': {property: 'directory'},
+      'Directory Suffix': {property: 'directorySuffix'},
 
       'Always Reference Tracks By Directory': {
         property: 'alwaysReferenceTracksByDirectory',
diff --git a/src/data/things/track.js b/src/data/things/track.js
index 078ad11b..2ee42fdf 100644
--- a/src/data/things/track.js
+++ b/src/data/things/track.js
@@ -88,7 +88,31 @@ export class Track extends Thing {
     // Update & expose
 
     name: name('Unnamed Track'),
-    directory: directory(),
+
+    directory: [
+      withPropertyFromAlbum({
+        property: input.value('directorySuffix'),
+      }),
+
+      {
+        dependencies: ['suffixDirectory', '#album.directorySuffix'],
+        compute: (continuation, {
+          ['suffixDirectory']: suffixDirectory,
+          ['#album.directorySuffix']: directorySuffix,
+        }) => continuation({
+          ['#suffix']:
+            (suffixDirectory
+              ? directorySuffix
+              : null),
+        }),
+      },
+
+      directory({
+        suffix: '#suffix',
+      }),
+    ],
+
+    suffixDirectory: flag(false),
 
     additionalNames: additionalNameList(),
 
@@ -434,6 +458,7 @@ export class Track extends Thing {
     fields: {
       'Track': {property: 'name'},
       'Directory': {property: 'directory'},
+      'Suffix Directory': {property: 'suffixDirectory'},
 
       'Additional Names': {
         property: 'additionalNames',