diff options
| author | (quasar) nebula <qznebula@protonmail.com> | 2026-05-19 16:29:21 -0300 |
|---|---|---|
| committer | (quasar) nebula <qznebula@protonmail.com> | 2026-05-19 16:29:21 -0300 |
| commit | e9ec97e5063f1255b2f03a5dc31c1a88aa142aa0 (patch) | |
| tree | add634a57869741f29b605a0f954e6838866528d /src | |
| parent | 06e32433951750f7c364b9faba9f6705a414d3b0 (diff) | |
data: {Album,TrackSection}.excludingTrackURLs
Diffstat (limited to 'src')
| -rw-r--r-- | src/data/things/Track.js | 20 | ||||
| -rw-r--r-- | src/data/things/album/Album.js | 17 | ||||
| -rw-r--r-- | src/data/things/album/TrackSection.js | 19 | ||||
| -rw-r--r-- | src/validators.js | 8 |
4 files changed, 49 insertions, 15 deletions
diff --git a/src/data/things/Track.js b/src/data/things/Track.js index 9e35368b..f8eac729 100644 --- a/src/data/things/Track.js +++ b/src/data/things/Track.js @@ -16,6 +16,7 @@ import { isContentString, isContributionList, isDate, + isExcludingURLsReason, isFileExtension, validateReference, } from '#validators'; @@ -381,19 +382,14 @@ export class Track extends Thing { }, ], - excludingURLs: { - flags: {update: true, expose: true}, + excludingURLs: [ + exposeUpdateValueOrContinue({ + validate: input.value(isExcludingURLsReason), + }), - update: { - validate: - is(...[ - 'quietly', - 'generic', - 'not clearly public', - 'paid bonus track', - ]), - }, - }, + withPropertyFromObject('trackSection', V('excludingTrackURLs')), + exposeDependency('#trackSection.excludingTrackURLs'), + ], urls: [ { diff --git a/src/data/things/album/Album.js b/src/data/things/album/Album.js index eaf19247..e212548d 100644 --- a/src/data/things/album/Album.js +++ b/src/data/things/album/Album.js @@ -1,8 +1,15 @@ import {input, V} from '#composite'; import {empty} from '#sugar'; import Thing from '#thing'; -import {is, isContributionList, isDate, isDirectory, isNumber} - from '#validators'; + +import { + is, + isContributionList, + isDate, + isExcludingURLsReason, + isDirectory, + isNumber, +} from '#validators'; import { parseAdditionalFiles, @@ -172,6 +179,11 @@ export class Album extends Thing { countTracksInArtistTotals: flag(V(true)), + excludingTrackURLs: { + flags: {update: true, expose: true}, + update: {validate: isExcludingURLsReason}, + }, + isListedOnHomepage: flag(V(true)), isListedInGalleries: flag(V(true)), @@ -639,6 +651,7 @@ export class Album extends Thing { // General configuration 'Count Tracks In Artist Totals': {property: 'countTracksInArtistTotals'}, + 'Excluding Track URLs': {property: 'excludingTrackURLs'}, 'Listed on Homepage': {property: 'isListedOnHomepage'}, 'Listed in Galleries': {property: 'isListedInGalleries'}, diff --git a/src/data/things/album/TrackSection.js b/src/data/things/album/TrackSection.js index a7763184..15688735 100644 --- a/src/data/things/album/TrackSection.js +++ b/src/data/things/album/TrackSection.js @@ -3,9 +3,16 @@ import {inspect} from 'node:util'; import {colors} from '#cli'; import {input, V} from '#composite'; import Thing from '#thing'; -import {isBoolean, isColor, isDirectory, isNumber} from '#validators'; import {parseDate} from '#yaml'; +import { + isBoolean, + isColor, + isDirectory, + isExcludingURLsReason, + isNumber, +} from '#validators'; + import {withLengthOfList, withNearbyItemFromList, withPropertyFromObject} from '#composite/data'; @@ -112,6 +119,15 @@ export class TrackSection extends Thing { exposeDependency('#album.countTracksInArtistTotals'), ], + excludingTrackURLs: [ + exposeUpdateValueOrContinue({ + validate: input.value(isExcludingURLsReason), + }), + + withPropertyFromObject('album', V('excludingTrackURLs')), + exposeDependency('#album.excludingTrackURLs'), + ], + isDefaultTrackSection: flag(V(false)), description: contentString(), @@ -196,6 +212,7 @@ export class TrackSection extends Thing { }, 'Count Tracks In Artist Totals': {property: 'countTracksInArtistTotals'}, + 'Excluding Track URLs': {property: 'excludingTrackURLs'}, 'Description': {property: 'description'}, }, diff --git a/src/validators.js b/src/validators.js index 508950d6..b702682e 100644 --- a/src/validators.js +++ b/src/validators.js @@ -822,6 +822,14 @@ export function isCuratedURL(string) { return true; } +export const isExcludingURLsReason = + is(...[ + 'quietly', + 'generic', + 'not clearly public', + 'paid bonus track', + ]); + export const validateURLEntry = (isURL) => validateProperties({ url: isURL, |