using MediaBrowser.Common.Extensions; using MediaBrowser.Controller; using ServiceStack.ServiceHost; using System.IO; 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", System.StringComparison.OrdinalIgnoreCase) ? "folder" : request.Type; var file = Path.Combine(_appPaths.GeneralPath, request.Name, filename + ".jpg"); return ToStaticFileResult(File.Exists(file) ? file : Path.ChangeExtension(file, ".png")); } /// /// 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 file = Path.Combine(themeFolder, request.Name + ".png"); if (File.Exists(file)) { return ToStaticFileResult(file); } file = Path.Combine(themeFolder, request.Name + ".jpg"); if (File.Exists(file)) { return ToStaticFileResult(file); } } var allFolder = Path.Combine(_appPaths.RatingsPath, "all"); if (Directory.Exists(allFolder)) { var file = Path.Combine(allFolder, request.Name + ".png"); if (File.Exists(file)) { return ToStaticFileResult(file); } file = Path.Combine(allFolder, request.Name + ".jpg"); if (File.Exists(file)) { return ToStaticFileResult(file); } } 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 file = Path.Combine(themeFolder, request.Name + ".png"); if (File.Exists(file)) { return ToStaticFileResult(file); } file = Path.Combine(themeFolder, request.Name + ".jpg"); if (File.Exists(file)) { return ToStaticFileResult(file); } } var allFolder = Path.Combine(_appPaths.MediaInfoImagesPath, "all"); if (Directory.Exists(allFolder)) { var file = Path.Combine(allFolder, request.Name + ".png"); if (File.Exists(file)) { return ToStaticFileResult(file); } file = Path.Combine(allFolder, request.Name + ".jpg"); if (File.Exists(file)) { return ToStaticFileResult(file); } } throw new ResourceNotFoundException("MediaInfo image not found: " + request.Name); } } }