diff options
| author | (quasar) nebula <qznebula@protonmail.com> | 2026-04-14 20:26:02 -0300 |
|---|---|---|
| committer | (quasar) nebula <qznebula@protonmail.com> | 2026-04-14 20:26:02 -0300 |
| commit | 2336e252d25536d3678119ff070189e666b98927 (patch) | |
| tree | 788b9c689b8c7ac4324af092c73e95f20b5abd6f /src/data/things | |
| parent | ed38f9529084cdd3ff6cdfb56148fd9a99c259b2 (diff) | |
content, data: generateArtistInfoPageMusicVideosChunkedList
Diffstat (limited to 'src/data/things')
| -rw-r--r-- | src/data/things/Artist.js | 33 | ||||
| -rw-r--r-- | src/data/things/MusicVideo.js | 26 |
2 files changed, 57 insertions, 2 deletions
diff --git a/src/data/things/Artist.js b/src/data/things/Artist.js index f518e31e..b82ef8bf 100644 --- a/src/data/things/Artist.js +++ b/src/data/things/Artist.js @@ -14,8 +14,10 @@ import { import {exitWithoutDependency, exposeConstant, exposeDependency} from '#composite/control-flow'; -import {withFilteredList, withPropertyFromList} from '#composite/data'; -import {withContributionListSums} from '#composite/wiki-data'; +import {withFilteredList, withMappedList, withPropertyFromList} + from '#composite/data'; +import {withContributionListSums, withReverseReferenceList} + from '#composite/wiki-data'; import { constitutibleArtwork, @@ -216,6 +218,33 @@ export class Artist extends Thing { reverse: soupyReverse.input('musicVideoContributorContributionsBy'), }), + otherMusicVideoArtistContributionsToOwnAlbums: [ + withReverseReferenceList({ + reverse: soupyReverse.input('musicVideoArtistContributionsToAlbumsBy'), + }).outputs({ + '#reverseReferenceList': '#allArtistContributions', + }), + + { + dependencies: [input.myself()], + compute: (continuation, { + [input.myself()]: myself, + }) => continuation({ + ['#isNotMyself']: artist => artist !== myself, + }), + }, + + withPropertyFromList('#allArtistContributions', V('artist')), + + withMappedList('#allArtistContributions.artist', '#isNotMyself') + .outputs({'#mappedList': '#differentArtistFilter'}), + + withFilteredList('#allArtistContributions', '#differentArtistFilter') + .outputs({'#filteredList': '#otherArtistContributions'}), + + exposeDependency('#otherArtistContributions'), + ], + totalDuration: [ withPropertyFromList('musicContributions', V('thing')), withPropertyFromList('#musicContributions.thing', V('isMainRelease')), diff --git a/src/data/things/MusicVideo.js b/src/data/things/MusicVideo.js index 8e4e2d6d..77c8c619 100644 --- a/src/data/things/MusicVideo.js +++ b/src/data/things/MusicVideo.js @@ -167,6 +167,32 @@ export class MusicVideo extends Thing { musicVideoContributorContributionsBy: soupyReverse.contributionsBy('musicVideoData', 'contributorContribs'), + + musicVideoArtistContributionsToAlbumsBy: { + bindTo: 'musicVideoData', + + referencing: musicVideo => musicVideo.artistContribs, + + *referenced(musicVideoContrib) { + const musicVideo = musicVideoContrib.thing; + const trackOrAlbum = musicVideo.thing; + if (trackOrAlbum.isTrack) { + const albumArtists = + trackOrAlbum.album.artistContribs + .map(albumContrib => albumContrib.artist); + + for (const trackContrib of trackOrAlbum.artistContribs) { + if (albumArtists.includes(trackContrib.artist)) { + yield trackContrib.artist; + } + } + } else { + for (const albumContrib of trackOrAlbum.artistContribs) { + yield albumContrib.artist; + } + } + }, + }, }; get path() { |