diff --git a/server/api/jellyfin.ts b/server/api/jellyfin.ts index 1b2ba13f..bd0e2807 100644 --- a/server/api/jellyfin.ts +++ b/server/api/jellyfin.ts @@ -113,6 +113,7 @@ export interface JellyfinLibraryItemExtended extends JellyfinLibraryItem { Tvdb?: string; AniDB?: string; MusicBrainzReleaseGroup: string | undefined; + MusicBrainzAlbum?: string; MusicBrainzArtistId?: string; }; MediaSources?: JellyfinMediaSource[]; diff --git a/server/lib/scanners/jellyfin/index.ts b/server/lib/scanners/jellyfin/index.ts index ffd0ccbf..0a8c1883 100644 --- a/server/lib/scanners/jellyfin/index.ts +++ b/server/lib/scanners/jellyfin/index.ts @@ -2,6 +2,7 @@ import animeList from '@server/api/animelist'; import type { JellyfinLibraryItem } from '@server/api/jellyfin'; import JellyfinAPI from '@server/api/jellyfin'; import { getMetadataProvider } from '@server/api/metadata'; +import MusicBrainz from '@server/api/musicbrainz'; import TheMovieDb from '@server/api/themoviedb'; import { ANIME_KEYWORD_ID } from '@server/api/themoviedb/constants'; import type { @@ -693,6 +694,7 @@ class JellyfinScanner { private async processMusic(jellyfinitem: JellyfinLibraryItem) { const mediaRepository = getRepository(Media); + const musicBrainz = new MusicBrainz(); try { const metadata = await this.jfClient.getItemData(jellyfinitem.Id); @@ -706,10 +708,25 @@ class JellyfinScanner { return; } - // Use MusicBrainzReleaseGroup as the foreign ID newMedia.mbId = metadata.ProviderIds?.MusicBrainzReleaseGroup; - // Only proceed if we have a valid ID + if (!newMedia.mbId && metadata.ProviderIds?.MusicBrainzAlbum) { + try { + const releaseGroupId = await musicBrainz.getReleaseGroup({ + releaseId: metadata.ProviderIds.MusicBrainzAlbum, + }); + if (releaseGroupId) { + newMedia.mbId = releaseGroupId; + } + } catch (e) { + this.log('Failed to get release group ID', 'error', { + title: metadata.Name, + releaseId: metadata.ProviderIds.MusicBrainzAlbum, + error: e.message, + }); + } + } + if (!newMedia.mbId) { this.log( 'No MusicBrainz Album ID found for this title. Skipping.',