diff options
author | (quasar) nebula <qznebula@protonmail.com> | 2024-05-08 13:10:35 -0300 |
---|---|---|
committer | (quasar) nebula <qznebula@protonmail.com> | 2024-05-08 13:10:35 -0300 |
commit | d814792891485af3423cd2232e20b12a6f051034 (patch) | |
tree | 697a6e2129aeb139ed4e3c30a2fe7fa63741a1d0 | |
parent | 4a0f071064aeb95749f40f93b51f86c3c882bfeb (diff) |
data: Album.alwaysReferenceTracksByDirectory
-rw-r--r-- | src/data/composite/things/track/withAlwaysReferenceByDirectory.js | 31 | ||||
-rw-r--r-- | src/data/things/album.js | 6 |
2 files changed, 35 insertions, 2 deletions
diff --git a/src/data/composite/things/track/withAlwaysReferenceByDirectory.js b/src/data/composite/things/track/withAlwaysReferenceByDirectory.js index fac8e213..e01720b4 100644 --- a/src/data/composite/things/track/withAlwaysReferenceByDirectory.js +++ b/src/data/composite/things/track/withAlwaysReferenceByDirectory.js @@ -7,11 +7,15 @@ import {input, templateCompositeFrom} from '#composite'; import find from '#find'; import {isBoolean} from '#validators'; -import {exitWithoutDependency, exposeUpdateValueOrContinue} - from '#composite/control-flow'; import {withPropertyFromObject} from '#composite/data'; import {withResolvedReference} from '#composite/wiki-data'; +import { + exitWithoutDependency, + exposeDependencyOrContinue, + exposeUpdateValueOrContinue, +} from '#composite/control-flow'; + export default templateCompositeFrom({ annotation: `withAlwaysReferenceByDirectory`, @@ -22,6 +26,29 @@ export default templateCompositeFrom({ validate: input.value(isBoolean), }), + // withAlwaysReferenceByDirectory is sort of a fragile area - we can't + // find the track's album the normal way because albums' track lists + // recurse back into alwaysReferenceByDirectory! + withResolvedReference({ + ref: 'dataSourceAlbum', + data: 'albumData', + find: input.value(find.album), + }).outputs({ + '#resolvedReference': '#album', + }), + + withPropertyFromObject({ + object: '#album', + property: input.value('alwaysReferenceTracksByDirectory'), + }), + + // Falsy mode means this exposes true if the album's property is true, + // but continues if the property is false (which is also the default). + exposeDependencyOrContinue({ + dependency: '#album.alwaysReferenceTracksByDirectory', + mode: input.value('falsy'), + }), + // Remaining code is for defaulting to true if this track is a rerelease of // another with the same name, so everything further depends on access to // trackData as well as originalReleaseTrack. diff --git a/src/data/things/album.js b/src/data/things/album.js index 40cd4631..f8354962 100644 --- a/src/data/things/album.js +++ b/src/data/things/album.js @@ -48,6 +48,8 @@ export class Album extends Thing { directory: directory(), urls: urls(), + alwaysReferenceTracksByDirectory: flag(false), + bandcampAlbumIdentifier: simpleString(), bandcampArtworkIdentifier: simpleString(), @@ -226,6 +228,10 @@ export class Album extends Thing { 'Album': {property: 'name'}, 'Directory': {property: 'directory'}, + 'Always Reference Tracks By Directory': { + property: 'alwaysReferenceTracksByDirectory', + }, + 'Bandcamp Album ID': { property: 'bandcampAlbumIdentifier', transform: String, |