11import { ArtistCredit } from '@/server/components/ArtistCredit.tsx' ;
22import { CoverImage } from '@/server/components/CoverImage.tsx' ;
3- import { MagicISRC } from '@/server/components/ISRCSubmission.tsx' ;
3+ import { ISRCSubmission } from '@/server/components/ISRCSubmission.tsx' ;
44import { LinkWithMusicBrainz } from '@/server/components/LinkWithMusicBrainz.tsx' ;
55import { MBIDInput } from '@/server/components/MBIDInput.tsx' ;
66import { MessageBox } from '@/server/components/MessageBox.tsx' ;
@@ -13,7 +13,6 @@ import type {
1313 ArtistCreditName ,
1414 Artwork ,
1515 HarmonyRelease ,
16- ProviderInfo ,
1716 ReleaseOptions ,
1817 ResolvableEntity ,
1918} from '@/harmonizer/types.ts' ;
@@ -37,7 +36,6 @@ export default defineRoute(async (req, ctx) => {
3736 let release : HarmonyRelease | undefined = undefined ;
3837 let releaseMbid : string | undefined ;
3938 let releaseUrl : URL | undefined ;
40- let isrcProvider : ProviderInfo | undefined ;
4139 let allArtists : ArtistCreditName [ ] = [ ] ;
4240 let mbArtists : EntityWithUrlRels [ ] = [ ] ;
4341 let mbLabels : EntityWithUrlRels [ ] = [ ] ;
@@ -94,10 +92,6 @@ export default defineRoute(async (req, ctx) => {
9492 release . images ?. map ( ( image ) => ( { ...image , provider } ) ) ?? [ ]
9593 ) ;
9694
97- const { info } = release ;
98- const isrcSource = info . sourceMap ?. isrc ;
99- isrcProvider = info . providers . find ( ( provider ) => provider . name === isrcSource ) ;
100-
10195 const allTracks = release . media . flatMap ( ( medium ) => medium . tracklist ) ;
10296
10397 // Fallback to track title, Harmony recordings are usually unnamed.
@@ -113,9 +107,14 @@ export default defineRoute(async (req, ctx) => {
113107
114108 // Load URL relationships for related artists, recordings and labels of the release.
115109 // These will be used to skip suggestions to seed external links which already exist.
110+ // For recordings it also includes ISRCs to determine if there are new ones to submit.
116111 const mbArtistBrowseResult = await MB . get ( 'artist' , { release : releaseMbid , inc : 'url-rels' , limit : 100 } ) ;
117112 mbArtists = mbArtistBrowseResult . artists ;
118- const mbRecordingBrowseResult = await MB . get ( 'recording' , { release : releaseMbid , inc : 'url-rels' , limit : 100 } ) ;
113+ const mbRecordingBrowseResult = await MB . get ( 'recording' , {
114+ release : releaseMbid ,
115+ inc : 'url-rels+isrcs' ,
116+ limit : 100 ,
117+ } ) ;
119118 mbRecordings = mbRecordingBrowseResult . recordings ;
120119 // Labels often have no external links which could be linked, save pointless API call.
121120 if ( release . labels ?. some ( ( label ) => label . externalIds ?. length ) ) {
@@ -185,14 +184,12 @@ export default defineRoute(async (req, ctx) => {
185184 </ p >
186185 </ div >
187186 ) }
188- { release && isrcProvider && (
189- < div class = 'action' >
190- < SpriteIcon name = 'disc' />
191- < p >
192- < MagicISRC release = { release } targetMbid = { releaseMbid ! } />
193- : Submit ISRCs from < a href = { isrcProvider . url } > { isrcProvider . name } </ a > to MusicBrainz
194- </ p >
195- </ div >
187+ { release && (
188+ < ISRCSubmission
189+ release = { release }
190+ targetMbid = { releaseMbid }
191+ recordingsCache = { mbRecordings }
192+ />
196193 ) }
197194 { releaseUrl && (
198195 < LinkWithMusicBrainz
0 commit comments