From ef6b90b8e6e6c317fcda85a392c79324f91250db Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Tue, 25 Oct 2016 15:02:04 -0400 Subject: make controller project portable --- MediaBrowser.Server.Implementations/HttpServer/SwaggerService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'MediaBrowser.Server.Implementations/HttpServer/SwaggerService.cs') diff --git a/MediaBrowser.Server.Implementations/HttpServer/SwaggerService.cs b/MediaBrowser.Server.Implementations/HttpServer/SwaggerService.cs index d91f316d6..7d4d0a968 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/SwaggerService.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/SwaggerService.cs @@ -1,7 +1,7 @@ using MediaBrowser.Controller; using MediaBrowser.Controller.Net; -using ServiceStack.Web; using System.IO; +using MediaBrowser.Model.Services; namespace MediaBrowser.Server.Implementations.HttpServer { -- cgit v1.2.3 From 4b51233cc8faeea344661a2a3427579e534d8ea4 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Wed, 26 Oct 2016 02:01:42 -0400 Subject: update plugin interfaces --- MediaBrowser.Api/BaseApiService.cs | 2 +- .../MediaBrowser.Controller.csproj | 1 - MediaBrowser.Controller/Net/IHttpServer.cs | 3 +- MediaBrowser.Controller/Net/IRestfulService.cs | 12 ----- MediaBrowser.Controller/Net/LoggedAttribute.cs | 40 +++++--------- MediaBrowser.Model/MediaBrowser.Model.csproj | 4 ++ MediaBrowser.Model/Plugins/IHasWebPages.cs | 9 ++++ MediaBrowser.Model/Plugins/PluginPageInfo.cs | 9 ++++ MediaBrowser.Model/Reflection/IAssemblyInfo.cs | 10 ++++ MediaBrowser.Model/Services/IRequestFilter.cs | 8 +++ .../MediaBrowser.Providers.csproj | 3 -- .../HttpServer/HttpListenerHost.cs | 17 ++++-- .../HttpServer/ServerFactory.cs | 11 ++-- .../HttpServer/SwaggerService.cs | 2 +- .../MediaBrowser.Server.Implementations.csproj | 1 + .../Reflection/AssemblyInfo.cs | 14 +++++ .../ApplicationHost.cs | 6 ++- .../Api/ConfigurationPageInfo.cs | 12 ++++- MediaBrowser.WebDashboard/Api/DashboardService.cs | 62 ++++++++++++++++++++-- MediaBrowser.WebDashboard/ServerEntryPoint.cs | 5 +- Nuget/MediaBrowser.Common.Internal.nuspec | 4 +- Nuget/MediaBrowser.Common.nuspec | 2 +- Nuget/MediaBrowser.Server.Core.nuspec | 5 +- 23 files changed, 173 insertions(+), 69 deletions(-) delete mode 100644 MediaBrowser.Controller/Net/IRestfulService.cs create mode 100644 MediaBrowser.Model/Plugins/IHasWebPages.cs create mode 100644 MediaBrowser.Model/Plugins/PluginPageInfo.cs create mode 100644 MediaBrowser.Model/Reflection/IAssemblyInfo.cs create mode 100644 MediaBrowser.Model/Services/IRequestFilter.cs create mode 100644 MediaBrowser.Server.Implementations/Reflection/AssemblyInfo.cs (limited to 'MediaBrowser.Server.Implementations/HttpServer/SwaggerService.cs') diff --git a/MediaBrowser.Api/BaseApiService.cs b/MediaBrowser.Api/BaseApiService.cs index 0ef06804d..4810d4e9c 100644 --- a/MediaBrowser.Api/BaseApiService.cs +++ b/MediaBrowser.Api/BaseApiService.cs @@ -17,7 +17,7 @@ namespace MediaBrowser.Api /// /// Class BaseApiService /// - public class BaseApiService : IHasResultFactory, IRestfulService, IHasSession + public class BaseApiService : IHasResultFactory, IService, IHasSession { /// /// Gets or sets the logger. diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj index 7467fc39e..cf20f7bbb 100644 --- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj +++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj @@ -208,7 +208,6 @@ - diff --git a/MediaBrowser.Controller/Net/IHttpServer.cs b/MediaBrowser.Controller/Net/IHttpServer.cs index 97c5dd31b..8c503c199 100644 --- a/MediaBrowser.Controller/Net/IHttpServer.cs +++ b/MediaBrowser.Controller/Net/IHttpServer.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using MediaBrowser.Model.Services; namespace MediaBrowser.Controller.Net { @@ -46,7 +47,7 @@ namespace MediaBrowser.Controller.Net /// /// Inits this instance. /// - void Init(IEnumerable services); + void Init(IEnumerable services); /// /// If set, all requests will respond with this message diff --git a/MediaBrowser.Controller/Net/IRestfulService.cs b/MediaBrowser.Controller/Net/IRestfulService.cs deleted file mode 100644 index 01eefe792..000000000 --- a/MediaBrowser.Controller/Net/IRestfulService.cs +++ /dev/null @@ -1,12 +0,0 @@ -using MediaBrowser.Model.Services; - -namespace MediaBrowser.Controller.Net -{ - /// - /// Interface IRestfulService - /// - [Logged] - public interface IRestfulService : IService - { - } -} diff --git a/MediaBrowser.Controller/Net/LoggedAttribute.cs b/MediaBrowser.Controller/Net/LoggedAttribute.cs index c5b9d1cba..6a2a5e2e3 100644 --- a/MediaBrowser.Controller/Net/LoggedAttribute.cs +++ b/MediaBrowser.Controller/Net/LoggedAttribute.cs @@ -7,12 +7,20 @@ using MediaBrowser.Model.Services; namespace MediaBrowser.Controller.Net { - public class LoggedAttribute : Attribute, IHasRequestFilter + public class LoggedAttribute : IRequestFilter { - public ILogger Logger { get; set; } - public IUserManager UserManager { get; set; } - public ISessionManager SessionManager { get; set; } - public IAuthorizationContext AuthorizationContext { get; set; } + public LoggedAttribute(ILogger logger, IUserManager userManager, ISessionManager sessionManager, IAuthorizationContext authorizationContext) + { + Logger = logger; + UserManager = userManager; + SessionManager = sessionManager; + AuthorizationContext = authorizationContext; + } + + public ILogger Logger { get; private set; } + public IUserManager UserManager { get; private set; } + public ISessionManager SessionManager { get; private set; } + public IAuthorizationContext AuthorizationContext { get; private set; } /// /// The request filter is executed before the service. @@ -20,7 +28,7 @@ namespace MediaBrowser.Controller.Net /// The http request wrapper /// The http response wrapper /// The request DTO - public void RequestFilter(IRequest request, IResponse response, object requestDto) + public void Filter(IRequest request, IResponse response, object requestDto) { var serviceRequest = new ServiceRequest(request); @@ -51,25 +59,5 @@ namespace MediaBrowser.Controller.Net } } } - - /// - /// A new shallow copy of this filter is used on every request. - /// - /// IHasRequestFilter. - public IHasRequestFilter Copy() - { - return this; - } - - /// - /// Order in which Request Filters are executed. - /// <0 Executed before global request filters - /// >0 Executed after global request filters - /// - /// The priority. - public int Priority - { - get { return 0; } - } } } diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj index 37269473e..dca74298e 100644 --- a/MediaBrowser.Model/MediaBrowser.Model.csproj +++ b/MediaBrowser.Model/MediaBrowser.Model.csproj @@ -167,6 +167,9 @@ + + + @@ -174,6 +177,7 @@ + diff --git a/MediaBrowser.Model/Plugins/IHasWebPages.cs b/MediaBrowser.Model/Plugins/IHasWebPages.cs new file mode 100644 index 000000000..0745c3c60 --- /dev/null +++ b/MediaBrowser.Model/Plugins/IHasWebPages.cs @@ -0,0 +1,9 @@ +using System.Collections.Generic; + +namespace MediaBrowser.Model.Plugins +{ + public interface IHasWebPages + { + IEnumerable GetPages(); + } +} diff --git a/MediaBrowser.Model/Plugins/PluginPageInfo.cs b/MediaBrowser.Model/Plugins/PluginPageInfo.cs new file mode 100644 index 000000000..4b91e0791 --- /dev/null +++ b/MediaBrowser.Model/Plugins/PluginPageInfo.cs @@ -0,0 +1,9 @@ +namespace MediaBrowser.Model.Plugins +{ + public class PluginPageInfo + { + public string Name { get; set; } + + public string EmbeddedResourcePath { get; set; } + } +} diff --git a/MediaBrowser.Model/Reflection/IAssemblyInfo.cs b/MediaBrowser.Model/Reflection/IAssemblyInfo.cs new file mode 100644 index 000000000..1c65985cb --- /dev/null +++ b/MediaBrowser.Model/Reflection/IAssemblyInfo.cs @@ -0,0 +1,10 @@ +using System; +using System.IO; + +namespace MediaBrowser.Model.Reflection +{ + public interface IAssemblyInfo + { + Stream GetManifestResourceStream(Type type, string resource); + } +} diff --git a/MediaBrowser.Model/Services/IRequestFilter.cs b/MediaBrowser.Model/Services/IRequestFilter.cs new file mode 100644 index 000000000..7f6db2e4d --- /dev/null +++ b/MediaBrowser.Model/Services/IRequestFilter.cs @@ -0,0 +1,8 @@ + +namespace MediaBrowser.Model.Services +{ + public interface IRequestFilter + { + void Filter(IRequest request, IResponse response, object requestDto); + } +} diff --git a/MediaBrowser.Providers/MediaBrowser.Providers.csproj b/MediaBrowser.Providers/MediaBrowser.Providers.csproj index d1954a527..3fcdbf1c7 100644 --- a/MediaBrowser.Providers/MediaBrowser.Providers.csproj +++ b/MediaBrowser.Providers/MediaBrowser.Providers.csproj @@ -53,10 +53,7 @@ - - - False diff --git a/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs b/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs index 999634a92..71704f8e2 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs @@ -17,9 +17,9 @@ using System.Linq; using System.Reflection; using System.Threading; using System.Threading.Tasks; -using MediaBrowser.Common.IO; using MediaBrowser.Common.Net; using MediaBrowser.Common.Security; +using MediaBrowser.Controller; using MediaBrowser.Model.Extensions; using MediaBrowser.Model.IO; using MediaBrowser.Model.Services; @@ -34,7 +34,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer private readonly ILogger _logger; public IEnumerable UrlPrefixes { get; private set; } - private readonly List _restServices = new List(); + private readonly List _restServices = new List(); private IHttpListener _listener; @@ -49,13 +49,16 @@ namespace MediaBrowser.Server.Implementations.HttpServer private readonly INetworkManager _networkManager; private readonly IMemoryStreamProvider _memoryStreamProvider; - public HttpListenerHost(IApplicationHost applicationHost, + private readonly IServerApplicationHost _appHost; + + public HttpListenerHost(IServerApplicationHost applicationHost, ILogManager logManager, IServerConfigurationManager config, string serviceName, string defaultRedirectPath, INetworkManager networkManager, IMemoryStreamProvider memoryStreamProvider, params Assembly[] assembliesWithServices) : base(serviceName, assembliesWithServices) { + _appHost = applicationHost; DefaultRedirectPath = defaultRedirectPath; _networkManager = networkManager; _memoryStreamProvider = memoryStreamProvider; @@ -116,6 +119,12 @@ namespace MediaBrowser.Server.Implementations.HttpServer // } //}); + var requestFilters = _appHost.GetExports().ToList(); + foreach (var filter in requestFilters) + { + HostContext.GlobalRequestFilters.Add(filter.Filter); + } + HostContext.GlobalResponseFilters.Add(new ResponseFilter(_logger).FilterResponse); } @@ -569,7 +578,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer /// Adds the rest handlers. /// /// The services. - public void Init(IEnumerable services) + public void Init(IEnumerable services) { _restServices.AddRange(services); diff --git a/MediaBrowser.Server.Implementations/HttpServer/ServerFactory.cs b/MediaBrowser.Server.Implementations/HttpServer/ServerFactory.cs index b2cbf2387..4dff2d5a3 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/ServerFactory.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/ServerFactory.cs @@ -1,6 +1,5 @@ -using MediaBrowser.Common; -using MediaBrowser.Common.IO; -using MediaBrowser.Common.Net; +using MediaBrowser.Common.Net; +using MediaBrowser.Controller; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Net; using MediaBrowser.Model.IO; @@ -18,17 +17,17 @@ namespace MediaBrowser.Server.Implementations.HttpServer /// Creates the server. /// /// IHttpServer. - public static IHttpServer CreateServer(IApplicationHost applicationHost, + public static IHttpServer CreateServer(IServerApplicationHost applicationHost, ILogManager logManager, IServerConfigurationManager config, - INetworkManager _networkmanager, + INetworkManager networkmanager, IMemoryStreamProvider streamProvider, string serverName, string defaultRedirectpath) { LogManager.LogFactory = new ServerLogFactory(logManager); - return new HttpListenerHost(applicationHost, logManager, config, serverName, defaultRedirectpath, _networkmanager, streamProvider); + return new HttpListenerHost(applicationHost, logManager, config, serverName, defaultRedirectpath, networkmanager, streamProvider); } } } diff --git a/MediaBrowser.Server.Implementations/HttpServer/SwaggerService.cs b/MediaBrowser.Server.Implementations/HttpServer/SwaggerService.cs index 7d4d0a968..54ee5fbb2 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/SwaggerService.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/SwaggerService.cs @@ -5,7 +5,7 @@ using MediaBrowser.Model.Services; namespace MediaBrowser.Server.Implementations.HttpServer { - public class SwaggerService : IHasResultFactory, IRestfulService + public class SwaggerService : IHasResultFactory, IService { private readonly IServerApplicationPaths _appPaths; diff --git a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj index fd978f3d6..23d373ac4 100644 --- a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj +++ b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj @@ -270,6 +270,7 @@ + diff --git a/MediaBrowser.Server.Implementations/Reflection/AssemblyInfo.cs b/MediaBrowser.Server.Implementations/Reflection/AssemblyInfo.cs new file mode 100644 index 000000000..ec25e7951 --- /dev/null +++ b/MediaBrowser.Server.Implementations/Reflection/AssemblyInfo.cs @@ -0,0 +1,14 @@ +using System; +using System.IO; +using MediaBrowser.Model.Reflection; + +namespace MediaBrowser.Server.Implementations.Reflection +{ + public class AssemblyInfo : IAssemblyInfo + { + public Stream GetManifestResourceStream(Type type, string resource) + { + return type.Assembly.GetManifestResourceStream(resource); + } + } +} diff --git a/MediaBrowser.Server.Startup.Common/ApplicationHost.cs b/MediaBrowser.Server.Startup.Common/ApplicationHost.cs index 4372dc283..f8294a24d 100644 --- a/MediaBrowser.Server.Startup.Common/ApplicationHost.cs +++ b/MediaBrowser.Server.Startup.Common/ApplicationHost.cs @@ -111,9 +111,12 @@ using MediaBrowser.Model.Activity; using MediaBrowser.Model.Globalization; using MediaBrowser.Model.Net; using MediaBrowser.Model.News; +using MediaBrowser.Model.Reflection; using MediaBrowser.Model.Serialization; +using MediaBrowser.Model.Services; using MediaBrowser.Model.Social; using MediaBrowser.Model.Xml; +using MediaBrowser.Server.Implementations.Reflection; using MediaBrowser.Server.Implementations.Xml; namespace MediaBrowser.Server.Startup.Common @@ -634,6 +637,7 @@ namespace MediaBrowser.Server.Startup.Common RegisterSingleInstance(() => new BdInfoExaminer()); RegisterSingleInstance(new XmlReaderSettingsFactory()); + RegisterSingleInstance(new AssemblyInfo()); UserDataManager = new UserDataManager(LogManager, ServerConfigurationManager); RegisterSingleInstance(UserDataManager); @@ -985,7 +989,7 @@ namespace MediaBrowser.Server.Startup.Common base.FindParts(); - HttpServer.Init(GetExports(false)); + HttpServer.Init(GetExports(false)); ServerManager.AddWebSocketListeners(GetExports(false)); diff --git a/MediaBrowser.WebDashboard/Api/ConfigurationPageInfo.cs b/MediaBrowser.WebDashboard/Api/ConfigurationPageInfo.cs index 16aa14cb7..33289e76c 100644 --- a/MediaBrowser.WebDashboard/Api/ConfigurationPageInfo.cs +++ b/MediaBrowser.WebDashboard/Api/ConfigurationPageInfo.cs @@ -1,4 +1,6 @@ -using MediaBrowser.Controller.Plugins; +using MediaBrowser.Common.Plugins; +using MediaBrowser.Controller.Plugins; +using MediaBrowser.Model.Plugins; namespace MediaBrowser.WebDashboard.Api { @@ -30,5 +32,13 @@ namespace MediaBrowser.WebDashboard.Api // Don't use "N" because it needs to match Plugin.Id PluginId = page.Plugin.Id.ToString(); } + + public ConfigurationPageInfo(IPlugin plugin, PluginPageInfo page) + { + Name = page.Name; + + // Don't use "N" because it needs to match Plugin.Id + PluginId = plugin.Id.ToString(); + } } } diff --git a/MediaBrowser.WebDashboard/Api/DashboardService.cs b/MediaBrowser.WebDashboard/Api/DashboardService.cs index 5af580340..6803ad306 100644 --- a/MediaBrowser.WebDashboard/Api/DashboardService.cs +++ b/MediaBrowser.WebDashboard/Api/DashboardService.cs @@ -12,8 +12,11 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading.Tasks; +using MediaBrowser.Common.Plugins; using MediaBrowser.Model.IO; using MediaBrowser.Model.Globalization; +using MediaBrowser.Model.Plugins; +using MediaBrowser.Model.Reflection; using MediaBrowser.Model.Services; namespace MediaBrowser.WebDashboard.Api @@ -76,7 +79,7 @@ namespace MediaBrowser.WebDashboard.Api /// /// Class DashboardService /// - public class DashboardService : IRestfulService, IHasResultFactory + public class DashboardService : IService, IHasResultFactory { /// /// Gets or sets the logger. @@ -109,6 +112,7 @@ namespace MediaBrowser.WebDashboard.Api private readonly IFileSystem _fileSystem; private readonly ILocalizationManager _localization; private readonly IJsonSerializer _jsonSerializer; + private readonly IAssemblyInfo _assemblyInfo; /// /// Initializes a new instance of the class. @@ -116,13 +120,14 @@ namespace MediaBrowser.WebDashboard.Api /// The app host. /// The server configuration manager. /// The file system. - public DashboardService(IServerApplicationHost appHost, IServerConfigurationManager serverConfigurationManager, IFileSystem fileSystem, ILocalizationManager localization, IJsonSerializer jsonSerializer) + public DashboardService(IServerApplicationHost appHost, IServerConfigurationManager serverConfigurationManager, IFileSystem fileSystem, ILocalizationManager localization, IJsonSerializer jsonSerializer, IAssemblyInfo assemblyInfo) { _appHost = appHost; _serverConfigurationManager = serverConfigurationManager; _fileSystem = fileSystem; _localization = localization; _jsonSerializer = jsonSerializer; + _assemblyInfo = assemblyInfo; } /// @@ -132,9 +137,32 @@ namespace MediaBrowser.WebDashboard.Api /// System.Object. public Task Get(GetDashboardConfigurationPage request) { - var page = ServerEntryPoint.Instance.PluginConfigurationPages.First(p => p.Name.Equals(request.Name, StringComparison.OrdinalIgnoreCase)); + IPlugin plugin = null; + Stream stream = null; - return ResultFactory.GetStaticResult(Request, page.Plugin.Version.ToString().GetMD5(), null, null, MimeTypes.GetMimeType("page.html"), () => GetPackageCreator().ModifyHtml("dummy.html", page.GetHtmlStream(), null, _appHost.ApplicationVersion.ToString(), null, false)); + var page = ServerEntryPoint.Instance.PluginConfigurationPages.FirstOrDefault(p => string.Equals(p.Name, request.Name, StringComparison.OrdinalIgnoreCase)); + if (page != null) + { + plugin = page.Plugin; + stream = page.GetHtmlStream(); + } + + if (plugin == null) + { + var altPage = GetPluginPages().FirstOrDefault(p => string.Equals(p.Item1.Name, request.Name, StringComparison.OrdinalIgnoreCase)); + if (altPage != null) + { + plugin = altPage.Item2; + stream = _assemblyInfo.GetManifestResourceStream(plugin.GetType(), altPage.Item1.EmbeddedResourcePath); + } + } + + if (plugin != null && stream != null) + { + return ResultFactory.GetStaticResult(Request, plugin.Version.ToString().GetMD5(), null, null, MimeTypes.GetMimeType("page.html"), () => GetPackageCreator().ModifyHtml("dummy.html", stream, null, _appHost.ApplicationVersion.ToString(), null, false)); + } + + throw new ResourceNotFoundException(); } /// @@ -162,7 +190,7 @@ namespace MediaBrowser.WebDashboard.Api if (request.PageType.HasValue) { - pages = pages.Where(p => p.ConfigurationPageType == request.PageType.Value); + pages = pages.Where(p => p.ConfigurationPageType == request.PageType.Value).ToList(); } // Don't allow a failing plugin to fail them all @@ -182,9 +210,33 @@ namespace MediaBrowser.WebDashboard.Api .Where(i => i != null) .ToList(); + configPages.AddRange(_appHost.Plugins.SelectMany(GetConfigPages)); + return ResultFactory.GetOptimizedResult(Request, configPages); } + private IEnumerable> GetPluginPages() + { + return _appHost.Plugins.SelectMany(GetPluginPages); + } + + private IEnumerable> GetPluginPages(IPlugin plugin) + { + var hasConfig = plugin as IHasWebPages; + + if (hasConfig == null) + { + return new List>(); + } + + return hasConfig.GetPages().Select(i => new Tuple(i, plugin)); + } + + private IEnumerable GetConfigPages(IPlugin plugin) + { + return GetPluginPages(plugin).Select(i => new ConfigurationPageInfo(plugin, i.Item1)); + } + public object Get(GetRobotsTxt request) { return Get(new GetDashboardResource diff --git a/MediaBrowser.WebDashboard/ServerEntryPoint.cs b/MediaBrowser.WebDashboard/ServerEntryPoint.cs index 690c07d8f..b939e4107 100644 --- a/MediaBrowser.WebDashboard/ServerEntryPoint.cs +++ b/MediaBrowser.WebDashboard/ServerEntryPoint.cs @@ -1,6 +1,7 @@ using MediaBrowser.Common; using MediaBrowser.Controller.Plugins; using System.Collections.Generic; +using System.Linq; namespace MediaBrowser.WebDashboard { @@ -10,7 +11,7 @@ namespace MediaBrowser.WebDashboard /// Gets the list of plugin configuration pages /// /// The configuration pages. - public IEnumerable PluginConfigurationPages { get; private set; } + public List PluginConfigurationPages { get; private set; } private readonly IApplicationHost _appHost; @@ -24,7 +25,7 @@ namespace MediaBrowser.WebDashboard public void Run() { - PluginConfigurationPages = _appHost.GetExports(); + PluginConfigurationPages = _appHost.GetExports().ToList(); } public void Dispose() diff --git a/Nuget/MediaBrowser.Common.Internal.nuspec b/Nuget/MediaBrowser.Common.Internal.nuspec index 57b18c338..292c80a7c 100644 --- a/Nuget/MediaBrowser.Common.Internal.nuspec +++ b/Nuget/MediaBrowser.Common.Internal.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common.Internal - 3.0.676 + 3.0.680 Emby.Common.Internal Luke ebr,Luke,scottisafool @@ -12,7 +12,7 @@ Contains common components shared by Emby Theater and Emby Server. Not intended for plugin developer consumption. Copyright © Emby 2013 - + diff --git a/Nuget/MediaBrowser.Common.nuspec b/Nuget/MediaBrowser.Common.nuspec index 05c9c4afc..111cb0a2a 100644 --- a/Nuget/MediaBrowser.Common.nuspec +++ b/Nuget/MediaBrowser.Common.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common - 3.0.676 + 3.0.680 Emby.Common Emby Team ebr,Luke,scottisafool diff --git a/Nuget/MediaBrowser.Server.Core.nuspec b/Nuget/MediaBrowser.Server.Core.nuspec index 67607af50..fec8b7722 100644 --- a/Nuget/MediaBrowser.Server.Core.nuspec +++ b/Nuget/MediaBrowser.Server.Core.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Server.Core - 3.0.676 + 3.0.680 Emby.Server.Core Emby Team ebr,Luke,scottisafool @@ -12,10 +12,11 @@ Contains core components required to build plugins for Emby Server. Copyright © Emby 2013 - + + \ No newline at end of file -- cgit v1.2.3 From 3c1447804b5de9a7d840c7158c3cb4e0a27f76e1 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 4 Nov 2016 22:17:18 -0400 Subject: move localization classes --- Emby.Dlna/Didl/DidlBuilder.cs | 8 +- .../Emby.Server.Implementations.csproj | 246 +++++- .../HttpServer/GetSwaggerResource.cs | 17 + .../HttpServer/SocketSharp/HttpUtility.cs | 922 ++++++++++++++++++++ .../HttpServer/SwaggerService.cs | 46 + .../Localization/Core/ar.json | 178 ++++ .../Localization/Core/bg-BG.json | 178 ++++ .../Localization/Core/ca.json | 178 ++++ .../Localization/Core/core.json | 179 ++++ .../Localization/Core/cs.json | 178 ++++ .../Localization/Core/da.json | 178 ++++ .../Localization/Core/de.json | 178 ++++ .../Localization/Core/el.json | 178 ++++ .../Localization/Core/en-GB.json | 178 ++++ .../Localization/Core/en-US.json | 178 ++++ .../Localization/Core/es-AR.json | 178 ++++ .../Localization/Core/es-MX.json | 178 ++++ .../Localization/Core/es.json | 178 ++++ .../Localization/Core/fi.json | 178 ++++ .../Localization/Core/fr-CA.json | 178 ++++ .../Localization/Core/fr.json | 178 ++++ .../Localization/Core/gsw.json | 178 ++++ .../Localization/Core/he.json | 178 ++++ .../Localization/Core/hr.json | 178 ++++ .../Localization/Core/hu.json | 178 ++++ .../Localization/Core/id.json | 178 ++++ .../Localization/Core/it.json | 178 ++++ .../Localization/Core/kk.json | 178 ++++ .../Localization/Core/ko.json | 178 ++++ .../Localization/Core/ms.json | 178 ++++ .../Localization/Core/nb.json | 178 ++++ .../Localization/Core/nl.json | 178 ++++ .../Localization/Core/pl.json | 178 ++++ .../Localization/Core/pt-BR.json | 178 ++++ .../Localization/Core/pt-PT.json | 178 ++++ .../Localization/Core/ro.json | 178 ++++ .../Localization/Core/ru.json | 178 ++++ .../Localization/Core/sl-SI.json | 178 ++++ .../Localization/Core/sv.json | 178 ++++ .../Localization/Core/tr.json | 178 ++++ .../Localization/Core/uk.json | 178 ++++ .../Localization/Core/vi.json | 178 ++++ .../Localization/Core/zh-CN.json | 178 ++++ .../Localization/Core/zh-HK.json | 178 ++++ .../Localization/Core/zh-TW.json | 178 ++++ .../Localization/LocalizationManager.cs | 433 ++++++++++ .../Localization/Ratings/au.txt | 8 + .../Localization/Ratings/be.txt | 6 + .../Localization/Ratings/br.txt | 6 + .../Localization/Ratings/ca.txt | 6 + .../Localization/Ratings/co.txt | 8 + .../Localization/Ratings/de.txt | 10 + .../Localization/Ratings/dk.txt | 4 + .../Localization/Ratings/fr.txt | 5 + .../Localization/Ratings/gb.txt | 7 + .../Localization/Ratings/ie.txt | 6 + .../Localization/Ratings/jp.txt | 4 + .../Localization/Ratings/kz.txt | 6 + .../Localization/Ratings/mx.txt | 6 + .../Localization/Ratings/nl.txt | 6 + .../Localization/Ratings/nz.txt | 10 + .../Localization/Ratings/ru.txt | 5 + .../Localization/Ratings/us.txt | 22 + .../Localization/countries.json | 1 + .../Localization/iso6392.txt | 487 +++++++++++ .../HttpServer/GetSwaggerResource.cs | 17 - .../HttpServer/HttpListenerHost.cs | 1 + .../HttpServer/SocketSharp/HttpUtility.cs | 942 --------------------- .../SocketSharp/WebSocketSharpRequest.cs | 1 + .../HttpServer/SwaggerService.cs | 43 - .../Localization/Core/ar.json | 178 ---- .../Localization/Core/bg-BG.json | 178 ---- .../Localization/Core/ca.json | 178 ---- .../Localization/Core/core.json | 179 ---- .../Localization/Core/cs.json | 178 ---- .../Localization/Core/da.json | 178 ---- .../Localization/Core/de.json | 178 ---- .../Localization/Core/el.json | 178 ---- .../Localization/Core/en-GB.json | 178 ---- .../Localization/Core/en-US.json | 178 ---- .../Localization/Core/es-AR.json | 178 ---- .../Localization/Core/es-MX.json | 178 ---- .../Localization/Core/es.json | 178 ---- .../Localization/Core/fi.json | 178 ---- .../Localization/Core/fr-CA.json | 178 ---- .../Localization/Core/fr.json | 178 ---- .../Localization/Core/gsw.json | 178 ---- .../Localization/Core/he.json | 178 ---- .../Localization/Core/hr.json | 178 ---- .../Localization/Core/hu.json | 178 ---- .../Localization/Core/id.json | 178 ---- .../Localization/Core/it.json | 178 ---- .../Localization/Core/kk.json | 178 ---- .../Localization/Core/ko.json | 178 ---- .../Localization/Core/ms.json | 178 ---- .../Localization/Core/nb.json | 178 ---- .../Localization/Core/nl.json | 178 ---- .../Localization/Core/pl.json | 178 ---- .../Localization/Core/pt-BR.json | 178 ---- .../Localization/Core/pt-PT.json | 178 ---- .../Localization/Core/ro.json | 178 ---- .../Localization/Core/ru.json | 178 ---- .../Localization/Core/sl-SI.json | 178 ---- .../Localization/Core/sv.json | 178 ---- .../Localization/Core/tr.json | 178 ---- .../Localization/Core/uk.json | 178 ---- .../Localization/Core/vi.json | 178 ---- .../Localization/Core/zh-CN.json | 178 ---- .../Localization/Core/zh-HK.json | 178 ---- .../Localization/Core/zh-TW.json | 178 ---- .../Localization/LocalizationManager.cs | 422 --------- .../Localization/Ratings/au.txt | 8 - .../Localization/Ratings/be.txt | 6 - .../Localization/Ratings/br.txt | 6 - .../Localization/Ratings/ca.txt | 6 - .../Localization/Ratings/co.txt | 8 - .../Localization/Ratings/de.txt | 10 - .../Localization/Ratings/dk.txt | 4 - .../Localization/Ratings/fr.txt | 5 - .../Localization/Ratings/gb.txt | 7 - .../Localization/Ratings/ie.txt | 6 - .../Localization/Ratings/jp.txt | 4 - .../Localization/Ratings/kz.txt | 6 - .../Localization/Ratings/mx.txt | 6 - .../Localization/Ratings/nl.txt | 6 - .../Localization/Ratings/nz.txt | 10 - .../Localization/Ratings/ru.txt | 5 - .../Localization/Ratings/us.txt | 22 - .../Localization/countries.json | 1 - .../Localization/iso6392.txt | 487 ----------- .../MediaBrowser.Server.Implementations.csproj | 209 ----- .../ApplicationHost.cs | 9 +- .../MediaBrowser.Server.Startup.Common.csproj | 1 + .../TextLocalizer.cs | 25 + 134 files changed, 9434 insertions(+), 9376 deletions(-) create mode 100644 Emby.Server.Implementations/HttpServer/GetSwaggerResource.cs create mode 100644 Emby.Server.Implementations/HttpServer/SocketSharp/HttpUtility.cs create mode 100644 Emby.Server.Implementations/HttpServer/SwaggerService.cs create mode 100644 Emby.Server.Implementations/Localization/Core/ar.json create mode 100644 Emby.Server.Implementations/Localization/Core/bg-BG.json create mode 100644 Emby.Server.Implementations/Localization/Core/ca.json create mode 100644 Emby.Server.Implementations/Localization/Core/core.json create mode 100644 Emby.Server.Implementations/Localization/Core/cs.json create mode 100644 Emby.Server.Implementations/Localization/Core/da.json create mode 100644 Emby.Server.Implementations/Localization/Core/de.json create mode 100644 Emby.Server.Implementations/Localization/Core/el.json create mode 100644 Emby.Server.Implementations/Localization/Core/en-GB.json create mode 100644 Emby.Server.Implementations/Localization/Core/en-US.json create mode 100644 Emby.Server.Implementations/Localization/Core/es-AR.json create mode 100644 Emby.Server.Implementations/Localization/Core/es-MX.json create mode 100644 Emby.Server.Implementations/Localization/Core/es.json create mode 100644 Emby.Server.Implementations/Localization/Core/fi.json create mode 100644 Emby.Server.Implementations/Localization/Core/fr-CA.json create mode 100644 Emby.Server.Implementations/Localization/Core/fr.json create mode 100644 Emby.Server.Implementations/Localization/Core/gsw.json create mode 100644 Emby.Server.Implementations/Localization/Core/he.json create mode 100644 Emby.Server.Implementations/Localization/Core/hr.json create mode 100644 Emby.Server.Implementations/Localization/Core/hu.json create mode 100644 Emby.Server.Implementations/Localization/Core/id.json create mode 100644 Emby.Server.Implementations/Localization/Core/it.json create mode 100644 Emby.Server.Implementations/Localization/Core/kk.json create mode 100644 Emby.Server.Implementations/Localization/Core/ko.json create mode 100644 Emby.Server.Implementations/Localization/Core/ms.json create mode 100644 Emby.Server.Implementations/Localization/Core/nb.json create mode 100644 Emby.Server.Implementations/Localization/Core/nl.json create mode 100644 Emby.Server.Implementations/Localization/Core/pl.json create mode 100644 Emby.Server.Implementations/Localization/Core/pt-BR.json create mode 100644 Emby.Server.Implementations/Localization/Core/pt-PT.json create mode 100644 Emby.Server.Implementations/Localization/Core/ro.json create mode 100644 Emby.Server.Implementations/Localization/Core/ru.json create mode 100644 Emby.Server.Implementations/Localization/Core/sl-SI.json create mode 100644 Emby.Server.Implementations/Localization/Core/sv.json create mode 100644 Emby.Server.Implementations/Localization/Core/tr.json create mode 100644 Emby.Server.Implementations/Localization/Core/uk.json create mode 100644 Emby.Server.Implementations/Localization/Core/vi.json create mode 100644 Emby.Server.Implementations/Localization/Core/zh-CN.json create mode 100644 Emby.Server.Implementations/Localization/Core/zh-HK.json create mode 100644 Emby.Server.Implementations/Localization/Core/zh-TW.json create mode 100644 Emby.Server.Implementations/Localization/LocalizationManager.cs create mode 100644 Emby.Server.Implementations/Localization/Ratings/au.txt create mode 100644 Emby.Server.Implementations/Localization/Ratings/be.txt create mode 100644 Emby.Server.Implementations/Localization/Ratings/br.txt create mode 100644 Emby.Server.Implementations/Localization/Ratings/ca.txt create mode 100644 Emby.Server.Implementations/Localization/Ratings/co.txt create mode 100644 Emby.Server.Implementations/Localization/Ratings/de.txt create mode 100644 Emby.Server.Implementations/Localization/Ratings/dk.txt create mode 100644 Emby.Server.Implementations/Localization/Ratings/fr.txt create mode 100644 Emby.Server.Implementations/Localization/Ratings/gb.txt create mode 100644 Emby.Server.Implementations/Localization/Ratings/ie.txt create mode 100644 Emby.Server.Implementations/Localization/Ratings/jp.txt create mode 100644 Emby.Server.Implementations/Localization/Ratings/kz.txt create mode 100644 Emby.Server.Implementations/Localization/Ratings/mx.txt create mode 100644 Emby.Server.Implementations/Localization/Ratings/nl.txt create mode 100644 Emby.Server.Implementations/Localization/Ratings/nz.txt create mode 100644 Emby.Server.Implementations/Localization/Ratings/ru.txt create mode 100644 Emby.Server.Implementations/Localization/Ratings/us.txt create mode 100644 Emby.Server.Implementations/Localization/countries.json create mode 100644 Emby.Server.Implementations/Localization/iso6392.txt delete mode 100644 MediaBrowser.Server.Implementations/HttpServer/GetSwaggerResource.cs delete mode 100644 MediaBrowser.Server.Implementations/HttpServer/SocketSharp/HttpUtility.cs delete mode 100644 MediaBrowser.Server.Implementations/HttpServer/SwaggerService.cs delete mode 100644 MediaBrowser.Server.Implementations/Localization/Core/ar.json delete mode 100644 MediaBrowser.Server.Implementations/Localization/Core/bg-BG.json delete mode 100644 MediaBrowser.Server.Implementations/Localization/Core/ca.json delete mode 100644 MediaBrowser.Server.Implementations/Localization/Core/core.json delete mode 100644 MediaBrowser.Server.Implementations/Localization/Core/cs.json delete mode 100644 MediaBrowser.Server.Implementations/Localization/Core/da.json delete mode 100644 MediaBrowser.Server.Implementations/Localization/Core/de.json delete mode 100644 MediaBrowser.Server.Implementations/Localization/Core/el.json delete mode 100644 MediaBrowser.Server.Implementations/Localization/Core/en-GB.json delete mode 100644 MediaBrowser.Server.Implementations/Localization/Core/en-US.json delete mode 100644 MediaBrowser.Server.Implementations/Localization/Core/es-AR.json delete mode 100644 MediaBrowser.Server.Implementations/Localization/Core/es-MX.json delete mode 100644 MediaBrowser.Server.Implementations/Localization/Core/es.json delete mode 100644 MediaBrowser.Server.Implementations/Localization/Core/fi.json delete mode 100644 MediaBrowser.Server.Implementations/Localization/Core/fr-CA.json delete mode 100644 MediaBrowser.Server.Implementations/Localization/Core/fr.json delete mode 100644 MediaBrowser.Server.Implementations/Localization/Core/gsw.json delete mode 100644 MediaBrowser.Server.Implementations/Localization/Core/he.json delete mode 100644 MediaBrowser.Server.Implementations/Localization/Core/hr.json delete mode 100644 MediaBrowser.Server.Implementations/Localization/Core/hu.json delete mode 100644 MediaBrowser.Server.Implementations/Localization/Core/id.json delete mode 100644 MediaBrowser.Server.Implementations/Localization/Core/it.json delete mode 100644 MediaBrowser.Server.Implementations/Localization/Core/kk.json delete mode 100644 MediaBrowser.Server.Implementations/Localization/Core/ko.json delete mode 100644 MediaBrowser.Server.Implementations/Localization/Core/ms.json delete mode 100644 MediaBrowser.Server.Implementations/Localization/Core/nb.json delete mode 100644 MediaBrowser.Server.Implementations/Localization/Core/nl.json delete mode 100644 MediaBrowser.Server.Implementations/Localization/Core/pl.json delete mode 100644 MediaBrowser.Server.Implementations/Localization/Core/pt-BR.json delete mode 100644 MediaBrowser.Server.Implementations/Localization/Core/pt-PT.json delete mode 100644 MediaBrowser.Server.Implementations/Localization/Core/ro.json delete mode 100644 MediaBrowser.Server.Implementations/Localization/Core/ru.json delete mode 100644 MediaBrowser.Server.Implementations/Localization/Core/sl-SI.json delete mode 100644 MediaBrowser.Server.Implementations/Localization/Core/sv.json delete mode 100644 MediaBrowser.Server.Implementations/Localization/Core/tr.json delete mode 100644 MediaBrowser.Server.Implementations/Localization/Core/uk.json delete mode 100644 MediaBrowser.Server.Implementations/Localization/Core/vi.json delete mode 100644 MediaBrowser.Server.Implementations/Localization/Core/zh-CN.json delete mode 100644 MediaBrowser.Server.Implementations/Localization/Core/zh-HK.json delete mode 100644 MediaBrowser.Server.Implementations/Localization/Core/zh-TW.json delete mode 100644 MediaBrowser.Server.Implementations/Localization/LocalizationManager.cs delete mode 100644 MediaBrowser.Server.Implementations/Localization/Ratings/au.txt delete mode 100644 MediaBrowser.Server.Implementations/Localization/Ratings/be.txt delete mode 100644 MediaBrowser.Server.Implementations/Localization/Ratings/br.txt delete mode 100644 MediaBrowser.Server.Implementations/Localization/Ratings/ca.txt delete mode 100644 MediaBrowser.Server.Implementations/Localization/Ratings/co.txt delete mode 100644 MediaBrowser.Server.Implementations/Localization/Ratings/de.txt delete mode 100644 MediaBrowser.Server.Implementations/Localization/Ratings/dk.txt delete mode 100644 MediaBrowser.Server.Implementations/Localization/Ratings/fr.txt delete mode 100644 MediaBrowser.Server.Implementations/Localization/Ratings/gb.txt delete mode 100644 MediaBrowser.Server.Implementations/Localization/Ratings/ie.txt delete mode 100644 MediaBrowser.Server.Implementations/Localization/Ratings/jp.txt delete mode 100644 MediaBrowser.Server.Implementations/Localization/Ratings/kz.txt delete mode 100644 MediaBrowser.Server.Implementations/Localization/Ratings/mx.txt delete mode 100644 MediaBrowser.Server.Implementations/Localization/Ratings/nl.txt delete mode 100644 MediaBrowser.Server.Implementations/Localization/Ratings/nz.txt delete mode 100644 MediaBrowser.Server.Implementations/Localization/Ratings/ru.txt delete mode 100644 MediaBrowser.Server.Implementations/Localization/Ratings/us.txt delete mode 100644 MediaBrowser.Server.Implementations/Localization/countries.json delete mode 100644 MediaBrowser.Server.Implementations/Localization/iso6392.txt create mode 100644 MediaBrowser.Server.Startup.Common/TextLocalizer.cs (limited to 'MediaBrowser.Server.Implementations/HttpServer/SwaggerService.cs') diff --git a/Emby.Dlna/Didl/DidlBuilder.cs b/Emby.Dlna/Didl/DidlBuilder.cs index 50668f555..ee5c8fecd 100644 --- a/Emby.Dlna/Didl/DidlBuilder.cs +++ b/Emby.Dlna/Didl/DidlBuilder.cs @@ -104,6 +104,8 @@ namespace Emby.Dlna.Didl writer.WriteStartElement(string.Empty, "item", NS_DIDL); + AddGeneralProperties(item, null, context, writer, filter); + writer.WriteAttributeString("restricted", "1"); writer.WriteAttributeString("id", clientId); @@ -122,8 +124,6 @@ namespace Emby.Dlna.Didl //AddBookmarkInfo(item, user, element); - AddGeneralProperties(item, null, context, writer, filter); - // refID? // storeAttribute(itemNode, object, ClassProperties.REF_ID, false); @@ -501,6 +501,8 @@ namespace Emby.Dlna.Didl { writer.WriteStartElement(string.Empty, "container", NS_DIDL); + AddGeneralProperties(folder, stubType, context, writer, filter); + writer.WriteAttributeString("restricted", "0"); writer.WriteAttributeString("searchable", "1"); writer.WriteAttributeString("childCount", childCount.ToString(_usCulture)); @@ -534,8 +536,6 @@ namespace Emby.Dlna.Didl } } - AddCommonFields(folder, stubType, null, writer, filter); - AddCover(folder, context, stubType, writer); writer.WriteEndElement(); diff --git a/Emby.Server.Implementations/Emby.Server.Implementations.csproj b/Emby.Server.Implementations/Emby.Server.Implementations.csproj index 8d13d206a..33f29d64d 100644 --- a/Emby.Server.Implementations/Emby.Server.Implementations.csproj +++ b/Emby.Server.Implementations/Emby.Server.Implementations.csproj @@ -67,11 +67,14 @@ + + + @@ -144,6 +147,7 @@ + @@ -230,7 +234,9 @@ - + + + {9142eefa-7570-41e1-bfcc-468bb571af2f} @@ -266,8 +272,246 @@ + + swagger-ui\fonts\droid-sans-v6-latin-700.svg + PreserveNewest + + + swagger-ui\fonts\droid-sans-v6-latin-regular.svg + PreserveNewest + + + swagger-ui\images\explorer_icons.png + PreserveNewest + + + swagger-ui\images\logo_small.png + PreserveNewest + + + swagger-ui\images\pet_store_api.png + PreserveNewest + + + swagger-ui\images\throbber.gif + PreserveNewest + + + swagger-ui\images\wordnik_api.png + PreserveNewest + + + swagger-ui\index.html + PreserveNewest + + + swagger-ui\lib\backbone-min.js + PreserveNewest + + + swagger-ui\lib\handlebars-2.0.0.js + PreserveNewest + + + swagger-ui\lib\highlight.7.3.pack.js + PreserveNewest + + + swagger-ui\lib\jquery-1.8.0.min.js + PreserveNewest + + + swagger-ui\lib\jquery.ba-bbq.min.js + PreserveNewest + + + swagger-ui\lib\jquery.slideto.min.js + PreserveNewest + + + swagger-ui\lib\jquery.wiggle.min.js + PreserveNewest + + + swagger-ui\lib\marked.js + PreserveNewest + + + swagger-ui\lib\shred.bundle.js + PreserveNewest + + + swagger-ui\lib\shred\content.js + PreserveNewest + + + swagger-ui\lib\swagger-client.js + PreserveNewest + + + swagger-ui\lib\swagger-oauth.js + PreserveNewest + + + swagger-ui\lib\underscore-min.js + PreserveNewest + + + swagger-ui\o2c.html + PreserveNewest + + + swagger-ui\patch.js + PreserveNewest + + + swagger-ui\swagger-ui.js + PreserveNewest + + + swagger-ui\swagger-ui.min.js + PreserveNewest + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + swagger-ui\fonts\droid-sans-v6-latin-700.eot + PreserveNewest + + + swagger-ui\fonts\droid-sans-v6-latin-700.ttf + PreserveNewest + + + swagger-ui\fonts\droid-sans-v6-latin-700.woff + PreserveNewest + + + swagger-ui\fonts\droid-sans-v6-latin-700.woff2 + PreserveNewest + + + swagger-ui\fonts\droid-sans-v6-latin-regular.eot + PreserveNewest + + + swagger-ui\fonts\droid-sans-v6-latin-regular.ttf + PreserveNewest + + + swagger-ui\fonts\droid-sans-v6-latin-regular.woff + PreserveNewest + + + swagger-ui\fonts\droid-sans-v6-latin-regular.woff2 + PreserveNewest + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + swagger-ui\css\reset.css + PreserveNewest + + + swagger-ui\css\screen.css + PreserveNewest + + + swagger-ui\css\typography.css + PreserveNewest + +