diff options
author | (quasar) nebula <qznebula@protonmail.com> | 2024-10-30 15:41:50 -0300 |
---|---|---|
committer | (quasar) nebula <qznebula@protonmail.com> | 2024-10-30 16:04:28 -0300 |
commit | 859d1777a4f6f6d583466aaf72357d4d611f3909 (patch) | |
tree | cada415b97c507379c5b14c3147599c070de8aaa /src | |
parent | f5f21156d205a1ad8533a717e5552707d26551a2 (diff) |
data: "This Album Only" field for additional names
Diffstat (limited to 'src')
-rw-r--r-- | src/data/composite/things/track/sharedAdditionalNameList.js | 24 | ||||
-rw-r--r-- | src/data/validators.js | 4 | ||||
-rw-r--r-- | src/data/yaml.js | 7 |
3 files changed, 32 insertions, 3 deletions
diff --git a/src/data/composite/things/track/sharedAdditionalNameList.js b/src/data/composite/things/track/sharedAdditionalNameList.js index 1806ec80..28c04101 100644 --- a/src/data/composite/things/track/sharedAdditionalNameList.js +++ b/src/data/composite/things/track/sharedAdditionalNameList.js @@ -4,7 +4,12 @@ import {input, templateCompositeFrom} from '#composite'; import {exitWithoutDependency, exposeDependency} from '#composite/control-flow'; -import {withFlattenedList, withPropertyFromList} from '#composite/data'; + +import { + withFilteredList, + withFlattenedList, + withPropertyFromList, +} from '#composite/data'; import withOtherReleases from './withOtherReleases.js'; @@ -29,10 +34,25 @@ export default templateCompositeFrom({ withFlattenedList({ list: '#otherReleases.additionalNames', + }).outputs({ + ['#flattenedList']: '#otherReleaseEntries', + }), + + withPropertyFromList({ + list: '#otherReleaseEntries', + property: input.value('specificAlbumExclusive'), + }), + + // Filter out entries that have been marked as exclusive to the containing + // album. + withFilteredList({ + list: '#otherReleaseEntries', + filter: '#otherReleaseEntries.specificAlbumExclusive', + flip: input.value(true), }), exposeDependency({ - dependency: '#flattenedList', + dependency: '#filteredList', }), ], }); diff --git a/src/data/validators.js b/src/data/validators.js index b7dbb629..22dc160c 100644 --- a/src/data/validators.js +++ b/src/data/validators.js @@ -921,6 +921,10 @@ export const isAdditionalName = validateProperties({ name: isContentString, annotation: optional(isContentString), + // TODO: This only applies for tracks, not additional names + // in general. + specificAlbumExclusive: optional(isBoolean), + // TODO: This only allows indicating sourcing from a track. // That's okay for the current limited use of "from", but // could be expanded later. diff --git a/src/data/yaml.js b/src/data/yaml.js index 65e7bcae..e473790a 100644 --- a/src/data/yaml.js +++ b/src/data/yaml.js @@ -448,7 +448,11 @@ export function parseAdditionalFiles(entries) { export function parseAdditionalNames(entries) { return parseArrayEntries(entries, item => { if (typeof item === 'object' && typeof item['Name'] === 'string') - return {name: item['Name'], annotation: item['Annotation'] ?? null}; + return { + name: item['Name'], + annotation: item['Annotation'] ?? null, + specificAlbumExclusive: item['This Album Only'] ?? null, + }; if (typeof item !== 'string') return item; @@ -458,6 +462,7 @@ export function parseAdditionalNames(entries) { return { name: match.groups.main, annotation: match.groups.accent ?? null, + specificAlbumExclusive: null, }; }); } |