« get me outta code hell

hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/data/things/additional-file.js13
-rw-r--r--src/data/things/album.js8
-rw-r--r--src/data/things/track.js10
-rw-r--r--src/data/yaml.js2
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'});
   });
 }