diff options
-rw-r--r-- | src/data/things/artist.js | 39 | ||||
-rw-r--r-- | src/data/things/artwork.js | 5 | ||||
-rw-r--r-- | src/gen-thumbs.js | 4 |
3 files changed, 43 insertions, 5 deletions
diff --git a/src/data/things/artist.js b/src/data/things/artist.js index 7ed99a8e..87e1c563 100644 --- a/src/data/things/artist.js +++ b/src/data/things/artist.js @@ -10,8 +10,12 @@ import {stitchArrays} from '#sugar'; import Thing from '#thing'; import {isName, validateArrayItems} from '#validators'; import {getKebabCase} from '#wiki-data'; +import {parseArtwork} from '#yaml'; + +import {exitWithoutDependency} from '#composite/control-flow'; import { + constitutibleArtwork, contentString, directory, fileExtension, @@ -43,6 +47,16 @@ export class Artist extends Thing { hasAvatar: flag(false), avatarFileExtension: fileExtension('jpg'), + avatarArtwork: [ + exitWithoutDependency({ + dependency: 'hasAvatar', + value: input.value(null), + }), + + constitutibleArtwork.fromYAMLFieldSpec + .call(this, 'Avatar Artwork'), + ], + aliasNames: { flags: {update: true, expose: true}, update: {validate: validateArrayItems(isName)}, @@ -193,6 +207,16 @@ export class Artist extends Thing { 'URLs': {property: 'urls'}, 'Context Notes': {property: 'contextNotes'}, + // note: doesn't really work as an independent field yet + 'Avatar Artwork': { + property: 'avatarArtwork', + transform: + parseArtwork({ + single: true, + fileExtensionFromThingProperty: 'avatarFileExtension', + }), + }, + 'Has Avatar': {property: 'hasAvatar'}, 'Avatar File Extension': {property: 'avatarFileExtension'}, @@ -238,7 +262,12 @@ export class Artist extends Thing { const artistData = [...artists, ...artistAliases]; - return {artistData}; + const artworkData = + artistData + .filter(artist => artist.hasAvatar) + .map(artist => artist.avatarArtwork); + + return {artistData, artworkData}; }, sort({artistData}) { @@ -266,4 +295,12 @@ export class Artist extends Thing { return parts.join(''); } + + getOwnArtworkPath(artwork) { + return [ + 'media.artistAvatar', + this.directory, + artwork.fileExtension, + ]; + } } diff --git a/src/data/things/artwork.js b/src/data/things/artwork.js index 4c5c55e7..65032d86 100644 --- a/src/data/things/artwork.js +++ b/src/data/things/artwork.js @@ -120,6 +120,11 @@ export class Artwork extends Thing { validate: input.value(isDimensions), }), + exitWithoutDependency({ + dependency: 'artistContribsFromThingProperty', + value: input.value(null), + }), + withPropertyFromObject({ object: 'thing', property: 'dimensionsFromThingProperty', diff --git a/src/gen-thumbs.js b/src/gen-thumbs.js index bb8300d3..97cf74a9 100644 --- a/src/gen-thumbs.js +++ b/src/gen-thumbs.js @@ -1251,10 +1251,6 @@ export function getExpectedImagePaths(mediaPath, {urls, wikiData}) { .filter(part => part.asset) .map(part => fromRoot.to('media.albumWallpaperPart', album.directory, part.asset))), - - wikiData.artistData - .filter(artist => artist.hasAvatar) - .map(artist => fromRoot.to('media.artistAvatar', artist.directory, artist.avatarFileExtension)), ].flat(); sortByName(paths, {getName: path => path}); |