@ -347,7 +347,8 @@ namespace MediaBrowser.Providers.MediaInfo
| | track . AdditionalFields . TryGetValue ( "MusicBrainz Artist Id" , out musicBrainzArtistTag ) )
& & ! string . IsNullOrEmpty ( musicBrainzArtistTag ) )
{
audio . TrySetProviderId ( MetadataProvider . MusicBrainzArtist , musicBrainzArtistTag ) ;
var id = GetFirstMusicBrainzId ( musicBrainzArtistTag , libraryOptions . UseCustomTagDelimiters , libraryOptions . GetCustomTagDelimiters ( ) , libraryOptions . DelimiterWhitelist ) ;
audio . TrySetProviderId ( MetadataProvider . MusicBrainzArtist , id ) ;
}
}
@ -357,7 +358,8 @@ namespace MediaBrowser.Providers.MediaInfo
| | track . AdditionalFields . TryGetValue ( "MusicBrainz Album Artist Id" , out musicBrainzReleaseArtistIdTag ) )
& & ! string . IsNullOrEmpty ( musicBrainzReleaseArtistIdTag ) )
{
audio . TrySetProviderId ( MetadataProvider . MusicBrainzAlbumArtist , musicBrainzReleaseArtistIdTag ) ;
var id = GetFirstMusicBrainzId ( musicBrainzReleaseArtistIdTag , libraryOptions . UseCustomTagDelimiters , libraryOptions . GetCustomTagDelimiters ( ) , libraryOptions . DelimiterWhitelist ) ;
audio . TrySetProviderId ( MetadataProvider . MusicBrainzAlbumArtist , id ) ;
}
}
@ -367,7 +369,8 @@ namespace MediaBrowser.Providers.MediaInfo
| | track . AdditionalFields . TryGetValue ( "MusicBrainz Album Id" , out musicBrainzReleaseIdTag ) )
& & ! string . IsNullOrEmpty ( musicBrainzReleaseIdTag ) )
{
audio . TrySetProviderId ( MetadataProvider . MusicBrainzAlbum , musicBrainzReleaseIdTag ) ;
var id = GetFirstMusicBrainzId ( musicBrainzReleaseIdTag , libraryOptions . UseCustomTagDelimiters , libraryOptions . GetCustomTagDelimiters ( ) , libraryOptions . DelimiterWhitelist ) ;
audio . TrySetProviderId ( MetadataProvider . MusicBrainzAlbum , id ) ;
}
}
@ -377,7 +380,8 @@ namespace MediaBrowser.Providers.MediaInfo
| | track . AdditionalFields . TryGetValue ( "MusicBrainz Release Group Id" , out musicBrainzReleaseGroupIdTag ) )
& & ! string . IsNullOrEmpty ( musicBrainzReleaseGroupIdTag ) )
{
audio . TrySetProviderId ( MetadataProvider . MusicBrainzReleaseGroup , musicBrainzReleaseGroupIdTag ) ;
var id = GetFirstMusicBrainzId ( musicBrainzReleaseGroupIdTag , libraryOptions . UseCustomTagDelimiters , libraryOptions . GetCustomTagDelimiters ( ) , libraryOptions . DelimiterWhitelist ) ;
audio . TrySetProviderId ( MetadataProvider . MusicBrainzReleaseGroup , id ) ;
}
}
@ -387,7 +391,8 @@ namespace MediaBrowser.Providers.MediaInfo
| | track . AdditionalFields . TryGetValue ( "MusicBrainz Release Track Id" , out trackMbId ) )
& & ! string . IsNullOrEmpty ( trackMbId ) )
{
audio . TrySetProviderId ( MetadataProvider . MusicBrainzTrack , trackMbId ) ;
var id = GetFirstMusicBrainzId ( trackMbId , libraryOptions . UseCustomTagDelimiters , libraryOptions . GetCustomTagDelimiters ( ) , libraryOptions . DelimiterWhitelist ) ;
audio . TrySetProviderId ( MetadataProvider . MusicBrainzTrack , id ) ;
}
}
@ -441,5 +446,18 @@ namespace MediaBrowser.Providers.MediaInfo
return items ;
}
// MusicBrainz IDs are multi-value tags, so we need to split them
// However, our current provider can only have one single ID, which means we need to pick the first one
private string? GetFirstMusicBrainzId ( string tag , bool useCustomTagDelimiters , char [ ] tagDelimiters , string [ ] whitelist )
{
var val = tag . Split ( InternalValueSeparator ) . FirstOrDefault ( ) ;
if ( val is not null & & useCustomTagDelimiters )
{
val = SplitWithCustomDelimiter ( val , tagDelimiters , whitelist ) . FirstOrDefault ( ) ;
}
return val ;
}
}
}