aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Api/ConfigurationService.cs
diff options
context:
space:
mode:
author7illusions <z@7illusions.com>2014-08-30 19:06:58 +0200
committer7illusions <z@7illusions.com>2014-08-30 19:06:58 +0200
commit66ad1699e22029b605e17735e8d9450285d8748a (patch)
treeffc92c88d24850b2f82b6b3a8bdd904a2ccc77a5 /MediaBrowser.Api/ConfigurationService.cs
parent34bc54263e886aae777a3537dc50a6535b51330a (diff)
parent9d36f518182bc075c19d78084870f5115fa62d1e (diff)
Merge pull request #1 from MediaBrowser/master
Update to latest
Diffstat (limited to 'MediaBrowser.Api/ConfigurationService.cs')
-rw-r--r--MediaBrowser.Api/ConfigurationService.cs165
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());
}
}
}