ConfigurationService.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. using MediaBrowser.Common.Extensions;
  2. using MediaBrowser.Common.IO;
  3. using MediaBrowser.Controller.Configuration;
  4. using MediaBrowser.Controller.Providers;
  5. using MediaBrowser.Model.Configuration;
  6. using MediaBrowser.Model.Serialization;
  7. using ServiceStack;
  8. using System.Collections.Generic;
  9. using System.Linq;
  10. namespace MediaBrowser.Api
  11. {
  12. /// <summary>
  13. /// Class GetConfiguration
  14. /// </summary>
  15. [Route("/System/Configuration", "GET")]
  16. [Api(("Gets application configuration"))]
  17. public class GetConfiguration : IReturn<ServerConfiguration>
  18. {
  19. }
  20. /// <summary>
  21. /// Class UpdateConfiguration
  22. /// </summary>
  23. [Route("/System/Configuration", "POST")]
  24. [Api(("Updates application configuration"))]
  25. public class UpdateConfiguration : ServerConfiguration, IReturnVoid
  26. {
  27. }
  28. [Route("/System/Configuration/MetadataOptions/Default", "GET")]
  29. [Api(("Gets a default MetadataOptions object"))]
  30. public class GetDefaultMetadataOptions : IReturn<MetadataOptions>
  31. {
  32. }
  33. [Route("/System/Configuration/MetadataPlugins", "GET")]
  34. [Api(("Gets all available metadata plugins"))]
  35. public class GetMetadataPlugins : IReturn<List<MetadataPluginSummary>>
  36. {
  37. }
  38. public class ConfigurationService : BaseApiService
  39. {
  40. /// <summary>
  41. /// The _json serializer
  42. /// </summary>
  43. private readonly IJsonSerializer _jsonSerializer;
  44. /// <summary>
  45. /// The _configuration manager
  46. /// </summary>
  47. private readonly IServerConfigurationManager _configurationManager;
  48. private readonly IFileSystem _fileSystem;
  49. private readonly IProviderManager _providerManager;
  50. public ConfigurationService(IJsonSerializer jsonSerializer, IServerConfigurationManager configurationManager, IFileSystem fileSystem, IProviderManager providerManager)
  51. {
  52. _jsonSerializer = jsonSerializer;
  53. _configurationManager = configurationManager;
  54. _fileSystem = fileSystem;
  55. _providerManager = providerManager;
  56. }
  57. /// <summary>
  58. /// Gets the specified request.
  59. /// </summary>
  60. /// <param name="request">The request.</param>
  61. /// <returns>System.Object.</returns>
  62. public object Get(GetConfiguration request)
  63. {
  64. var configPath = _configurationManager.ApplicationPaths.SystemConfigurationFilePath;
  65. var dateModified = _fileSystem.GetLastWriteTimeUtc(configPath);
  66. var cacheKey = (configPath + dateModified.Ticks).GetMD5();
  67. return ToOptimizedResultUsingCache(cacheKey, dateModified, null, () => _configurationManager.Configuration);
  68. }
  69. /// <summary>
  70. /// Posts the specified configuraiton.
  71. /// </summary>
  72. /// <param name="request">The request.</param>
  73. public void Post(UpdateConfiguration request)
  74. {
  75. // Silly, but we need to serialize and deserialize or the XmlSerializer will write the xml with an element name of UpdateConfiguration
  76. var json = _jsonSerializer.SerializeToString(request);
  77. var config = _jsonSerializer.DeserializeFromString<ServerConfiguration>(json);
  78. _configurationManager.ReplaceConfiguration(config);
  79. }
  80. public object Get(GetDefaultMetadataOptions request)
  81. {
  82. return ToOptimizedResult(new MetadataOptions());
  83. }
  84. public object Get(GetMetadataPlugins request)
  85. {
  86. return ToOptimizedResult(_providerManager.GetAllMetadataPlugins().ToList());
  87. }
  88. }
  89. }