diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-10-01 14:31:32 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-10-01 14:31:32 -0400 |
| commit | dcca3f02366d5e54fb6eefeb0ccc7c5261e49e48 (patch) | |
| tree | 62c425cdc289cedbbe00c7e494c325384aa309fb | |
| parent | 3d40c5ba36c5e98954c2bc6073b4cf35cd42711a (diff) | |
update music artist when saving artist
4 files changed, 48 insertions, 53 deletions
diff --git a/MediaBrowser.Api/ItemUpdateService.cs b/MediaBrowser.Api/ItemUpdateService.cs index 18e02473f..5d47d0813 100644 --- a/MediaBrowser.Api/ItemUpdateService.cs +++ b/MediaBrowser.Api/ItemUpdateService.cs @@ -126,6 +126,15 @@ namespace MediaBrowser.Api UpdateItem(request, item); await _libraryManager.UpdateItem(item, ItemUpdateType.MetadataEdit, CancellationToken.None).ConfigureAwait(false); + + var musicArtist = Artist.FindMusicArtist(item, _libraryManager); + + if (musicArtist != null) + { + UpdateItem(request, musicArtist); + + await _libraryManager.UpdateItem(musicArtist, ItemUpdateType.MetadataEdit, CancellationToken.None).ConfigureAwait(false); + } } public void Post(UpdateStudio request) diff --git a/MediaBrowser.Controller/Entities/Audio/Artist.cs b/MediaBrowser.Controller/Entities/Audio/Artist.cs index e0d80527c..07bb68b95 100644 --- a/MediaBrowser.Controller/Entities/Audio/Artist.cs +++ b/MediaBrowser.Controller/Entities/Audio/Artist.cs @@ -1,7 +1,11 @@ -using System.Runtime.Serialization; +using System.Globalization; +using System.Linq; +using MediaBrowser.Controller.Library; using MediaBrowser.Model.Dto; using System; using System.Collections.Generic; +using System.Runtime.Serialization; +using MediaBrowser.Model.Entities; namespace MediaBrowser.Controller.Entities.Audio { @@ -28,5 +32,37 @@ namespace MediaBrowser.Controller.Entities.Audio [IgnoreDataMember] public Dictionary<Guid, ItemByNameCounts> UserItemCounts { get; set; } + + /// <summary> + /// Finds the music artist. + /// </summary> + /// <param name="artist">The artist.</param> + /// <param name="libraryManager">The library manager.</param> + /// <returns>MusicArtist.</returns> + public static MusicArtist FindMusicArtist(Artist artist, ILibraryManager libraryManager) + { + return FindMusicArtist(artist, libraryManager.RootFolder.RecursiveChildren.OfType<MusicArtist>()); + } + + /// <summary> + /// Finds the music artist. + /// </summary> + /// <param name="artist">The artist.</param> + /// <param name="allMusicArtists">All music artists.</param> + /// <returns>MusicArtist.</returns> + public static MusicArtist FindMusicArtist(Artist artist, IEnumerable<MusicArtist> allMusicArtists) + { + var musicBrainzId = artist.GetProviderId(MetadataProviders.Musicbrainz); + + return allMusicArtists.FirstOrDefault(i => + { + if (!string.IsNullOrWhiteSpace(musicBrainzId) && string.Equals(musicBrainzId, i.GetProviderId(MetadataProviders.Musicbrainz), StringComparison.OrdinalIgnoreCase)) + { + return true; + } + + return string.Compare(i.Name, artist.Name, CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreCase | CompareOptions.IgnoreSymbols) == 0; + }); + } } } diff --git a/MediaBrowser.Providers/Music/LastfmArtistByNameProvider.cs b/MediaBrowser.Providers/Music/LastfmArtistByNameProvider.cs index 5bc9debd3..26ac68c3d 100644 --- a/MediaBrowser.Providers/Music/LastfmArtistByNameProvider.cs +++ b/MediaBrowser.Providers/Music/LastfmArtistByNameProvider.cs @@ -3,11 +3,8 @@ using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Library; -using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Serialization; -using System; -using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -77,7 +74,7 @@ namespace MediaBrowser.Providers.Music var artist = (Artist)item; // See if we can avoid an http request by finding the matching MusicArtist entity - var musicArtist = FindMusicArtist(artist, LibraryManager); + var musicArtist = Artist.FindMusicArtist(artist, LibraryManager); if (musicArtist != null && !force) { @@ -88,29 +85,5 @@ namespace MediaBrowser.Providers.Music await base.FetchLastfmData(item, musicBrainzId, force, cancellationToken).ConfigureAwait(false); } } - - - /// <summary> - /// Finds the music artist. - /// </summary> - /// <param name="artist">The artist.</param> - /// <param name="libraryManager">The library manager.</param> - /// <returns>MusicArtist.</returns> - private static MusicArtist FindMusicArtist(Artist artist, ILibraryManager libraryManager) - { - var musicBrainzId = artist.GetProviderId(MetadataProviders.Musicbrainz); - - return libraryManager.RootFolder.RecursiveChildren - .OfType<MusicArtist>() - .FirstOrDefault(i => - { - if (!string.IsNullOrWhiteSpace(musicBrainzId) && string.Equals(musicBrainzId, i.GetProviderId(MetadataProviders.Musicbrainz), StringComparison.OrdinalIgnoreCase)) - { - return true; - } - - return false; - }); - } } } diff --git a/MediaBrowser.Server.Implementations/Library/Validators/ArtistsValidator.cs b/MediaBrowser.Server.Implementations/Library/Validators/ArtistsValidator.cs index 903fe86be..7387b9166 100644 --- a/MediaBrowser.Server.Implementations/Library/Validators/ArtistsValidator.cs +++ b/MediaBrowser.Server.Implementations/Library/Validators/ArtistsValidator.cs @@ -6,9 +6,7 @@ using MediaBrowser.Model.Dto; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; using System; -using System.Collections.Concurrent; using System.Collections.Generic; -using System.Globalization; using System.IO; using System.Linq; using System.Threading; @@ -85,7 +83,7 @@ namespace MediaBrowser.Server.Implementations.Library.Validators artist.ValidateImages(); artist.ValidateBackdrops(); - var musicArtist = FindMusicArtist(artist, allMusicArtists); + var musicArtist = Artist.FindMusicArtist(artist, allMusicArtists); if (musicArtist != null) { @@ -235,26 +233,5 @@ namespace MediaBrowser.Server.Implementations.Library.Validators return returnArtists; } - - /// <summary> - /// Finds the music artist. - /// </summary> - /// <param name="artist">The artist.</param> - /// <param name="allMusicArtists">All music artists.</param> - /// <returns>MusicArtist.</returns> - private static MusicArtist FindMusicArtist(Artist artist, IEnumerable<MusicArtist> allMusicArtists) - { - var musicBrainzId = artist.GetProviderId(MetadataProviders.Musicbrainz); - - return allMusicArtists.FirstOrDefault(i => - { - if (!string.IsNullOrWhiteSpace(musicBrainzId) && string.Equals(musicBrainzId, i.GetProviderId(MetadataProviders.Musicbrainz), StringComparison.OrdinalIgnoreCase)) - { - return true; - } - - return string.Compare(i.Name, artist.Name, CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreCase | CompareOptions.IgnoreSymbols) == 0; - }); - } } } |
