diff options
| author | 7illusions <z@7illusions.com> | 2014-08-30 19:06:58 +0200 |
|---|---|---|
| committer | 7illusions <z@7illusions.com> | 2014-08-30 19:06:58 +0200 |
| commit | 66ad1699e22029b605e17735e8d9450285d8748a (patch) | |
| tree | ffc92c88d24850b2f82b6b3a8bdd904a2ccc77a5 /MediaBrowser.Api/ConfigurationService.cs | |
| parent | 34bc54263e886aae777a3537dc50a6535b51330a (diff) | |
| parent | 9d36f518182bc075c19d78084870f5115fa62d1e (diff) | |
Merge pull request #1 from MediaBrowser/master
Update to latest
Diffstat (limited to 'MediaBrowser.Api/ConfigurationService.cs')
| -rw-r--r-- | MediaBrowser.Api/ConfigurationService.cs | 165 |
1 files changed, 95 insertions, 70 deletions
diff --git a/MediaBrowser.Api/ConfigurationService.cs b/MediaBrowser.Api/ConfigurationService.cs index b3191cd4b..7b6e5ed19 100644 --- a/MediaBrowser.Api/ConfigurationService.cs +++ b/MediaBrowser.Api/ConfigurationService.cs @@ -1,15 +1,17 @@ using MediaBrowser.Common.Extensions; using MediaBrowser.Common.IO; using MediaBrowser.Controller.Configuration; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Movies; -using MediaBrowser.Controller.Entities.TV; +using MediaBrowser.Controller.Library; +using MediaBrowser.Controller.Net; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Serialization; using ServiceStack; +using ServiceStack.Text.Controller; +using ServiceStack.Web; using System; using System.Collections.Generic; +using System.IO; using System.Linq; namespace MediaBrowser.Api @@ -18,35 +20,58 @@ namespace MediaBrowser.Api /// Class GetConfiguration /// </summary> [Route("/System/Configuration", "GET", Summary = "Gets application configuration")] + [Authenticated] public class GetConfiguration : IReturn<ServerConfiguration> { } + [Route("/System/Configuration/{Key}", "GET", Summary = "Gets a named configuration")] + [Authenticated] + public class GetNamedConfiguration + { + [ApiMember(Name = "Key", Description = "Key", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")] + public string Key { get; set; } + } + /// <summary> /// Class UpdateConfiguration /// </summary> [Route("/System/Configuration", "POST", Summary = "Updates application configuration")] + [Authenticated] public class UpdateConfiguration : ServerConfiguration, IReturnVoid { } + [Route("/System/Configuration/{Key}", "POST", Summary = "Updates named configuration")] + [Authenticated] + public class UpdateNamedConfiguration : IReturnVoid, IRequiresRequestStream + { + [ApiMember(Name = "Key", Description = "Key", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")] + public string Key { get; set; } + + public Stream RequestStream { get; set; } + } + [Route("/System/Configuration/MetadataOptions/Default", "GET", Summary = "Gets a default MetadataOptions object")] + [Authenticated] public class GetDefaultMetadataOptions : IReturn<MetadataOptions> { } [Route("/System/Configuration/MetadataPlugins", "GET", Summary = "Gets all available metadata plugins")] + [Authenticated] public class GetMetadataPlugins : IReturn<List<MetadataPluginSummary>> { } - [Route("/System/Configuration/VideoImageExtraction", "POST", Summary = "Updates image extraction for all types")] - public class UpdateVideoImageExtraction : IReturnVoid + [Route("/System/Configuration/MetadataPlugins/Autoset", "POST")] + [Authenticated] + public class AutoSetMetadataOptions : IReturnVoid { - public bool Enabled { get; set; } + } public class ConfigurationService : BaseApiService @@ -63,13 +88,15 @@ namespace MediaBrowser.Api private readonly IFileSystem _fileSystem; private readonly IProviderManager _providerManager; + private readonly ILibraryManager _libraryManager; - public ConfigurationService(IJsonSerializer jsonSerializer, IServerConfigurationManager configurationManager, IFileSystem fileSystem, IProviderManager providerManager) + public ConfigurationService(IJsonSerializer jsonSerializer, IServerConfigurationManager configurationManager, IFileSystem fileSystem, IProviderManager providerManager, ILibraryManager libraryManager) { _jsonSerializer = jsonSerializer; _configurationManager = configurationManager; _fileSystem = fileSystem; _providerManager = providerManager; + _libraryManager = libraryManager; } /// <summary> @@ -88,95 +115,93 @@ namespace MediaBrowser.Api return ToOptimizedResultUsingCache(cacheKey, dateModified, null, () => _configurationManager.Configuration); } - /// <summary> - /// Posts the specified configuraiton. - /// </summary> - /// <param name="request">The request.</param> - public void Post(UpdateConfiguration request) + public object Get(GetNamedConfiguration request) { - // Silly, but we need to serialize and deserialize or the XmlSerializer will write the xml with an element name of UpdateConfiguration + var result = _configurationManager.GetConfiguration(request.Key); - var json = _jsonSerializer.SerializeToString(request); - - var config = _jsonSerializer.DeserializeFromString<ServerConfiguration>(json); - - _configurationManager.ReplaceConfiguration(config); + return ToOptimizedResult(result); } - public object Get(GetDefaultMetadataOptions request) - { - return ToOptimizedSerializedResultUsingCache(new MetadataOptions()); - } + const string XbmcMetadata = "Xbmc Nfo"; + const string MediaBrowserMetadata = "Media Browser Xml"; - public object Get(GetMetadataPlugins request) + public void Post(AutoSetMetadataOptions request) { - return ToOptimizedSerializedResultUsingCache(_providerManager.GetAllMetadataPlugins().ToList()); - } + var service = AutoDetectMetadataService(); - /// <summary> - /// This is a temporary method used until image settings get broken out. - /// </summary> - /// <param name="request"></param> - public void Post(UpdateVideoImageExtraction request) - { - var config = _configurationManager.Configuration; + Logger.Info("Setting preferred metadata format to " + service); - EnableImageExtractionForType(typeof(Movie), config, request.Enabled); - EnableImageExtractionForType(typeof(Episode), config, request.Enabled); - EnableImageExtractionForType(typeof(AdultVideo), config, request.Enabled); - EnableImageExtractionForType(typeof(MusicVideo), config, request.Enabled); - EnableImageExtractionForType(typeof(Video), config, request.Enabled); - EnableImageExtractionForType(typeof(Trailer), config, request.Enabled); + var serviceToDisable = string.Equals(service, XbmcMetadata) ? + MediaBrowserMetadata : + XbmcMetadata; + _configurationManager.DisableMetadataService(serviceToDisable); _configurationManager.SaveConfiguration(); } - private void EnableImageExtractionForType(Type type, ServerConfiguration config, bool enabled) + private string AutoDetectMetadataService() { - var options = GetMetadataOptions(type, config); - - const string imageProviderName = "Screen Grabber"; - - var contains = options.DisabledImageFetchers.Contains(imageProviderName, StringComparer.OrdinalIgnoreCase); - - if (!enabled && !contains) + try { - var list = options.DisabledImageFetchers.ToList(); - - list.Add(imageProviderName); + var paths = _libraryManager.GetDefaultVirtualFolders() + .SelectMany(i => i.Locations) + .Distinct(StringComparer.OrdinalIgnoreCase) + .Select(i => new DirectoryInfo(i)) + .ToList(); + + if (paths.SelectMany(i => i.EnumerateFiles("*.xml", SearchOption.AllDirectories)) + .Any()) + { + return XbmcMetadata; + } - options.DisabledImageFetchers = list.ToArray(); + if (paths.SelectMany(i => i.EnumerateFiles("*.xml", SearchOption.AllDirectories)) + .Any(i => string.Equals(i.Name, "series.xml", StringComparison.OrdinalIgnoreCase) || string.Equals(i.Name, "movie.xml", StringComparison.OrdinalIgnoreCase))) + { + return MediaBrowserMetadata; + } } - else if (enabled && contains) + catch (Exception) { - var list = options.DisabledImageFetchers.ToList(); - - list.Remove(imageProviderName); - - options.DisabledImageFetchers = list.ToArray(); + } + + return XbmcMetadata; } - private MetadataOptions GetMetadataOptions(Type type, ServerConfiguration config) + /// <summary> + /// Posts the specified configuraiton. + /// </summary> + /// <param name="request">The request.</param> + public void Post(UpdateConfiguration request) { - var options = config.MetadataOptions - .FirstOrDefault(i => string.Equals(i.ItemType, type.Name, StringComparison.OrdinalIgnoreCase)); + // Silly, but we need to serialize and deserialize or the XmlSerializer will write the xml with an element name of UpdateConfiguration + var json = _jsonSerializer.SerializeToString(request); - if (options == null) - { - var list = config.MetadataOptions.ToList(); + var config = _jsonSerializer.DeserializeFromString<ServerConfiguration>(json); - options = new MetadataOptions - { - ItemType = type.Name - }; + _configurationManager.ReplaceConfiguration(config); + } - list.Add(options); + public void Post(UpdateNamedConfiguration request) + { + var pathInfo = PathInfo.Parse(Request.PathInfo); + var key = pathInfo.GetArgumentValue<string>(2); - config.MetadataOptions = list.ToArray(); - } + var configurationType = _configurationManager.GetConfigurationType(key); + var configuration = _jsonSerializer.DeserializeFromStream(request.RequestStream, configurationType); + + _configurationManager.SaveConfiguration(key, configuration); + } + + public object Get(GetDefaultMetadataOptions request) + { + return ToOptimizedSerializedResultUsingCache(new MetadataOptions()); + } - return options; + public object Get(GetMetadataPlugins request) + { + return ToOptimizedSerializedResultUsingCache(_providerManager.GetAllMetadataPlugins().ToList()); } } } |
