diff options
| author | (quasar) nebula <qznebula@protonmail.com> | 2026-06-10 10:32:21 -0300 |
|---|---|---|
| committer | (quasar) nebula <qznebula@protonmail.com> | 2026-06-10 10:32:21 -0300 |
| commit | 8ac83829b4f1add4c57504210d08758e63540853 (patch) | |
| tree | 1a5f793d626f51ad405d49680c254a964f3c038c /src/data/composite | |
| parent | 52272a8da9a798803abd1176a8294845e8567641 (diff) | |
data: Track: 'Name Detail: section'
Diffstat (limited to 'src/data/composite')
| -rw-r--r-- | src/data/composite/things/track/withDirectorySuffixes.js | 113 |
1 files changed, 90 insertions, 23 deletions
diff --git a/src/data/composite/things/track/withDirectorySuffixes.js b/src/data/composite/things/track/withDirectorySuffixes.js index efc66f13..be66b5c9 100644 --- a/src/data/composite/things/track/withDirectorySuffixes.js +++ b/src/data/composite/things/track/withDirectorySuffixes.js @@ -22,13 +22,23 @@ export default templateCompositeFrom({ properties: input.value([ 'suffixTrackDirectoriesByDefault', 'directorySuffixForTracks', + 'nameDetailForTracks', + ]), + }), + + withPropertiesFromObject({ + object: 'album', + properties: input.value([ + 'suffixTrackDirectoriesByDefault', + 'directorySuffixForTracks', + 'nameDetailForTracks', ]), }), { dependencies: [ input('from'), - '#trackSection.suffixTrackDirectoriesByDefault', + '#album.directorySuffixForTracks', '#trackSection.directorySuffixForTracks', ], @@ -36,25 +46,34 @@ export default templateCompositeFrom({ [input('from')]: suffixDirectory, - ['#trackSection.suffixTrackDirectoriesByDefault']: - suffixTrackDirectoriesByDefault, + ['#album.directorySuffixForTracks']: + albumDirectorySuffixForTracks, ['#trackSection.directorySuffixForTracks']: - directorySuffixForTracks, + trackSectionDirectorySuffixForTracks, }) { // All conditions in this chunk process explicitly set values for - // the actual update value - that is, everything EXCEPT true or null, - // which both pass through to conditional "defaults". - // (True and null aren't quite equal, but the difference only matters - // at the very end.) + // the actual update value - that is, everything EXCEPT null, + // which passes through to conditional "defaults". + // Note that 'Suffix Directory: true' is literally equivalent to + // suffixDirectory = 'album', via yaml transformation. if (suffixDirectory === 'album') { return continuation.raiseOutput({ - ['#directorySuffix']: directorySuffixForTracks, + ['#directorySuffix']: albumDirectorySuffixForTracks, ['#directorySuffixWithinAlbum']: null, }); } + if (suffixDirectory === 'section') { + // Bear in mind the directory is suffixed within the album. + // This is repeated in following steps, too. + return continuation.raiseOutput({ + ['#directorySuffix']: trackSectionDirectorySuffixForTracks, + ['#directorySuffixWithinAlbum']: trackSectionDirectorySuffixForTracks, + }); + } + if (typeof suffixDirectory === 'string') { return continuation.raiseOutput({ ['#directorySuffix']: suffixDirectory, @@ -74,7 +93,9 @@ export default templateCompositeFrom({ suffixDirectory .map(item => (item === 'album' - ? directorySuffixForTracks + ? albumDirectorySuffixForTracks + : item === 'section' + ? trackSectionDirectorySuffixForTracks : item)); const parts2 = @@ -82,6 +103,8 @@ export default templateCompositeFrom({ .map(item => (item === 'album' ? null + : item === 'section' + ? trackSectionDirectorySuffixForTracks : item)) .filter(Boolean); @@ -91,27 +114,53 @@ export default templateCompositeFrom({ }); } - // It's true or null - just continue. + // It's null - just continue. return continuation(); }, }, { + // Neither of the track section fields inherit from the album. + // Importantly, trackSection.suffixTrackDirectoriesByDefault can be null + // OR false at the same time as album.suffixTrackDirectoriesByDefault + // is true, and those carry different meanings. dependencies: [ '#trackSection.suffixTrackDirectoriesByDefault', '#trackSection.directorySuffixForTracks', + '#album.suffixTrackDirectoriesByDefault', + '#album.directorySuffixForTracks', ], compute(continuation, { ['#trackSection.suffixTrackDirectoriesByDefault']: - suffixTrackDirectoriesByDefault, + trackSectionSuffixTrackDirectoriesByDefault, ['#trackSection.directorySuffixForTracks']: - directorySuffixForTracks, + trackSectionDirectorySuffixForTracks, + + ['#album.suffixTrackDirectoriesByDefault']: + albumSuffixTrackDirectoriesByDefault, + + ['#album.directorySuffixForTracks']: + albumDirectorySuffixForTracks, }) { - if (suffixTrackDirectoriesByDefault === true) { + if (trackSectionSuffixTrackDirectoriesByDefault === true) { + return continuation.raiseOutput({ + ['#directorySuffix']: trackSectionDirectorySuffixForTracks, + ['#directorySuffixWithinAlbum']: trackSectionDirectorySuffixForTracks, + }); + } + + if (trackSectionSuffixTrackDirectoriesByDefault === false) { + // Just proceed. Other logic may independently provide a suffix, + // but this false ensures that track ignores whether the *album* + // provides Suffix Track Directories: true. + return continuation(); + } + + if (albumSuffixTrackDirectoriesByDefault === true) { return continuation.raiseOutput({ - ['#directorySuffix']: directorySuffixForTracks, + ['#directorySuffix']: albumDirectorySuffixForTracks, ['#directorySuffixWithinAlbum']: null, }); } @@ -141,29 +190,47 @@ export default templateCompositeFrom({ }, { + // The logic path in this section is ONLY decided based on the track's + // actually-set Name Detail, and inheritence is not a factor at all. dependencies: [ '_nameDetail', - 'nameDetailAcrossWiki', - + '#album.nameDetailForTracks', + '#album.directorySuffixForTracks', + '#trackSection.nameDetailForTracks', '#trackSection.directorySuffixForTracks', ], compute(continuation, { ['_nameDetail']: nameDetail, - [ 'nameDetailAcrossWiki']: nameDetailAcrossWiki, + + ['#album.nameDetailForTracks']: + albumNameDetailForTracks, + + ['#album.directorySuffixForTracks']: + albumDirectorySuffixForTracks, + + ['#trackSection.nameDetailForTracks']: + trackSectionNameDetailForTracks, ['#trackSection.directorySuffixForTracks']: - directorySuffixForTracks, + trackSectionDirectorySuffixForTracks, }) { + if (nameDetail === 'section') { + return continuation.raiseOutput({ + ['#directorySuffix']: trackSectionDirectorySuffixForTracks, + ['#directorySuffixWithinAlbum']: trackSectionDirectorySuffixForTracks, + }) + } + if (nameDetail === 'album') { return continuation.raiseOutput({ - ['#directorySuffix']: directorySuffixForTracks, - ['#directorySuffixWithinAlbum']: directorySuffixForTracks, + ['#directorySuffix']: albumDirectorySuffixForTracks, + ['#directorySuffixWithinAlbum']: null, }); } - if (nameDetailAcrossWiki) { - const kebab = getKebabCase(nameDetailAcrossWiki); + if (nameDetail) { + const kebab = getKebabCase(nameDetail); return continuation.raiseOutput({ ['#directorySuffix']: kebab, |