diff options
author | (quasar) nebula <qznebula@protonmail.com> | 2025-05-16 12:31:44 -0300 |
---|---|---|
committer | (quasar) nebula <qznebula@protonmail.com> | 2025-05-16 12:31:44 -0300 |
commit | 17333795f6a371334b66a11f89353b5c2db2b5ea (patch) | |
tree | 48d57adb8f954ab70a3db7330e1eb14d052adf4a /src | |
parent | 74f6e86f4d710550d5768e7445361946354e2606 (diff) |
data: AdditionalFile.paths
Diffstat (limited to 'src')
-rw-r--r-- | src/data/things/additional-file.js | 13 | ||||
-rw-r--r-- | src/data/things/album.js | 8 | ||||
-rw-r--r-- | src/data/things/track.js | 10 | ||||
-rw-r--r-- | src/data/yaml.js | 2 |
4 files changed, 31 insertions, 2 deletions
diff --git a/src/data/things/additional-file.js b/src/data/things/additional-file.js index c5e7bdcd..2ddc688a 100644 --- a/src/data/things/additional-file.js +++ b/src/data/things/additional-file.js @@ -2,7 +2,7 @@ import {input} from '#composite'; import Thing from '#thing'; import {isString, validateArrayItems} from '#validators'; -import {contentString, simpleString} from '#composite/wiki-properties'; +import {contentString, simpleString, thing} from '#composite/wiki-properties'; import {exposeConstant, exposeUpdateValueOrContinue} from '#composite/control-flow'; @@ -11,6 +11,8 @@ export class AdditionalFile extends Thing { static [Thing.getPropertyDescriptors] = ({}) => ({ // Update & expose + thing: thing(), + title: simpleString(), description: contentString(), @@ -33,4 +35,13 @@ export class AdditionalFile extends Thing { 'Files': {property: 'filenames'}, }, }; + + get paths() { + if (!this.thing) return null; + if (!this.thing.getOwnAdditionalFilePath) return null; + + return ( + this.filenames.map(filename => + this.thing.getOwnAdditionalFilePath(this, filename))); + } } diff --git a/src/data/things/album.js b/src/data/things/album.js index 37d01233..2274c92a 100644 --- a/src/data/things/album.js +++ b/src/data/things/album.js @@ -788,6 +788,14 @@ export class Album extends Thing { }, }); + getOwnAdditionalFilePath(_file, filename) { + return [ + 'media.albumAdditionalFile', + this.directory, + filename, + ]; + } + getOwnArtworkPath(artwork) { if (artwork === this.bannerArtwork) { return [ diff --git a/src/data/things/track.js b/src/data/things/track.js index 2c5e4fd7..8072c3cb 100644 --- a/src/data/things/track.js +++ b/src/data/things/track.js @@ -744,6 +744,16 @@ export class Track extends Thing { // Track YAML loading is handled in album.js. static [Thing.getYamlLoadingSpec] = null; + getOwnAdditionalFilePath(_file, filename) { + if (!this.album) return null; + + return [ + 'media.albumAdditionalFile', + this.album.directory, + filename, + ]; + } + getOwnArtworkPath(artwork) { if (!this.album) return null; diff --git a/src/data/yaml.js b/src/data/yaml.js index 80fb2e87..f3ba3f3b 100644 --- a/src/data/yaml.js +++ b/src/data/yaml.js @@ -615,7 +615,7 @@ export function parseAdditionalFiles(entries, {subdoc, AdditionalFile}) { return parseArrayEntries(entries, item => { if (typeof item !== 'object') return item; - return subdoc(AdditionalFile, item); + return subdoc(AdditionalFile, item, {bindInto: 'thing'}); }); } |