using MediaBrowser.Common; using MediaBrowser.Common.Implementations.HttpServer; using MediaBrowser.Common.Kernel; using MediaBrowser.Controller; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; using MediaBrowser.Model.Dto; using ServiceStack.ServiceHost; using System; using System.Collections.Generic; using System.Linq; namespace MediaBrowser.Api.Library { /// /// Class GetPhyscialPaths /// [Route("/Library/PhysicalPaths", "GET")] public class GetPhyscialPaths : IReturn> { } /// /// Class GetItemTypes /// [Route("/Library/ItemTypes", "GET")] public class GetItemTypes : IReturn> { /// /// Gets or sets a value indicating whether this instance has internet provider. /// /// true if this instance has internet provider; otherwise, false. public bool HasInternetProvider { get; set; } } /// /// Class GetPerson /// [Route("/Library/Persons/{Name}", "GET")] public class GetPerson : IReturn { /// /// Gets or sets the name. /// /// The name. public string Name { get; set; } } /// /// Class GetStudio /// [Route("/Library/Studios/{Name}", "GET")] public class GetStudio : IReturn { /// /// Gets or sets the name. /// /// The name. public string Name { get; set; } } /// /// Class GetGenre /// [Route("/Library/Genres/{Name}", "GET")] public class GetGenre : IReturn { /// /// Gets or sets the name. /// /// The name. public string Name { get; set; } } /// /// Class GetYear /// [Route("/Library/Years/{Year}", "GET")] public class GetYear : IReturn { /// /// Gets or sets the year. /// /// The year. public int Year { get; set; } } /// /// Class LibraryService /// public class LibraryService : BaseRestService { /// /// The _app host /// private readonly IApplicationHost _appHost; private readonly ILibraryManager _libraryManager; /// /// Initializes a new instance of the class. /// /// The app host. /// appHost public LibraryService(IApplicationHost appHost, ILibraryManager libraryManager) { if (appHost == null) { throw new ArgumentNullException("appHost"); } _appHost = appHost; _libraryManager = libraryManager; } /// /// Gets the specified request. /// /// The request. /// System.Object. public object Get(GetPerson request) { var item = _libraryManager.GetPerson(request.Name).Result; // Get everything var fields = Enum.GetNames(typeof(ItemFields)).Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)); var result = new DtoBuilder(Logger).GetDtoBaseItem(item, fields.ToList(), _libraryManager).Result; return ToOptimizedResult(result); } /// /// Gets the specified request. /// /// The request. /// System.Object. public object Get(GetGenre request) { var item = _libraryManager.GetGenre(request.Name).Result; // Get everything var fields = Enum.GetNames(typeof(ItemFields)).Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)); var result = new DtoBuilder(Logger).GetDtoBaseItem(item, fields.ToList(), _libraryManager).Result; return ToOptimizedResult(result); } /// /// Gets the specified request. /// /// The request. /// System.Object. public object Get(GetStudio request) { var item = _libraryManager.GetStudio(request.Name).Result; // Get everything var fields = Enum.GetNames(typeof(ItemFields)).Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)); var result = new DtoBuilder(Logger).GetDtoBaseItem(item, fields.ToList(), _libraryManager).Result; return ToOptimizedResult(result); } /// /// Gets the specified request. /// /// The request. /// System.Object. public object Get(GetYear request) { var item = _libraryManager.GetYear(request.Year).Result; // Get everything var fields = Enum.GetNames(typeof(ItemFields)).Select(i => (ItemFields)Enum.Parse(typeof(ItemFields), i, true)); var result = new DtoBuilder(Logger).GetDtoBaseItem(item, fields.ToList(), _libraryManager).Result; return ToOptimizedResult(result); } /// /// Gets the specified request. /// /// The request. /// System.Object. public object Get(GetPhyscialPaths request) { var result = _libraryManager.RootFolder.Children.SelectMany(c => c.ResolveArgs.PhysicalLocations).ToList(); return ToOptimizedResult(result); } /// /// Gets the specified request. /// /// The request. /// System.Object. public object Get(GetItemTypes request) { var allTypes = _appHost.AllConcreteTypes.Where(t => t.IsSubclassOf(typeof(BaseItem))); if (request.HasInternetProvider) { allTypes = allTypes.Where(t => { if (t == typeof(UserRootFolder) || t == typeof(AggregateFolder) || t == typeof(Folder) || t == typeof(IndexFolder) || t == typeof(CollectionFolder) || t == typeof(Year)) { return false; } if (t == typeof(User)) { return false; } // For now it seems internet providers generally only deal with video subclasses if (t == typeof(Video)) { return false; } if (t.IsSubclassOf(typeof(BasePluginFolder))) { return false; } return true; }); } return allTypes.Select(t => t.Name).OrderBy(s => s).ToList(); } } }