| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 | using System.Collections.Generic;using System.Linq;using MediaBrowser.Controller.Configuration;using MediaBrowser.Controller.Dto;using MediaBrowser.Controller.Entities;using MediaBrowser.Controller.Library;using MediaBrowser.Controller.Net;using MediaBrowser.Controller.Playlists;using MediaBrowser.Model.Dto;using MediaBrowser.Model.Querying;using MediaBrowser.Model.Services;using Microsoft.Extensions.Logging;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("/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;        private readonly IAuthorizationContext _authContext;        public InstantMixService(            ILogger<InstantMixService> logger,            IServerConfigurationManager serverConfigurationManager,            IHttpResultFactory httpResultFactory,            IUserManager userManager,            IDtoService dtoService,            IMusicManager musicManager,            ILibraryManager libraryManager,            IAuthorizationContext authContext)            : base(logger, serverConfigurationManager, httpResultFactory)        {            _userManager = userManager;            _dtoService = dtoService;            _musicManager = musicManager;            _libraryManager = libraryManager;            _authContext = authContext;        }        public object Get(GetInstantMixFromItem request)        {            var item = _libraryManager.GetItemById(request.Id);            var user = _userManager.GetUserById(request.UserId);            var dtoOptions = GetDtoOptions(_authContext, request);            var items = _musicManager.GetInstantMixFromItem(item, user, dtoOptions);            return GetResult(items, user, request, dtoOptions);        }        public object Get(GetInstantMixFromArtistId request)        {            var item = _libraryManager.GetItemById(request.Id);            var user = _userManager.GetUserById(request.UserId);            var dtoOptions = GetDtoOptions(_authContext, request);            var items = _musicManager.GetInstantMixFromItem(item, user, dtoOptions);            return GetResult(items, user, request, dtoOptions);        }        public object Get(GetInstantMixFromMusicGenreId request)        {            var item = _libraryManager.GetItemById(request.Id);            var user = _userManager.GetUserById(request.UserId);            var dtoOptions = GetDtoOptions(_authContext, request);            var items = _musicManager.GetInstantMixFromItem(item, user, dtoOptions);            return GetResult(items, user, request, dtoOptions);        }        public object Get(GetInstantMixFromSong request)        {            var item = _libraryManager.GetItemById(request.Id);            var user = _userManager.GetUserById(request.UserId);            var dtoOptions = GetDtoOptions(_authContext, request);            var items = _musicManager.GetInstantMixFromItem(item, user, dtoOptions);            return GetResult(items, user, request, dtoOptions);        }        public object Get(GetInstantMixFromAlbum request)        {            var album = _libraryManager.GetItemById(request.Id);            var user = _userManager.GetUserById(request.UserId);            var dtoOptions = GetDtoOptions(_authContext, request);            var items = _musicManager.GetInstantMixFromItem(album, user, dtoOptions);            return GetResult(items, user, request, dtoOptions);        }        public object Get(GetInstantMixFromPlaylist request)        {            var playlist = (Playlist)_libraryManager.GetItemById(request.Id);            var user = _userManager.GetUserById(request.UserId);            var dtoOptions = GetDtoOptions(_authContext, request);            var items = _musicManager.GetInstantMixFromItem(playlist, user, dtoOptions);            return GetResult(items, user, request, dtoOptions);        }        public object Get(GetInstantMixFromMusicGenre request)        {            var user = _userManager.GetUserById(request.UserId);            var dtoOptions = GetDtoOptions(_authContext, request);            var items = _musicManager.GetInstantMixFromGenres(new[] { request.Name }, user, dtoOptions);            return GetResult(items, user, request, dtoOptions);        }        private object GetResult(List<BaseItem> items, User user, BaseGetSimilarItems request, DtoOptions dtoOptions)        {            var list = items;            var result = new QueryResult<BaseItemDto>            {                TotalRecordCount = list.Count            };            if (request.Limit.HasValue)            {                list = list.Take(request.Limit.Value).ToList();            }            var returnList = _dtoService.GetBaseItemDtos(list, dtoOptions, user);            result.Items = returnList;            return result;        }    }}
 |