aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Api/Music
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Api/Music')
-rw-r--r--MediaBrowser.Api/Music/AlbumsService.cs50
-rw-r--r--MediaBrowser.Api/Music/InstantMixService.cs19
2 files changed, 68 insertions, 1 deletions
diff --git a/MediaBrowser.Api/Music/AlbumsService.cs b/MediaBrowser.Api/Music/AlbumsService.cs
index ea87c3ad3..548598d42 100644
--- a/MediaBrowser.Api/Music/AlbumsService.cs
+++ b/MediaBrowser.Api/Music/AlbumsService.cs
@@ -4,6 +4,7 @@ using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Net;
using MediaBrowser.Controller.Persistence;
+using MediaBrowser.Model.Querying;
using ServiceStack;
using System;
using System.Collections.Generic;
@@ -16,6 +17,11 @@ namespace MediaBrowser.Api.Music
{
}
+ [Route("/Artists/{Id}/Similar", "GET", Summary = "Finds albums similar to a given album.")]
+ public class GetSimilarArtists : BaseGetSimilarItemsFromItem
+ {
+ }
+
[Authenticated]
public class AlbumsService : BaseApiService
{
@@ -44,6 +50,17 @@ namespace MediaBrowser.Api.Music
_dtoService = dtoService;
}
+ public object Get(GetSimilarArtists request)
+ {
+ var result = GetSimilarItemsResult(
+
+ request,
+
+ SimilarItemsHelper.GetSimiliarityScore);
+
+ return ToOptimizedSerializedResultUsingCache(result);
+ }
+
/// <summary>
/// Gets the specified request.
/// </summary>
@@ -65,6 +82,39 @@ namespace MediaBrowser.Api.Music
return ToOptimizedSerializedResultUsingCache(result);
}
+ private ItemsResult GetSimilarItemsResult(BaseGetSimilarItemsFromItem request, Func<BaseItem, List<PersonInfo>, List<PersonInfo>, BaseItem, int> getSimilarityScore)
+ {
+ var user = !string.IsNullOrWhiteSpace(request.UserId) ? _userManager.GetUserById(request.UserId) : null;
+
+ var item = string.IsNullOrEmpty(request.Id) ?
+ (!string.IsNullOrWhiteSpace(request.UserId) ? user.RootFolder :
+ _libraryManager.RootFolder) : _libraryManager.GetItemById(request.Id);
+
+ var inputItems = _libraryManager.GetArtists(user.RootFolder.GetRecursiveChildren(user, i => i is IHasArtist).OfType<IHasArtist>());
+
+ var list = inputItems.ToList();
+
+ var items = SimilarItemsHelper.GetSimilaritems(item, _libraryManager, list, getSimilarityScore).ToList();
+
+ IEnumerable<BaseItem> returnItems = items;
+
+ if (request.Limit.HasValue)
+ {
+ returnItems = returnItems.Take(request.Limit.Value);
+ }
+
+ var dtoOptions = GetDtoOptions(request);
+
+ var result = new ItemsResult
+ {
+ Items = _dtoService.GetBaseItemDtos(returnItems, dtoOptions, user).ToArray(),
+
+ TotalRecordCount = items.Count
+ };
+
+ return result;
+ }
+
/// <summary>
/// Gets the album similarity score.
/// </summary>
diff --git a/MediaBrowser.Api/Music/InstantMixService.cs b/MediaBrowser.Api/Music/InstantMixService.cs
index 506b7bc3a..d2a4aa60c 100644
--- a/MediaBrowser.Api/Music/InstantMixService.cs
+++ b/MediaBrowser.Api/Music/InstantMixService.cs
@@ -54,6 +54,11 @@ namespace MediaBrowser.Api.Music
public string Id { get; set; }
}
+ [Route("/Items/{Id}/InstantMix", "GET", Summary = "Creates an instant playlist based on a given item")]
+ public class GetInstantMixFromItem : BaseGetSimilarItemsFromItem
+ {
+ }
+
[Authenticated]
public class InstantMixService : BaseApiService
{
@@ -71,6 +76,17 @@ namespace MediaBrowser.Api.Music
_libraryManager = libraryManager;
}
+ public object Get(GetInstantMixFromItem request)
+ {
+ var item = _libraryManager.GetItemById(request.Id);
+
+ var user = _userManager.GetUserById(request.UserId);
+
+ var items = _musicManager.GetInstantMixFromItem(item, user);
+
+ return GetResult(items, user, request);
+ }
+
public object Get(GetInstantMixFromArtistId request)
{
var item = _libraryManager.GetItemById(request.Id);
@@ -138,8 +154,9 @@ namespace MediaBrowser.Api.Music
public object Get(GetInstantMixFromArtist request)
{
var user = _userManager.GetUserById(request.UserId);
+ var artist = _libraryManager.GetArtist(request.Name);
- var items = _musicManager.GetInstantMixFromArtist(request.Name, user);
+ var items = _musicManager.GetInstantMixFromArtist(artist, user);
return GetResult(items, user, request);
}