diff --git a/src/backend/common/transforms/MusicbrainzTransformer.ts b/src/backend/common/transforms/MusicbrainzTransformer.ts index bf500347..8645e321 100644 --- a/src/backend/common/transforms/MusicbrainzTransformer.ts +++ b/src/backend/common/transforms/MusicbrainzTransformer.ts @@ -494,7 +494,13 @@ export default class MusicbrainzTransformer extends AtomicPartsTransformer 0 ? 'mbidartist' : 'artist'); diff --git a/src/backend/common/vendor/musicbrainz/MusicbrainzApiClient.ts b/src/backend/common/vendor/musicbrainz/MusicbrainzApiClient.ts index 3204b7ed..dba98514 100644 --- a/src/backend/common/vendor/musicbrainz/MusicbrainzApiClient.ts +++ b/src/backend/common/vendor/musicbrainz/MusicbrainzApiClient.ts @@ -36,7 +36,7 @@ export interface MusicbrainzApiClientConfig { apis: MusicbrainzApiConfigData[] } -export type UsingTypes = 'artist' | 'album' | 'title' | 'isrc' | 'mbidrecording' | 'mbidrelease' | 'mbidartist'; +export type UsingTypes = 'artist' | 'album' | 'title' | 'isrc' | 'mbidrecording' | 'mbidrelease' | 'mbidartist' | 'mbidtrack'; export interface SearchOptions { escapeCharacters?: boolean @@ -216,6 +216,9 @@ export class MusicbrainzApiClient extends AbstractApiClient { if(play.data?.meta?.brainz?.recording !== undefined && using.includes('mbidrecording')) { query.recording_mbid = play.data.meta.brainz.recording } + if(play.data?.meta?.brainz?.track !== undefined && using.includes('mbidtrack')) { + query.track_mbid = play.data.meta.brainz.track + } if(play.data?.meta?.brainz?.album !== undefined && using.includes('mbidrelease')) { query.release_mbid = play.data.meta.brainz.album } @@ -287,6 +290,12 @@ export class MusicbrainzApiClient extends AbstractApiClient { } q += `rid:"${query.recording_mbid}"` } + if(query.track_mbid !== undefined) { + if(q !== '') { + q += ' AND '; + } + q += `tid:"${query.track_mbid}"` + } if(query.artist_mbids !== undefined) { q += `(arid:(${query.artist_mbids.map(x => `"${x}"`).join(' AND ')}) OR arid:(${query.artist_mbids.map(x => `"${x}"`).join(' OR ')}))` } diff --git a/src/backend/sources/PlexApiSource.ts b/src/backend/sources/PlexApiSource.ts index 700b079d..35e56d99 100644 --- a/src/backend/sources/PlexApiSource.ts +++ b/src/backend/sources/PlexApiSource.ts @@ -418,7 +418,7 @@ export default class PlexApiSource extends MemoryPositionalSource { const prevBrainzMeta = sessionData[0].play.data.meta.brainz ?? {}; sessionData[0].play.data.meta.brainz = { ...prevBrainzMeta, - recording: trackMbId, + track: trackMbId, album: albumMbId, // Plex doesn't track MBIDs for track artists, so we use the // album artist MBID instead. diff --git a/src/core/Atomic.ts b/src/core/Atomic.ts index f172ce93..6a5c0ac8 100644 --- a/src/core/Atomic.ts +++ b/src/core/Atomic.ts @@ -133,6 +133,12 @@ export interface BrainzMeta { /** Position of track within Release */ trackNumber?: number + + /** Track MBID (tid), not visible to end users and is only relevant in the context of a Release + * + * Specifies the track on a specific Release. Not the same as the Recording MBID. + */ + track?: string } export interface SpotifyMeta {