aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--MediaBrowser.Api/UserLibrary/ItemsService.cs10
-rw-r--r--MediaBrowser.Controller/Entities/Audio/Audio.cs2
-rw-r--r--MediaBrowser.Controller/Entities/Audio/IHasAlbumArtist.cs8
-rw-r--r--MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs13
-rw-r--r--MediaBrowser.Controller/MediaBrowser.Controller.csproj1
-rw-r--r--MediaBrowser.Model/Querying/ItemSortBy.cs1
-rw-r--r--MediaBrowser.Server.Implementations/Dto/DtoService.cs10
-rw-r--r--MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj1
-rw-r--r--MediaBrowser.Server.Implementations/Sorting/AlbumArtistComparer.cs26
-rw-r--r--MediaBrowser.Server.Implementations/Sorting/NameComparer.cs33
10 files changed, 77 insertions, 28 deletions
diff --git a/MediaBrowser.Api/UserLibrary/ItemsService.cs b/MediaBrowser.Api/UserLibrary/ItemsService.cs
index 288b67057..c9218c6b5 100644
--- a/MediaBrowser.Api/UserLibrary/ItemsService.cs
+++ b/MediaBrowser.Api/UserLibrary/ItemsService.cs
@@ -126,6 +126,9 @@ namespace MediaBrowser.Api.UserLibrary
[ApiMember(Name = "NameStartsWithOrGreater", Description = "Optional filter by items whose name is sorted equally or greater than a given input string.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]
public string NameStartsWithOrGreater { get; set; }
+ [ApiMember(Name = "AlbumArtistStartsWithOrGreater", Description = "Optional filter by items whose album artist is sorted equally or greater than a given input string.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]
+ public string AlbumArtistStartsWithOrGreater { get; set; }
+
/// <summary>
/// Gets or sets the air days.
/// </summary>
@@ -576,6 +579,13 @@ namespace MediaBrowser.Api.UserLibrary
items = items.Where(i => string.Compare(request.NameStartsWithOrGreater, i.SortName, StringComparison.CurrentCultureIgnoreCase) < 1);
}
+ if (!string.IsNullOrEmpty(request.AlbumArtistStartsWithOrGreater))
+ {
+ items = items.OfType<IHasAlbumArtist>()
+ .Where(i => string.Compare(request.AlbumArtistStartsWithOrGreater, i.AlbumArtist, StringComparison.CurrentCultureIgnoreCase) < 1)
+ .Cast<BaseItem>();
+ }
+
// Filter by Series Status
if (!string.IsNullOrEmpty(request.SeriesStatus))
{
diff --git a/MediaBrowser.Controller/Entities/Audio/Audio.cs b/MediaBrowser.Controller/Entities/Audio/Audio.cs
index 7c226864b..ff632c981 100644
--- a/MediaBrowser.Controller/Entities/Audio/Audio.cs
+++ b/MediaBrowser.Controller/Entities/Audio/Audio.cs
@@ -9,7 +9,7 @@ namespace MediaBrowser.Controller.Entities.Audio
/// <summary>
/// Class Audio
/// </summary>
- public class Audio : BaseItem, IHasMediaStreams
+ public class Audio : BaseItem, IHasMediaStreams, IHasAlbumArtist
{
public Audio()
{
diff --git a/MediaBrowser.Controller/Entities/Audio/IHasAlbumArtist.cs b/MediaBrowser.Controller/Entities/Audio/IHasAlbumArtist.cs
new file mode 100644
index 000000000..d9dac077f
--- /dev/null
+++ b/MediaBrowser.Controller/Entities/Audio/IHasAlbumArtist.cs
@@ -0,0 +1,8 @@
+
+namespace MediaBrowser.Controller.Entities.Audio
+{
+ public interface IHasAlbumArtist
+ {
+ string AlbumArtist { get; }
+ }
+}
diff --git a/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs b/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs
index 7bfbbaf19..834fc6943 100644
--- a/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs
+++ b/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs
@@ -6,7 +6,7 @@ namespace MediaBrowser.Controller.Entities.Audio
/// <summary>
/// Class MusicAlbum
/// </summary>
- public class MusicAlbum : Folder
+ public class MusicAlbum : Folder, IHasAlbumArtist
{
public string LastFmImageUrl { get; set; }
@@ -62,6 +62,17 @@ namespace MediaBrowser.Controller.Entities.Audio
{
return RecursiveChildren.OfType<Audio>().Any(i => i.HasArtist(artist));
}
+
+ public string AlbumArtist
+ {
+ get
+ {
+ return RecursiveChildren
+ .OfType<Audio>()
+ .Select(i => i.AlbumArtist)
+ .FirstOrDefault(i => !string.IsNullOrEmpty(i));
+ }
+ }
}
public class MusicAlbumDisc : Folder
diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj
index 2c33cceb1..3546b8b04 100644
--- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj
+++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj
@@ -73,6 +73,7 @@
</Compile>
<Compile Include="Dto\IDtoService.cs" />
<Compile Include="Entities\AdultVideo.cs" />
+ <Compile Include="Entities\Audio\IHasAlbumArtist.cs" />
<Compile Include="Entities\Book.cs" />
<Compile Include="Configuration\IServerConfigurationManager.cs" />
<Compile Include="Entities\Audio\MusicGenre.cs" />
diff --git a/MediaBrowser.Model/Querying/ItemSortBy.cs b/MediaBrowser.Model/Querying/ItemSortBy.cs
index edf94197d..de0bd72e1 100644
--- a/MediaBrowser.Model/Querying/ItemSortBy.cs
+++ b/MediaBrowser.Model/Querying/ItemSortBy.cs
@@ -46,6 +46,7 @@ namespace MediaBrowser.Model.Querying
/// The sort name
/// </summary>
public const string SortName = "SortName";
+ public const string Name = "Name";
/// <summary>
/// The random
/// </summary>
diff --git a/MediaBrowser.Server.Implementations/Dto/DtoService.cs b/MediaBrowser.Server.Implementations/Dto/DtoService.cs
index 4ad2479e6..46dfd0ba3 100644
--- a/MediaBrowser.Server.Implementations/Dto/DtoService.cs
+++ b/MediaBrowser.Server.Implementations/Dto/DtoService.cs
@@ -892,7 +892,6 @@ namespace MediaBrowser.Server.Implementations.Dto
if (audio != null)
{
dto.Album = audio.Album;
- dto.AlbumArtist = audio.AlbumArtist;
dto.Artists = audio.Artists.ToArray();
var albumParent = audio.FindParent<MusicAlbum>();
@@ -916,14 +915,19 @@ namespace MediaBrowser.Server.Implementations.Dto
{
var songs = album.RecursiveChildren.OfType<Audio>().ToList();
- dto.AlbumArtist = songs.Select(i => i.AlbumArtist).FirstOrDefault(i => !string.IsNullOrEmpty(i));
-
dto.Artists =
songs.SelectMany(i => i.Artists)
.Distinct(StringComparer.OrdinalIgnoreCase)
.ToArray();
}
+ var hasAlbumArtist = item as IHasAlbumArtist;
+
+ if (hasAlbumArtist != null)
+ {
+ dto.AlbumArtist = hasAlbumArtist.AlbumArtist;
+ }
+
// Add video info
var video = item as Video;
if (video != null)
diff --git a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj
index 7bae2bd85..0f26dcdd1 100644
--- a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj
+++ b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj
@@ -178,6 +178,7 @@
<Compile Include="Sorting\DatePlayedComparer.cs" />
<Compile Include="Sorting\IsFolderComparer.cs" />
<Compile Include="Sorting\IsUnplayedComparer.cs" />
+ <Compile Include="Sorting\NameComparer.cs" />
<Compile Include="Sorting\OfficialRatingComparer.cs" />
<Compile Include="Sorting\PlayCountComparer.cs" />
<Compile Include="Sorting\PremiereDateComparer.cs" />
diff --git a/MediaBrowser.Server.Implementations/Sorting/AlbumArtistComparer.cs b/MediaBrowser.Server.Implementations/Sorting/AlbumArtistComparer.cs
index 583280f0f..df8003dec 100644
--- a/MediaBrowser.Server.Implementations/Sorting/AlbumArtistComparer.cs
+++ b/MediaBrowser.Server.Implementations/Sorting/AlbumArtistComparer.cs
@@ -1,5 +1,4 @@
-using System.Linq;
-using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Sorting;
using MediaBrowser.Model.Querying;
@@ -30,28 +29,9 @@ namespace MediaBrowser.Server.Implementations.Sorting
/// <returns>System.String.</returns>
private string GetValue(BaseItem x)
{
- var audio = x as Audio;
+ var audio = x as IHasAlbumArtist;
- if (audio != null)
- {
- return audio.AlbumArtist;
- }
-
- var album = x as MusicAlbum;
-
- if (album != null)
- {
- var song = album.RecursiveChildren
- .OfType<Audio>()
- .FirstOrDefault(i => !string.IsNullOrEmpty(i.AlbumArtist));
-
- if (song != null)
- {
- return song.AlbumArtist;
- }
- }
-
- return null;
+ return audio != null ? audio.AlbumArtist : null;
}
/// <summary>
diff --git a/MediaBrowser.Server.Implementations/Sorting/NameComparer.cs b/MediaBrowser.Server.Implementations/Sorting/NameComparer.cs
new file mode 100644
index 000000000..49f86c485
--- /dev/null
+++ b/MediaBrowser.Server.Implementations/Sorting/NameComparer.cs
@@ -0,0 +1,33 @@
+using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Sorting;
+using MediaBrowser.Model.Querying;
+using System;
+
+namespace MediaBrowser.Server.Implementations.Sorting
+{
+ /// <summary>
+ /// Class NameComparer
+ /// </summary>
+ public class NameComparer : IBaseItemComparer
+ {
+ /// <summary>
+ /// Compares the specified x.
+ /// </summary>
+ /// <param name="x">The x.</param>
+ /// <param name="y">The y.</param>
+ /// <returns>System.Int32.</returns>
+ public int Compare(BaseItem x, BaseItem y)
+ {
+ return string.Compare(x.Name, y.Name, StringComparison.CurrentCultureIgnoreCase);
+ }
+
+ /// <summary>
+ /// Gets the name.
+ /// </summary>
+ /// <value>The name.</value>
+ public string Name
+ {
+ get { return ItemSortBy.Name; }
+ }
+ }
+}