« get me outta code hell

data: Track.directoryWithinAlbum - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/data/things/Track.js
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2026-05-28 13:24:20 -0300
committer(quasar) nebula <qznebula@protonmail.com>2026-05-28 13:24:20 -0300
commit75e68aa1c8886e69d63a0e0b365fd6a7c309412c (patch)
treef90f1cb666634b774b3e9183a2d5729140418d0a /src/data/things/Track.js
parent9dc7c08e2fa7a0303fda3b9a687b55425c594aef (diff)
data: Track.directoryWithinAlbum
Diffstat (limited to 'src/data/things/Track.js')
-rw-r--r--src/data/things/Track.js115
1 files changed, 37 insertions, 78 deletions
diff --git a/src/data/things/Track.js b/src/data/things/Track.js
index a615af4a..7ce55e51 100644
--- a/src/data/things/Track.js
+++ b/src/data/things/Track.js
@@ -7,7 +7,7 @@ import find, {keyRefRegex} from '#find';
 import {empty, onlyItem} from '#sugar';
 import {sortByDate, sortFlashesChronologically} from '#sort';
 import Thing from '#thing';
-import {compareKebabCase, getKebabCase} from '#wiki-data';
+import {compareKebabCase} from '#wiki-data';
 
 import {
   anyOf,
@@ -17,9 +17,11 @@ import {
   isContentString,
   isContributionList,
   isDate,
+  isDirectory,
   isExcludingURLsReason,
   isFileExtension,
   isString,
+  strictArrayOf,
   validateReference,
 } from '#validators';
 
@@ -69,6 +71,7 @@ import {
 } from '#composite/data';
 
 import {
+  withDirectory,
   withRecontextualizedContributionList,
   withRedatedContributionList,
   withResolvedContribs,
@@ -100,6 +103,7 @@ import {
 import {
   inheritContributionListFromMainRelease,
   inheritFromMainRelease,
+  withDirectorySuffixes,
 } from '#composite/things/track';
 
 export class Track extends Thing {
@@ -155,16 +159,26 @@ export class Track extends Thing {
     ],
 
     directory: directory({
-      suffix: 'directorySuffix',
+      suffix: 'suffixDirectory',
     }),
 
     suffixDirectory: [
-      exposeUpdateValueOrContinue({
-        validate: input.value(isBoolean),
+      withDirectorySuffixes({
+        from:
+          input.updateValue({
+            validate:
+              anyOf(
+                isBoolean,
+                is('album'),
+                isDirectory,
+                strictArrayOf(
+                  anyOf(
+                    is('album'),
+                    isDirectory))),
+          }),
       }),
 
-      withPropertyFromObject('trackSection', V('suffixTrackDirectories')),
-      exposeDependency('#trackSection.suffixTrackDirectories'),
+      exposeDependency('#directorySuffix'),
     ],
 
     referenceByDirectory: [
@@ -674,80 +688,25 @@ export class Track extends Thing {
       exposeDependency('name'),
     ],
 
-    commentatorArtists: commentatorArtists(),
-
-    directorySuffix: [
-      withPropertyFromObject('trackSection', V('directorySuffix')),
-
-      {
-        dependencies: [
-          '_suffixDirectory',
-           'suffixDirectory',
-          '#trackSection.directorySuffix',
-        ],
-
-        compute(continuation, {
-          ['_suffixDirectory']: suffixDirectoryUpdateValue,
-          [ 'suffixDirectory']: suffixDirectoryComputedValue,
-          ['#trackSection.directorySuffix']: directorySuffixFromAlbum,
-        }) {
-          // If directly set to true or inheriting true...
-          if (suffixDirectoryComputedValue === true) {
-            return directorySuffixFromAlbum;
-          }
-
-          // If directly set to false...
-          if (suffixDirectoryUpdateValue === false) {
-            return null;
-          }
-
-          // If inheriting false or defaulting to false...
-          return continuation();
-        },
-      },
+    directoryWithinAlbum: [
+      withDirectorySuffixes(),
 
-      // Don't follow any "automatic" directory suffix logic if the track's
-      // entire directory is set outright.
-      {
-        dependencies: ['_directory'],
-        compute(continuation, {
-          ['_directory']: directoryUpdateValue,
-        }) {
-          if (directoryUpdateValue) {
-            return null;
-          }
-
-          return continuation();
-        },
-      },
-
-      {
-        dependencies: [
-          '_nameDetail',
-           'nameDetailAcrossWiki',
-          '#trackSection.directorySuffix',
-        ],
-
-        compute(continuation, {
-          ['_nameDetail']: nameDetail,
-          [ 'nameDetailAcrossWiki']: nameDetailAcrossWiki,
-          ['#trackSection.directorySuffix']: directorySuffixFromAlbum,
-        }) {
-          if (nameDetail === 'album') {
-            return directorySuffixFromAlbum;
-          }
-
-          if (nameDetailAcrossWiki) {
-            return getKebabCase(nameDetailAcrossWiki);
-          }
+      withDirectory({
+        directory: '_directory',
+        name: 'name',
+        suffix: '#directorySuffixWithinAlbum',
+      }),
 
-          return continuation();
-        },
-      },
+      exposeDependency('#directory'),
+    ],
 
-      exposeConstant(V(null)),
+    suffixDirectoryWithinAlbum: [
+      withDirectorySuffixes(),
+      exposeDependency('#directorySuffixWithinAlbum'),
     ],
 
+    commentatorArtists: commentatorArtists(),
+
     date: [
       {
         dependencies: ['disableDate'],
@@ -1467,8 +1426,8 @@ export class Track extends Thing {
     const ext = artwork.fileExtension;
     const basename =
       (artwork.unqualifiedDirectory
-        ? this.directory + '-' + artwork.unqualifiedDirectory
-        : this.directory);
+        ? this.directoryWithinAlbum + '-' + artwork.unqualifiedDirectory
+        : this.directoryWithinAlbum);
 
     return this.album.getAlbumArtPath(`${basename}.${ext}`);
   }
@@ -1484,7 +1443,7 @@ export class Track extends Thing {
     const trackPrefix =
       (isSingleFirstTrack
         ? ''
-        : this.directory + '-');
+        : this.directoryWithinAlbum + '-');
 
     const filename =
       trackPrefix +