diff options
author | (quasar) nebula <qznebula@protonmail.com> | 2025-06-16 18:29:55 -0300 |
---|---|---|
committer | (quasar) nebula <qznebula@protonmail.com> | 2025-06-16 18:29:55 -0300 |
commit | 84d417569d0a92a6de4a99b8b33945fb6c8b927d (patch) | |
tree | aec3cf7f0fc224bbac090cec7426c8a3b396ad2a /src | |
parent | 787a8a71412d4e80455ddce0e36feecb85f74672 (diff) |
content: generateReleaseInfoListenLine: composer's release preview
Diffstat (limited to 'src')
-rw-r--r-- | src/content/dependencies/generateReleaseInfoListenLine.js | 85 | ||||
-rw-r--r-- | src/external-links.js | 6 | ||||
-rw-r--r-- | src/strings-default.yaml | 2 |
3 files changed, 60 insertions, 33 deletions
diff --git a/src/content/dependencies/generateReleaseInfoListenLine.js b/src/content/dependencies/generateReleaseInfoListenLine.js index 8cc2c984..f2a6dd29 100644 --- a/src/content/dependencies/generateReleaseInfoListenLine.js +++ b/src/content/dependencies/generateReleaseInfoListenLine.js @@ -1,26 +1,60 @@ import {isExternalLinkContext} from '#external-links'; import {empty, stitchArrays, unique} from '#sugar'; +function getReleaseContext(urlString, { + _artistURLs, + albumArtistURLs, +}) { + const composerBandcampDomains = + albumArtistURLs + .filter(url => url.hostname.endsWith('.bandcamp.com')) + .map(url => url.hostname); + + const url = new URL(urlString); + + if (url.hostname === 'homestuck.bandcamp.com') { + return 'officialRelease'; + } + + if (composerBandcampDomains.includes(url.hostname)) { + return 'composerRelease'; + } + + return null; +} + export default { contentDependencies: ['linkExternal'], extraDependencies: ['html', 'language'], - query: (thing) => ({ - album: + query(thing) { + const query = {}; + + query.album = (thing.album ? thing.album - : thing), + : thing); - artists: + query.artists = thing.artistContribs - .map(contrib => contrib.artist), + .map(contrib => contrib.artist); - artistGroups: - thing.artistContribs - .map(contrib => contrib.artist) + query.artistGroups = + query.artists .flatMap(artist => artist.closelyLinkedGroups) - .map(({group}) => group), - }), + .map(({group}) => group); + + query.albumArtists = + query.album.artistContribs + .map(contrib => contrib.artist); + + query.albumArtistGroups = + query.albumArtists + .flatMap(artist => artist.closelyLinkedGroups) + .map(({group}) => group); + + return query; + }, relations: (relation, _query, thing) => ({ links: @@ -38,30 +72,23 @@ export default { ...query.artistGroups.flatMap(group => group.urls), ]).map(url => new URL(url)); - const artistBandcampDomains = - artistURLs - .filter(url => url.hostname.endsWith('.bandcamp.com')) - .map(url => url.hostname); - - const getReleaseContext = urlString => { - const url = new URL(urlString); - - if (url.hostname === 'homestuck.bandcamp.com') { - return 'officialRelease'; - } - - if (artistBandcampDomains.includes(url.hostname)) { - return 'artistRelease'; - } + const albumArtistURLs = + unique([ + ...query.albumArtists.flatMap(artist => artist.urls), + ...query.albumArtistGroups.flatMap(group => group.urls), + ]).map(url => new URL(url)); - return null; - }; + const boundGetReleaseContext = urlString => + getReleaseContext(urlString, { + artistURLs, + albumArtistURLs, + }); let releaseContexts = - thing.urls.map(getReleaseContext); + thing.urls.map(boundGetReleaseContext); const albumReleaseContexts = - query.album.urls.map(getReleaseContext); + query.album.urls.map(boundGetReleaseContext); const presentReleaseContexts = unique(releaseContexts.filter(Boolean)); diff --git a/src/external-links.js b/src/external-links.js index 247b70f4..ab1555bd 100644 --- a/src/external-links.js +++ b/src/external-links.js @@ -31,7 +31,7 @@ export const externalLinkContexts = [ 'group', 'track', - 'artistRelease', + 'composerRelease', 'officialRelease', ]; @@ -260,10 +260,10 @@ export const externalLinkSpec = [ { match: { domain: '.bandcamp.com', - context: 'artistRelease', + context: 'composerRelease', }, - platform: 'bandcamp.artistRelease', + platform: 'bandcamp.composerRelease', handle: {domain: /^[^.]+/}, icon: 'bandcamp', diff --git a/src/strings-default.yaml b/src/strings-default.yaml index fe6681ed..ecc0cc14 100644 --- a/src/strings-default.yaml +++ b/src/strings-default.yaml @@ -654,7 +654,7 @@ misc: bandcamp: _: "Bandcamp" - artistRelease: "Bandcamp (artist's release)" + composerRelease: "Bandcamp (composer's release)" officialRelease: "Bandcamp (official release)" bgreco: |