From 817b302878251d66ae88fa414f831a001964374f Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Mon, 7 Apr 2025 06:57:21 -0300 Subject: data: TrackSection.{start,continue}CountingFrom, Track.trackNumber --- src/data/things/album.js | 30 +++++++++++++++++++++++------- src/data/things/track.js | 6 ++++++ 2 files changed, 29 insertions(+), 7 deletions(-) (limited to 'src/data/things') diff --git a/src/data/things/album.js b/src/data/things/album.js index 3eb6fc60..762e7d48 100644 --- a/src/data/things/album.js +++ b/src/data/things/album.js @@ -9,7 +9,7 @@ import {traverse} from '#node-utils'; import {sortAlbumsTracksChronologically, sortChronologically} from '#sort'; import {accumulateSum, empty} from '#sugar'; import Thing from '#thing'; -import {isColor, isDate, isDirectory} from '#validators'; +import {isColor, isDate, isDirectory, isNumber} from '#validators'; import { parseAdditionalFiles, @@ -57,7 +57,8 @@ import { } from '#composite/wiki-properties'; import {withTracks} from '#composite/things/album'; -import {withAlbum} from '#composite/things/track-section'; +import {withAlbum, withContinueCountingFrom, withStartCountingFrom} + from '#composite/things/track-section'; export class Album extends Thing { static [Thing.referenceType] = 'album'; @@ -682,6 +683,14 @@ export class TrackSection extends Thing { exposeDependency({dependency: '#album.color'}), ], + startCountingFrom: [ + withStartCountingFrom({ + from: input.updateValue({validate: isNumber}), + }), + + exposeDependency({dependency: '#startCountingFrom'}), + ], + dateOriginallyReleased: simpleDate(), isDefaultTrackSection: flag(false), @@ -731,6 +740,12 @@ export class TrackSection extends Thing { }, ], + continueCountingFrom: [ + withContinueCountingFrom(), + + exposeDependency({dependency: '#continueCountingFrom'}), + ], + startIndex: [ withAlbum(), @@ -797,6 +812,7 @@ export class TrackSection extends Thing { fields: { 'Section': {property: 'name'}, 'Color': {property: 'color'}, + 'Start Counting From': {property: 'startCountingFrom'}, 'Date Originally Released': { property: 'dateOriginallyReleased', @@ -820,12 +836,12 @@ export class TrackSection extends Thing { let first = null; try { - first = this.startIndex; + first = this.tracks.at(0).trackNumber; } catch {} - let length = null; + let last = null; try { - length = this.tracks.length; + last = this.tracks.at(-1).trackNumber; } catch {} if (album) { @@ -838,8 +854,8 @@ export class TrackSection extends Thing { : `#${albumIndex + 1}`); const range = - (albumIndex >= 0 && first !== null && length !== null - ? `: ${first + 1}-${first + length}` + (albumIndex >= 0 && first !== null && last !== null + ? `: ${first}-${last}` : ''); parts.push(` (${colors.yellow(num + range)} in ${colors.green(albumName)})`); diff --git a/src/data/things/track.js b/src/data/things/track.js index 69eb98a5..69953d33 100644 --- a/src/data/things/track.js +++ b/src/data/things/track.js @@ -74,6 +74,7 @@ import { withPropertyFromAlbum, withSuffixDirectoryFromAlbum, withTrackArtDate, + withTrackNumber, } from '#composite/things/track'; export class Track extends Thing { @@ -398,6 +399,11 @@ export class Track extends Thing { exposeDependency({dependency: '#date'}), ], + trackNumber: [ + withTrackNumber(), + exposeDependency({dependency: '#trackNumber'}), + ], + hasUniqueCoverArt: [ withHasUniqueCoverArt(), exposeDependency({dependency: '#hasUniqueCoverArt'}), -- cgit 1.3.0-6-gf8a5