ImageByNameService.cs 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. using MediaBrowser.Common.Extensions;
  2. using MediaBrowser.Controller;
  3. using ServiceStack.ServiceHost;
  4. using System.IO;
  5. namespace MediaBrowser.Api.Images
  6. {
  7. /// <summary>
  8. /// Class GetGeneralImage
  9. /// </summary>
  10. [Route("/Images/General/{Name}", "GET")]
  11. [Api(Description = "Gets a general image by name")]
  12. public class GetGeneralImage : ImageRequest
  13. {
  14. /// <summary>
  15. /// Gets or sets the name.
  16. /// </summary>
  17. /// <value>The name.</value>
  18. [ApiMember(Name = "Name", Description = "The name of the image", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")]
  19. public string Name { get; set; }
  20. }
  21. /// <summary>
  22. /// Class GetRatingImage
  23. /// </summary>
  24. [Route("/Images/Ratings/{Theme}/{Name}", "GET")]
  25. [Api(Description = "Gets a rating image by name")]
  26. public class GetRatingImage : ImageRequest
  27. {
  28. /// <summary>
  29. /// Gets or sets the name.
  30. /// </summary>
  31. /// <value>The name.</value>
  32. [ApiMember(Name = "Name", Description = "The name of the image", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")]
  33. public string Name { get; set; }
  34. /// <summary>
  35. /// Gets or sets the theme.
  36. /// </summary>
  37. /// <value>The theme.</value>
  38. [ApiMember(Name = "Theme", Description = "The theme to get the image from", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")]
  39. public string Theme { get; set; }
  40. }
  41. /// <summary>
  42. /// Class GetMediaInfoImage
  43. /// </summary>
  44. [Route("/Images/MediaInfo/{Theme}/{Name}", "GET")]
  45. [Api(Description = "Gets a media info image by name")]
  46. public class GetMediaInfoImage : ImageRequest
  47. {
  48. /// <summary>
  49. /// Gets or sets the name.
  50. /// </summary>
  51. /// <value>The name.</value>
  52. [ApiMember(Name = "Name", Description = "The name of the image", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")]
  53. public string Name { get; set; }
  54. /// <summary>
  55. /// Gets or sets the theme.
  56. /// </summary>
  57. /// <value>The theme.</value>
  58. [ApiMember(Name = "Theme", Description = "The theme to get the image from", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")]
  59. public string Theme { get; set; }
  60. }
  61. /// <summary>
  62. /// Class ImageByNameService
  63. /// </summary>
  64. public class ImageByNameService : BaseApiService
  65. {
  66. /// <summary>
  67. /// The _app paths
  68. /// </summary>
  69. private readonly IServerApplicationPaths _appPaths;
  70. /// <summary>
  71. /// Initializes a new instance of the <see cref="ImageByNameService" /> class.
  72. /// </summary>
  73. /// <param name="appPaths">The app paths.</param>
  74. public ImageByNameService(IServerApplicationPaths appPaths)
  75. {
  76. _appPaths = appPaths;
  77. }
  78. /// <summary>
  79. /// Gets the specified request.
  80. /// </summary>
  81. /// <param name="request">The request.</param>
  82. /// <returns>System.Object.</returns>
  83. public object Get(GetGeneralImage request)
  84. {
  85. var file = Path.Combine(_appPaths.GeneralPath, request.Name, "folder.jpg");
  86. return ToStaticFileResult(File.Exists(file) ? file : Path.ChangeExtension(file, ".png"));
  87. }
  88. /// <summary>
  89. /// Gets the specified request.
  90. /// </summary>
  91. /// <param name="request">The request.</param>
  92. /// <returns>System.Object.</returns>
  93. public object Get(GetRatingImage request)
  94. {
  95. var themeFolder = Path.Combine(_appPaths.RatingsPath, request.Theme);
  96. if (Directory.Exists(themeFolder))
  97. {
  98. var file = Path.Combine(themeFolder, request.Name + ".png");
  99. if (File.Exists(file))
  100. {
  101. return ToStaticFileResult(file);
  102. }
  103. file = Path.Combine(themeFolder, request.Name + ".jpg");
  104. if (File.Exists(file))
  105. {
  106. return ToStaticFileResult(file);
  107. }
  108. }
  109. var allFolder = Path.Combine(_appPaths.RatingsPath, "all");
  110. if (Directory.Exists(allFolder))
  111. {
  112. var file = Path.Combine(allFolder, request.Name + ".png");
  113. if (File.Exists(file))
  114. {
  115. return ToStaticFileResult(file);
  116. }
  117. file = Path.Combine(allFolder, request.Name + ".jpg");
  118. if (File.Exists(file))
  119. {
  120. return ToStaticFileResult(file);
  121. }
  122. }
  123. throw new ResourceNotFoundException("MediaInfo image not found: " + request.Name);
  124. }
  125. /// <summary>
  126. /// Gets the specified request.
  127. /// </summary>
  128. /// <param name="request">The request.</param>
  129. /// <returns>System.Object.</returns>
  130. public object Get(GetMediaInfoImage request)
  131. {
  132. var themeFolder = Path.Combine(_appPaths.MediaInfoImagesPath, request.Theme);
  133. if (Directory.Exists(themeFolder))
  134. {
  135. var file = Path.Combine(themeFolder, request.Name + ".png");
  136. if (File.Exists(file))
  137. {
  138. return ToStaticFileResult(file);
  139. }
  140. file = Path.Combine(themeFolder, request.Name + ".jpg");
  141. if (File.Exists(file))
  142. {
  143. return ToStaticFileResult(file);
  144. }
  145. }
  146. var allFolder = Path.Combine(_appPaths.MediaInfoImagesPath, "all");
  147. if (Directory.Exists(allFolder))
  148. {
  149. var file = Path.Combine(allFolder, request.Name + ".png");
  150. if (File.Exists(file))
  151. {
  152. return ToStaticFileResult(file);
  153. }
  154. file = Path.Combine(allFolder, request.Name + ".jpg");
  155. if (File.Exists(file))
  156. {
  157. return ToStaticFileResult(file);
  158. }
  159. }
  160. throw new ResourceNotFoundException("MediaInfo image not found: " + request.Name);
  161. }
  162. }
  163. }