| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 | using MediaBrowser.Controller.Dto;using MediaBrowser.Controller.Entities;using MediaBrowser.Controller.Entities.Audio;using MediaBrowser.Controller.Library;using MediaBrowser.Controller.Net;using MediaBrowser.Controller.Playlists;using MediaBrowser.Model.Querying;using ServiceStack;using System.Collections.Generic;using System.Linq;namespace MediaBrowser.Api.Music{    [Route("/Songs/{Id}/InstantMix", "GET", Summary = "Creates an instant playlist based on a given song")]    public class GetInstantMixFromSong : BaseGetSimilarItemsFromItem    {    }    [Route("/Albums/{Id}/InstantMix", "GET", Summary = "Creates an instant playlist based on a given album")]    public class GetInstantMixFromAlbum : BaseGetSimilarItemsFromItem    {    }    [Route("/Playlists/{Id}/InstantMix", "GET", Summary = "Creates an instant playlist based on a given playlist")]    public class GetInstantMixFromPlaylist : BaseGetSimilarItemsFromItem    {    }    [Route("/Artists/{Name}/InstantMix", "GET", Summary = "Creates an instant playlist based on a given artist")]    public class GetInstantMixFromArtist : BaseGetSimilarItems    {        [ApiMember(Name = "Name", Description = "The artist name", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")]        public string Name { get; set; }    }    [Route("/MusicGenres/{Name}/InstantMix", "GET", Summary = "Creates an instant playlist based on a music genre")]    public class GetInstantMixFromMusicGenre : BaseGetSimilarItems    {        [ApiMember(Name = "Name", Description = "The genre name", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")]        public string Name { get; set; }    }    [Route("/Artists/InstantMix", "GET", Summary = "Creates an instant playlist based on a given artist")]    public class GetInstantMixFromArtistId : BaseGetSimilarItems    {        [ApiMember(Name = "Id", Description = "The artist Id", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")]        public string Id { get; set; }    }    [Route("/MusicGenres/InstantMix", "GET", Summary = "Creates an instant playlist based on a music genre")]    public class GetInstantMixFromMusicGenreId : BaseGetSimilarItems    {        [ApiMember(Name = "Id", Description = "The genre Id", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")]        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    {        private readonly IUserManager _userManager;        private readonly IDtoService _dtoService;        private readonly ILibraryManager _libraryManager;        private readonly IMusicManager _musicManager;        public InstantMixService(IUserManager userManager, IDtoService dtoService, IMusicManager musicManager, ILibraryManager libraryManager)        {            _userManager = userManager;            _dtoService = dtoService;            _musicManager = musicManager;            _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);            var user = _userManager.GetUserById(request.UserId);            var items = _musicManager.GetInstantMixFromItem(item, user);            return GetResult(items, user, request);        }        public object Get(GetInstantMixFromMusicGenreId 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(GetInstantMixFromSong 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(GetInstantMixFromAlbum request)        {            var album = _libraryManager.GetItemById(request.Id);            var user = _userManager.GetUserById(request.UserId);            var items = _musicManager.GetInstantMixFromItem(album, user);            return GetResult(items, user, request);        }        public object Get(GetInstantMixFromPlaylist request)        {            var playlist = (Playlist)_libraryManager.GetItemById(request.Id);            var user = _userManager.GetUserById(request.UserId);            var items = _musicManager.GetInstantMixFromItem(playlist, user);            return GetResult(items, user, request);        }        public object Get(GetInstantMixFromMusicGenre request)        {            var user = _userManager.GetUserById(request.UserId);            var items = _musicManager.GetInstantMixFromGenres(new[] { request.Name }, user);            return GetResult(items, user, request);        }        public object Get(GetInstantMixFromArtist request)        {            var user = _userManager.GetUserById(request.UserId);            var artist = _libraryManager.GetArtist(request.Name);            var items = _musicManager.GetInstantMixFromArtist(artist, user);            return GetResult(items, user, request);        }        private object GetResult(IEnumerable<Audio> items, User user, BaseGetSimilarItems request)        {            var list = items.ToList();            var result = new ItemsResult            {                TotalRecordCount = list.Count            };            var dtoOptions = GetDtoOptions(request);            result.Items = _dtoService.GetBaseItemDtos(list.Take(request.Limit ?? list.Count), dtoOptions, user).ToArray();            return ToOptimizedResult(result);        }    }}
 |