AppThemeService.cs 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. using MediaBrowser.Common.IO;
  2. using MediaBrowser.Controller.Themes;
  3. using MediaBrowser.Model.Themes;
  4. using ServiceStack;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.IO;
  8. using System.Linq;
  9. namespace MediaBrowser.Api
  10. {
  11. [Route("/Themes", "GET", Summary = "Gets a list of available themes for an app")]
  12. public class GetAppThemes : IReturn<List<AppThemeInfo>>
  13. {
  14. [ApiMember(Name = "App", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")]
  15. public string App { get; set; }
  16. }
  17. [Route("/Themes/Info", "GET", Summary = "Gets an app theme")]
  18. public class GetAppTheme : IReturn<AppTheme>
  19. {
  20. [ApiMember(Name = "App", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")]
  21. public string App { get; set; }
  22. [ApiMember(Name = "Name", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")]
  23. public string Name { get; set; }
  24. }
  25. [Route("/Themes/Images", "GET", Summary = "Gets an app theme")]
  26. public class GetAppThemeImage
  27. {
  28. [ApiMember(Name = "App", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")]
  29. public string App { get; set; }
  30. [ApiMember(Name = "Theme", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")]
  31. public string Theme { get; set; }
  32. [ApiMember(Name = "Name", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")]
  33. public string Name { get; set; }
  34. [ApiMember(Name = "CacheTag", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]
  35. public string CacheTag { get; set; }
  36. }
  37. [Route("/Themes", "POST", Summary = "Saves a theme")]
  38. public class SaveTheme : AppTheme, IReturnVoid
  39. {
  40. }
  41. public class AppThemeService : BaseApiService
  42. {
  43. private readonly IAppThemeManager _themeManager;
  44. private readonly IFileSystem _fileSystem;
  45. public AppThemeService(IAppThemeManager themeManager, IFileSystem fileSystem)
  46. {
  47. _themeManager = themeManager;
  48. _fileSystem = fileSystem;
  49. }
  50. public object Get(GetAppThemes request)
  51. {
  52. var result = _themeManager.GetThemes(request.App).ToList();
  53. return ToOptimizedResult(result);
  54. }
  55. public object Get(GetAppTheme request)
  56. {
  57. var result = _themeManager.GetTheme(request.App, request.Name);
  58. return ToOptimizedResult(result);
  59. }
  60. public void Post(SaveTheme request)
  61. {
  62. _themeManager.SaveTheme(request);
  63. }
  64. public object Get(GetAppThemeImage request)
  65. {
  66. var info = _themeManager.GetImageImageInfo(request.App, request.Theme, request.Name);
  67. var cacheGuid = new Guid(info.CacheTag);
  68. TimeSpan? cacheDuration = null;
  69. if (!string.IsNullOrEmpty(request.CacheTag) && cacheGuid == new Guid(request.CacheTag))
  70. {
  71. cacheDuration = TimeSpan.FromDays(365);
  72. }
  73. var contentType = MimeTypes.GetMimeType(info.Path);
  74. return ToCachedResult(cacheGuid, info.DateModified, cacheDuration, () => _fileSystem.GetFileStream(info.Path, FileMode.Open, FileAccess.Read, FileShare.Read), contentType);
  75. }
  76. }
  77. }