diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-09-05 15:00:50 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-09-05 15:00:50 -0400 |
| commit | 44b12c0f9fc81dd10d6f655f341d7df28c5f3e20 (patch) | |
| tree | 520179e21ec80e988e44407b06c2f22f040d9903 /MediaBrowser.Api | |
| parent | cbf061d5f62a98a977d192bb0117f6c21be7e808 (diff) | |
fixes #520 - Support multiple artists per audio track
Diffstat (limited to 'MediaBrowser.Api')
| -rw-r--r-- | MediaBrowser.Api/AlbumsService.cs | 29 | ||||
| -rw-r--r-- | MediaBrowser.Api/BaseApiService.cs | 14 | ||||
| -rw-r--r-- | MediaBrowser.Api/ItemRefreshService.cs | 14 | ||||
| -rw-r--r-- | MediaBrowser.Api/ItemUpdateService.cs | 2 | ||||
| -rw-r--r-- | MediaBrowser.Api/SearchService.cs | 5 | ||||
| -rw-r--r-- | MediaBrowser.Api/UserLibrary/ArtistsService.cs | 23 |
6 files changed, 63 insertions, 24 deletions
diff --git a/MediaBrowser.Api/AlbumsService.cs b/MediaBrowser.Api/AlbumsService.cs index e78a30c4a8..d31bef428c 100644 --- a/MediaBrowser.Api/AlbumsService.cs +++ b/MediaBrowser.Api/AlbumsService.cs @@ -5,6 +5,7 @@ using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Persistence; using ServiceStack.ServiceHost; using System; +using System.Collections.Generic; using System.Linq; namespace MediaBrowser.Api @@ -76,15 +77,35 @@ namespace MediaBrowser.Api var artists1 = album1.RecursiveChildren .OfType<Audio>() - .SelectMany(i => new[] { i.AlbumArtist, i.Artist }) - .Where(i => !string.IsNullOrEmpty(i)) + .SelectMany(i => + { + var list = new List<string>(); + + if (!string.IsNullOrEmpty(i.AlbumArtist)) + { + list.Add(i.AlbumArtist); + } + list.AddRange(i.Artists); + + return list; + }) .Distinct(StringComparer.OrdinalIgnoreCase) .ToList(); var artists2 = album2.RecursiveChildren .OfType<Audio>() - .SelectMany(i => new[] { i.AlbumArtist, i.Artist }) - .Where(i => !string.IsNullOrEmpty(i)) + .SelectMany(i => + { + var list = new List<string>(); + + if (!string.IsNullOrEmpty(i.AlbumArtist)) + { + list.Add(i.AlbumArtist); + } + list.AddRange(i.Artists); + + return list; + }) .Distinct(StringComparer.OrdinalIgnoreCase) .ToDictionary(i => i, StringComparer.OrdinalIgnoreCase); diff --git a/MediaBrowser.Api/BaseApiService.cs b/MediaBrowser.Api/BaseApiService.cs index f4b14d5a84..81c2d43e4f 100644 --- a/MediaBrowser.Api/BaseApiService.cs +++ b/MediaBrowser.Api/BaseApiService.cs @@ -140,8 +140,18 @@ namespace MediaBrowser.Api return libraryManager.RootFolder.RecursiveChildren .OfType<Audio>() - .SelectMany(i => new[] { i.Artist, i.AlbumArtist }) - .Where(i => !string.IsNullOrEmpty(i)) + .SelectMany(i => + { + var list = new List<string>(); + + if (!string.IsNullOrEmpty(i.AlbumArtist)) + { + list.Add(i.AlbumArtist); + } + list.AddRange(i.Artists); + + return list; + }) .Distinct(StringComparer.OrdinalIgnoreCase) .FirstOrDefault(i => { diff --git a/MediaBrowser.Api/ItemRefreshService.cs b/MediaBrowser.Api/ItemRefreshService.cs index e31292e9d5..d71f171a4a 100644 --- a/MediaBrowser.Api/ItemRefreshService.cs +++ b/MediaBrowser.Api/ItemRefreshService.cs @@ -1,5 +1,6 @@ using MediaBrowser.Controller.Dto; using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Library; using ServiceStack.ServiceHost; using System; @@ -111,14 +112,25 @@ namespace MediaBrowser.Api { var item = await GetArtist(request.Name, _libraryManager).ConfigureAwait(false); + var cancellationToken = CancellationToken.None; + try { - await item.RefreshMetadata(CancellationToken.None, forceRefresh: request.Forced).ConfigureAwait(false); + await item.RefreshMetadata(cancellationToken, forceRefresh: request.Forced).ConfigureAwait(false); } catch (Exception ex) { Logger.ErrorException("Error refreshing library", ex); } + + // Refresh albums + var refreshTasks = _libraryManager.RootFolder + .RecursiveChildren + .OfType<MusicAlbum>() + .Where(i => i.HasArtist(item.Name)) + .Select(i => i.ValidateChildren(new Progress<double>(), cancellationToken, true, request.Forced)); + + await Task.WhenAll(refreshTasks).ConfigureAwait(false); } public void Post(RefreshGenre request) diff --git a/MediaBrowser.Api/ItemUpdateService.cs b/MediaBrowser.Api/ItemUpdateService.cs index aff81283d7..df5c32b991 100644 --- a/MediaBrowser.Api/ItemUpdateService.cs +++ b/MediaBrowser.Api/ItemUpdateService.cs @@ -275,7 +275,7 @@ namespace MediaBrowser.Api { song.Album = request.Album; song.AlbumArtist = request.AlbumArtist; - song.Artist = request.Artists[0]; + song.Artists = request.Artists.ToList(); } var musicVideo = item as MusicVideo; diff --git a/MediaBrowser.Api/SearchService.cs b/MediaBrowser.Api/SearchService.cs index 33b7422e6d..2b3f117617 100644 --- a/MediaBrowser.Api/SearchService.cs +++ b/MediaBrowser.Api/SearchService.cs @@ -196,8 +196,7 @@ namespace MediaBrowser.Api result.SongCount = songs.Count; result.Artists = songs - .Select(i => i.Artist) - .Where(i => !string.IsNullOrEmpty(i)) + .SelectMany(i => i.Artists) .Distinct(StringComparer.OrdinalIgnoreCase) .ToArray(); @@ -210,7 +209,7 @@ namespace MediaBrowser.Api { result.Album = song.Album; result.AlbumArtist = song.AlbumArtist; - result.Artists = !string.IsNullOrEmpty(song.Artist) ? new[] { song.Artist } : new string[] { }; + result.Artists = song.Artists.ToArray(); } return result; diff --git a/MediaBrowser.Api/UserLibrary/ArtistsService.cs b/MediaBrowser.Api/UserLibrary/ArtistsService.cs index 3213b2e670..6bc8a2bead 100644 --- a/MediaBrowser.Api/UserLibrary/ArtistsService.cs +++ b/MediaBrowser.Api/UserLibrary/ArtistsService.cs @@ -181,20 +181,17 @@ namespace MediaBrowser.Api.UserLibrary return itemsList .SelectMany(i => + { + var list = new List<string>(); + + if (!string.IsNullOrEmpty(i.AlbumArtist)) { - var list = new List<string>(); - - if (!string.IsNullOrEmpty(i.AlbumArtist)) - { - list.Add(i.AlbumArtist); - } - if (!string.IsNullOrEmpty(i.Artist)) - { - list.Add(i.Artist); - } - - return list; - }) + list.Add(i.AlbumArtist); + } + list.AddRange(i.Artists); + + return list; + }) .Distinct(StringComparer.OrdinalIgnoreCase) .Select(name => new IbnStub<Artist>(name, () => itemsList.Where(i => i.HasArtist(name)), GetEntity)); } |
