using MediaBrowser.Common.Extensions; using MediaBrowser.Controller; using MediaBrowser.Controller.Entities; using ServiceStack.ServiceHost; using System; using System.IO; using System.Linq; namespace MediaBrowser.Api.Images { /// /// Class GetGeneralImage /// [Route("/Images/General/{Name}/{Type}", "GET")] [Api(Description = "Gets a general image by name")] public class GetGeneralImage { /// /// Gets or sets the name. /// /// The name. [ApiMember(Name = "Name", Description = "The name of the image", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")] public string Name { get; set; } [ApiMember(Name = "Type", Description = "Image Type (primary, backdrop, logo, etc).", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")] public string Type { get; set; } } /// /// Class GetRatingImage /// [Route("/Images/Ratings/{Theme}/{Name}", "GET")] [Api(Description = "Gets a rating image by name")] public class GetRatingImage { /// /// Gets or sets the name. /// /// The name. [ApiMember(Name = "Name", Description = "The name of the image", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")] public string Name { get; set; } /// /// Gets or sets the theme. /// /// The theme. [ApiMember(Name = "Theme", Description = "The theme to get the image from", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")] public string Theme { get; set; } } /// /// Class GetMediaInfoImage /// [Route("/Images/MediaInfo/{Theme}/{Name}", "GET")] [Api(Description = "Gets a media info image by name")] public class GetMediaInfoImage { /// /// Gets or sets the name. /// /// The name. [ApiMember(Name = "Name", Description = "The name of the image", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")] public string Name { get; set; } /// /// Gets or sets the theme. /// /// The theme. [ApiMember(Name = "Theme", Description = "The theme to get the image from", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")] public string Theme { get; set; } } /// /// Class ImageByNameService /// public class ImageByNameService : BaseApiService { /// /// The _app paths /// private readonly IServerApplicationPaths _appPaths; /// /// Initializes a new instance of the class. /// /// The app paths. public ImageByNameService(IServerApplicationPaths appPaths) { _appPaths = appPaths; } /// /// Gets the specified request. /// /// The request. /// System.Object. public object Get(GetGeneralImage request) { var filename = string.Equals(request.Type, "primary", StringComparison.OrdinalIgnoreCase) ? "folder" : request.Type; var paths = BaseItem.SupportedImageExtensions.Select(i => Path.Combine(_appPaths.GeneralPath, request.Name, filename + i)).ToList(); var path = paths.FirstOrDefault(File.Exists) ?? paths.FirstOrDefault(); return ToStaticFileResult(path); } /// /// Gets the specified request. /// /// The request. /// System.Object. public object Get(GetRatingImage request) { var themeFolder = Path.Combine(_appPaths.RatingsPath, request.Theme); if (Directory.Exists(themeFolder)) { var path = BaseItem.SupportedImageExtensions.Select(i => Path.Combine(themeFolder, request.Name + i)) .FirstOrDefault(File.Exists); if (!string.IsNullOrEmpty(path)) { return ToStaticFileResult(path); } } var allFolder = Path.Combine(_appPaths.RatingsPath, "all"); if (Directory.Exists(allFolder)) { // Avoid implicitly captured closure var currentRequest = request; var path = BaseItem.SupportedImageExtensions.Select(i => Path.Combine(allFolder, currentRequest.Name + i)) .FirstOrDefault(File.Exists); if (!string.IsNullOrEmpty(path)) { return ToStaticFileResult(path); } } throw new ResourceNotFoundException("MediaInfo image not found: " + request.Name); } /// /// Gets the specified request. /// /// The request. /// System.Object. public object Get(GetMediaInfoImage request) { var themeFolder = Path.Combine(_appPaths.MediaInfoImagesPath, request.Theme); if (Directory.Exists(themeFolder)) { var path = BaseItem.SupportedImageExtensions.Select(i => Path.Combine(themeFolder, request.Name + i)) .FirstOrDefault(File.Exists); if (!string.IsNullOrEmpty(path)) { return ToStaticFileResult(path); } } var allFolder = Path.Combine(_appPaths.MediaInfoImagesPath, "all"); if (Directory.Exists(allFolder)) { // Avoid implicitly captured closure var currentRequest = request; var path = BaseItem.SupportedImageExtensions.Select(i => Path.Combine(allFolder, currentRequest.Name + i)) .FirstOrDefault(File.Exists); if (!string.IsNullOrEmpty(path)) { return ToStaticFileResult(path); } } throw new ResourceNotFoundException("MediaInfo image not found: " + request.Name); } } }