diff options
| 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 |
| commit | 75e68aa1c8886e69d63a0e0b365fd6a7c309412c (patch) | |
| tree | f90f1cb666634b774b3e9183a2d5729140418d0a /src/data/things/Track.js | |
| parent | 9dc7c08e2fa7a0303fda3b9a687b55425c594aef (diff) | |
data: Track.directoryWithinAlbum
Diffstat (limited to 'src/data/things/Track.js')
| -rw-r--r-- | src/data/things/Track.js | 115 |
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 + |