aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Api
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2013-09-05 15:00:50 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2013-09-05 15:00:50 -0400
commit44b12c0f9fc81dd10d6f655f341d7df28c5f3e20 (patch)
tree520179e21ec80e988e44407b06c2f22f040d9903 /MediaBrowser.Api
parentcbf061d5f62a98a977d192bb0117f6c21be7e808 (diff)
fixes #520 - Support multiple artists per audio track
Diffstat (limited to 'MediaBrowser.Api')
-rw-r--r--MediaBrowser.Api/AlbumsService.cs29
-rw-r--r--MediaBrowser.Api/BaseApiService.cs14
-rw-r--r--MediaBrowser.Api/ItemRefreshService.cs14
-rw-r--r--MediaBrowser.Api/ItemUpdateService.cs2
-rw-r--r--MediaBrowser.Api/SearchService.cs5
-rw-r--r--MediaBrowser.Api/UserLibrary/ArtistsService.cs23
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));
}