diff options
| author | LukePulverenti <luke.pulverenti@gmail.com> | 2013-03-07 00:34:00 -0500 |
|---|---|---|
| committer | LukePulverenti <luke.pulverenti@gmail.com> | 2013-03-07 00:34:00 -0500 |
| commit | 4f67fc4aefc11c1a4293227c70de922dbe03c652 (patch) | |
| tree | 67af7ffa36b002969968e06467c624def3e97dc6 | |
| parent | 60545c433b7d383147adb57bb91e720c3b547054 (diff) | |
removed base kernel and ikernel
94 files changed, 552 insertions, 870 deletions
diff --git a/MediaBrowser.Api/EnvironmentService.cs b/MediaBrowser.Api/EnvironmentService.cs index 56be18d86..6296711ed 100644 --- a/MediaBrowser.Api/EnvironmentService.cs +++ b/MediaBrowser.Api/EnvironmentService.cs @@ -1,8 +1,8 @@ -using MediaBrowser.Common.Implementations.HttpServer; -using MediaBrowser.Common.Net; +using MediaBrowser.Common.Net; using MediaBrowser.Controller.IO; using MediaBrowser.Model.IO; using MediaBrowser.Model.Net; +using MediaBrowser.Server.Implementations.HttpServer; using ServiceStack.ServiceHost; using System; using System.Collections.Generic; diff --git a/MediaBrowser.Api/Images/ImageService.cs b/MediaBrowser.Api/Images/ImageService.cs index 1c0e6c68d..d2a612cb9 100644 --- a/MediaBrowser.Api/Images/ImageService.cs +++ b/MediaBrowser.Api/Images/ImageService.cs @@ -1,11 +1,11 @@ using MediaBrowser.Common.Extensions; using MediaBrowser.Common.IO; -using MediaBrowser.Common.Implementations.HttpServer; using MediaBrowser.Common.Net; using MediaBrowser.Controller; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; using MediaBrowser.Model.Entities; +using MediaBrowser.Server.Implementations.HttpServer; using ServiceStack.ServiceHost; using ServiceStack.Text.Controller; using System; diff --git a/MediaBrowser.Api/Javascript/JavascriptApiClientService.cs b/MediaBrowser.Api/Javascript/JavascriptApiClientService.cs index 165574d74..7c4d0d84f 100644 --- a/MediaBrowser.Api/Javascript/JavascriptApiClientService.cs +++ b/MediaBrowser.Api/Javascript/JavascriptApiClientService.cs @@ -1,6 +1,6 @@ using MediaBrowser.Common.Extensions; -using MediaBrowser.Common.Implementations.HttpServer; using MediaBrowser.Common.Net; +using MediaBrowser.Server.Implementations.HttpServer; using ServiceStack.ServiceHost; using System; using System.IO; diff --git a/MediaBrowser.Api/Library/LibraryService.cs b/MediaBrowser.Api/Library/LibraryService.cs index b49cc568f..39cbe6490 100644 --- a/MediaBrowser.Api/Library/LibraryService.cs +++ b/MediaBrowser.Api/Library/LibraryService.cs @@ -1,10 +1,8 @@ using MediaBrowser.Common; -using MediaBrowser.Common.Implementations.HttpServer; -using MediaBrowser.Common.Kernel; -using MediaBrowser.Controller; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; using MediaBrowser.Model.Dto; +using MediaBrowser.Server.Implementations.HttpServer; using ServiceStack.ServiceHost; using System; using System.Collections.Generic; diff --git a/MediaBrowser.Api/Library/LibraryStructureService.cs b/MediaBrowser.Api/Library/LibraryStructureService.cs index df8b2907d..0ae73ed45 100644 --- a/MediaBrowser.Api/Library/LibraryStructureService.cs +++ b/MediaBrowser.Api/Library/LibraryStructureService.cs @@ -1,7 +1,7 @@ -using MediaBrowser.Common.Implementations.HttpServer; -using MediaBrowser.Controller; +using MediaBrowser.Controller; using MediaBrowser.Controller.Library; using MediaBrowser.Model.Entities; +using MediaBrowser.Server.Implementations.HttpServer; using ServiceStack.ServiceHost; using System; using System.Collections.Generic; diff --git a/MediaBrowser.Api/LocalizationService.cs b/MediaBrowser.Api/LocalizationService.cs index 18c33a90a..1493e8e44 100644 --- a/MediaBrowser.Api/LocalizationService.cs +++ b/MediaBrowser.Api/LocalizationService.cs @@ -1,7 +1,7 @@ -using MediaBrowser.Common.Implementations.HttpServer; -using MediaBrowser.Controller.Localization; +using MediaBrowser.Controller.Localization; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Globalization; +using MediaBrowser.Server.Implementations.HttpServer; using MoreLinq; using ServiceStack.ServiceHost; using System.Collections.Generic; diff --git a/MediaBrowser.Api/MediaBrowser.Api.csproj b/MediaBrowser.Api/MediaBrowser.Api.csproj index c7bba4e9a..5cedbf85f 100644 --- a/MediaBrowser.Api/MediaBrowser.Api.csproj +++ b/MediaBrowser.Api/MediaBrowser.Api.csproj @@ -121,10 +121,6 @@ <Compile Include="WebSocket\SystemInfoWebSocketListener.cs" /> </ItemGroup> <ItemGroup> - <ProjectReference Include="..\MediaBrowser.Common.Implementations\MediaBrowser.Common.Implementations.csproj"> - <Project>{c4d2573a-3fd3-441f-81af-174ac4cd4e1d}</Project> - <Name>MediaBrowser.Common.Implementations</Name> - </ProjectReference> <ProjectReference Include="..\MediaBrowser.Common\MediaBrowser.Common.csproj"> <Project>{9142eefa-7570-41e1-bfcc-468bb571af2f}</Project> <Name>MediaBrowser.Common</Name> @@ -137,6 +133,10 @@ <Project>{7eeeb4bb-f3e8-48fc-b4c5-70f0fff8329b}</Project> <Name>MediaBrowser.Model</Name> </ProjectReference> + <ProjectReference Include="..\MediaBrowser.Server.Implementations\MediaBrowser.Server.Implementations.csproj"> + <Project>{2e781478-814d-4a48-9d80-bff206441a65}</Project> + <Name>MediaBrowser.Server.Implementations</Name> + </ProjectReference> </ItemGroup> <ItemGroup> <None Include="packages.config" /> diff --git a/MediaBrowser.Api/PackageService.cs b/MediaBrowser.Api/PackageService.cs index 1c0508c6d..e8ff02539 100644 --- a/MediaBrowser.Api/PackageService.cs +++ b/MediaBrowser.Api/PackageService.cs @@ -1,8 +1,8 @@ using MediaBrowser.Common; using MediaBrowser.Common.Extensions; -using MediaBrowser.Common.Implementations.HttpServer; using MediaBrowser.Controller.Updates; using MediaBrowser.Model.Updates; +using MediaBrowser.Server.Implementations.HttpServer; using ServiceStack.ServiceHost; using System; using System.Collections.Generic; diff --git a/MediaBrowser.Api/Playback/BaseStreamingService.cs b/MediaBrowser.Api/Playback/BaseStreamingService.cs index 5107d13c2..796366181 100644 --- a/MediaBrowser.Api/Playback/BaseStreamingService.cs +++ b/MediaBrowser.Api/Playback/BaseStreamingService.cs @@ -1,5 +1,4 @@ using MediaBrowser.Common.Extensions; -using MediaBrowser.Common.Implementations.HttpServer; using MediaBrowser.Common.IO; using MediaBrowser.Controller; using MediaBrowser.Controller.Entities; @@ -15,6 +14,7 @@ using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; +using MediaBrowser.Server.Implementations.HttpServer; namespace MediaBrowser.Api.Playback { diff --git a/MediaBrowser.Api/PluginService.cs b/MediaBrowser.Api/PluginService.cs index bec6835e0..847478beb 100644 --- a/MediaBrowser.Api/PluginService.cs +++ b/MediaBrowser.Api/PluginService.cs @@ -1,11 +1,11 @@ using MediaBrowser.Common; using MediaBrowser.Common.Extensions; -using MediaBrowser.Common.Implementations.HttpServer; using MediaBrowser.Common.Security; using MediaBrowser.Controller.Updates; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Plugins; using MediaBrowser.Model.Serialization; +using MediaBrowser.Server.Implementations.HttpServer; using ServiceStack.ServiceHost; using ServiceStack.Text.Controller; using System; diff --git a/MediaBrowser.Api/ScheduledTasks/ScheduledTaskService.cs b/MediaBrowser.Api/ScheduledTasks/ScheduledTaskService.cs index 0c18725fa..5117dc7ac 100644 --- a/MediaBrowser.Api/ScheduledTasks/ScheduledTaskService.cs +++ b/MediaBrowser.Api/ScheduledTasks/ScheduledTaskService.cs @@ -1,8 +1,8 @@ using MediaBrowser.Common.Extensions; -using MediaBrowser.Common.Implementations.HttpServer; using MediaBrowser.Common.ScheduledTasks; using MediaBrowser.Model.Serialization; using MediaBrowser.Model.Tasks; +using MediaBrowser.Server.Implementations.HttpServer; using ServiceStack.ServiceHost; using ServiceStack.Text.Controller; using System; @@ -85,29 +85,18 @@ namespace MediaBrowser.Api.ScheduledTasks private ITaskManager TaskManager { get; set; } /// <summary> - /// The _json serializer - /// </summary> - private readonly IJsonSerializer _jsonSerializer; - - /// <summary> /// Initializes a new instance of the <see cref="ScheduledTaskService" /> class. /// </summary> /// <param name="taskManager">The task manager.</param> - /// <param name="jsonSerializer">The json serializer.</param> /// <exception cref="System.ArgumentNullException">taskManager</exception> - public ScheduledTaskService(ITaskManager taskManager, IJsonSerializer jsonSerializer) + public ScheduledTaskService(ITaskManager taskManager) { if (taskManager == null) { throw new ArgumentNullException("taskManager"); } - if (jsonSerializer == null) - { - throw new ArgumentNullException("jsonSerializer"); - } TaskManager = taskManager; - _jsonSerializer = jsonSerializer; } /// <summary> @@ -157,7 +146,7 @@ namespace MediaBrowser.Api.ScheduledTasks throw new ResourceNotFoundException("Task not found"); } - task.Execute(); + TaskManager.Execute(task); } /// <summary> @@ -174,7 +163,7 @@ namespace MediaBrowser.Api.ScheduledTasks throw new ResourceNotFoundException("Task not found"); } - task.Cancel(); + TaskManager.Cancel(task); } /// <summary> diff --git a/MediaBrowser.Api/ScheduledTasks/ScheduledTasksWebSocketListener.cs b/MediaBrowser.Api/ScheduledTasks/ScheduledTasksWebSocketListener.cs index 4ef791e23..20634301a 100644 --- a/MediaBrowser.Api/ScheduledTasks/ScheduledTasksWebSocketListener.cs +++ b/MediaBrowser.Api/ScheduledTasks/ScheduledTasksWebSocketListener.cs @@ -1,4 +1,4 @@ -using MediaBrowser.Common.Kernel; +using MediaBrowser.Common.Net; using MediaBrowser.Common.ScheduledTasks; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Tasks; diff --git a/MediaBrowser.Api/SystemService.cs b/MediaBrowser.Api/SystemService.cs index 96ed70b8f..3fdf621c0 100644 --- a/MediaBrowser.Api/SystemService.cs +++ b/MediaBrowser.Api/SystemService.cs @@ -1,11 +1,11 @@ using MediaBrowser.Common; using MediaBrowser.Common.Extensions; -using MediaBrowser.Common.Implementations.HttpServer; using MediaBrowser.Controller; using MediaBrowser.Controller.Configuration; using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Serialization; using MediaBrowser.Model.System; +using MediaBrowser.Server.Implementations.HttpServer; using ServiceStack.ServiceHost; using System; using System.IO; @@ -66,7 +66,7 @@ namespace MediaBrowser.Api /// <summary> /// The _app host /// </summary> - private readonly IApplicationHost _appHost; + private readonly IServerApplicationHost _appHost; /// <summary> /// The _configuration manager @@ -80,7 +80,7 @@ namespace MediaBrowser.Api /// <param name="appHost">The app host.</param> /// <param name="configurationManager">The configuration manager.</param> /// <exception cref="System.ArgumentNullException">jsonSerializer</exception> - public SystemService(IJsonSerializer jsonSerializer, IApplicationHost appHost, IServerConfigurationManager configurationManager) + public SystemService(IJsonSerializer jsonSerializer, IServerApplicationHost appHost, IServerConfigurationManager configurationManager) : base() { if (jsonSerializer == null) @@ -104,7 +104,7 @@ namespace MediaBrowser.Api /// <returns>System.Object.</returns> public object Get(GetSystemInfo request) { - var result = Kernel.Instance.GetSystemInfo(); + var result = _appHost.GetSystemInfo(); return ToOptimizedResult(result); } @@ -132,7 +132,7 @@ namespace MediaBrowser.Api Task.Run(async () => { await Task.Delay(100); - Kernel.Instance.PerformPendingRestart(); + _appHost.PerformPendingRestart(); }); } diff --git a/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs b/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs index e2dd0519a..9d056c699 100644 --- a/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs +++ b/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs @@ -1,8 +1,8 @@ -using MediaBrowser.Common.Implementations.HttpServer; -using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; using MediaBrowser.Model.Dto; using MediaBrowser.Model.Entities; +using MediaBrowser.Server.Implementations.HttpServer; using ServiceStack.ServiceHost; using System; using System.Collections.Generic; diff --git a/MediaBrowser.Api/UserLibrary/ItemsService.cs b/MediaBrowser.Api/UserLibrary/ItemsService.cs index b89715d1c..c2b01f9b0 100644 --- a/MediaBrowser.Api/UserLibrary/ItemsService.cs +++ b/MediaBrowser.Api/UserLibrary/ItemsService.cs @@ -1,10 +1,9 @@ -using MediaBrowser.Common.Implementations.HttpServer; -using MediaBrowser.Controller; -using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Library; using MediaBrowser.Model.Dto; using MediaBrowser.Model.Entities; +using MediaBrowser.Server.Implementations.HttpServer; using ServiceStack.ServiceHost; using System; using System.Collections.Generic; diff --git a/MediaBrowser.Api/UserLibrary/UserLibraryService.cs b/MediaBrowser.Api/UserLibrary/UserLibraryService.cs index c40e59998..ca439b346 100644 --- a/MediaBrowser.Api/UserLibrary/UserLibraryService.cs +++ b/MediaBrowser.Api/UserLibrary/UserLibraryService.cs @@ -1,12 +1,11 @@ -using MediaBrowser.Common.Implementations.HttpServer; -using MediaBrowser.Controller; -using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Library; using MediaBrowser.Model.Connectivity; using MediaBrowser.Model.Dto; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Serialization; +using MediaBrowser.Server.Implementations.HttpServer; using ServiceStack.ServiceHost; using ServiceStack.Text.Controller; using System; diff --git a/MediaBrowser.Api/UserService.cs b/MediaBrowser.Api/UserService.cs index abf07f924..d1606f954 100644 --- a/MediaBrowser.Api/UserService.cs +++ b/MediaBrowser.Api/UserService.cs @@ -1,8 +1,8 @@ using MediaBrowser.Common.Extensions; -using MediaBrowser.Common.Implementations.HttpServer; using MediaBrowser.Controller.Library; using MediaBrowser.Model.Dto; using MediaBrowser.Model.Serialization; +using MediaBrowser.Server.Implementations.HttpServer; using ServiceStack.ServiceHost; using ServiceStack.Text.Controller; using System; diff --git a/MediaBrowser.Api/WeatherService.cs b/MediaBrowser.Api/WeatherService.cs index d71951182..f2ba68113 100644 --- a/MediaBrowser.Api/WeatherService.cs +++ b/MediaBrowser.Api/WeatherService.cs @@ -1,6 +1,6 @@ -using MediaBrowser.Common.Implementations.HttpServer; -using MediaBrowser.Controller; +using MediaBrowser.Controller; using MediaBrowser.Model.Weather; +using MediaBrowser.Server.Implementations.HttpServer; using ServiceStack.ServiceHost; using System.Linq; using System.Threading; diff --git a/MediaBrowser.Api/WebSocket/LogFileWebSocketListener.cs b/MediaBrowser.Api/WebSocket/LogFileWebSocketListener.cs index 2480b2af8..f11bae523 100644 --- a/MediaBrowser.Api/WebSocket/LogFileWebSocketListener.cs +++ b/MediaBrowser.Api/WebSocket/LogFileWebSocketListener.cs @@ -1,5 +1,5 @@ using MediaBrowser.Common.IO; -using MediaBrowser.Common.Kernel; +using MediaBrowser.Common.Net; using MediaBrowser.Model.Logging; using System; using System.Collections.Generic; diff --git a/MediaBrowser.Api/WebSocket/SystemInfoWebSocketListener.cs b/MediaBrowser.Api/WebSocket/SystemInfoWebSocketListener.cs index 40c3f2f24..ae8f41c36 100644 --- a/MediaBrowser.Api/WebSocket/SystemInfoWebSocketListener.cs +++ b/MediaBrowser.Api/WebSocket/SystemInfoWebSocketListener.cs @@ -1,4 +1,4 @@ -using MediaBrowser.Common.Kernel; +using MediaBrowser.Common.Net; using MediaBrowser.Controller; using MediaBrowser.Model.Logging; using MediaBrowser.Model.System; @@ -23,17 +23,16 @@ namespace MediaBrowser.Api.WebSocket /// <summary> /// The _kernel /// </summary> - private readonly IKernel _kernel; + private readonly IServerApplicationHost _appHost; /// <summary> /// Initializes a new instance of the <see cref="SystemInfoWebSocketListener" /> class. /// </summary> - /// <param name="kernel">The kernel.</param> /// <param name="logger">The logger.</param> - public SystemInfoWebSocketListener(Kernel kernel, ILogger logger) + public SystemInfoWebSocketListener(ILogger logger, IServerApplicationHost appHost) : base(logger) { - _kernel = kernel; + _appHost = appHost; } /// <summary> @@ -43,7 +42,7 @@ namespace MediaBrowser.Api.WebSocket /// <returns>Task{SystemInfo}.</returns> protected override Task<SystemInfo> GetDataToSend(object state) { - return Task.FromResult(_kernel.GetSystemInfo()); + return Task.FromResult(_appHost.GetSystemInfo()); } } } diff --git a/MediaBrowser.Common.Implementations/BaseApplicationHost.cs b/MediaBrowser.Common.Implementations/BaseApplicationHost.cs index 77ff4f188..a5af2ff66 100644 --- a/MediaBrowser.Common.Implementations/BaseApplicationHost.cs +++ b/MediaBrowser.Common.Implementations/BaseApplicationHost.cs @@ -1,13 +1,11 @@ using MediaBrowser.Common.Configuration; +using MediaBrowser.Common.Events; using MediaBrowser.Common.Implementations.Logging; using MediaBrowser.Common.Implementations.NetworkManagement; using MediaBrowser.Common.Implementations.ScheduledTasks; using MediaBrowser.Common.Implementations.Security; using MediaBrowser.Common.Implementations.Serialization; -using MediaBrowser.Common.Implementations.Udp; using MediaBrowser.Common.Implementations.Updates; -using MediaBrowser.Common.Implementations.WebSocket; -using MediaBrowser.Common.Kernel; using MediaBrowser.Common.Net; using MediaBrowser.Common.Plugins; using MediaBrowser.Common.ScheduledTasks; @@ -15,6 +13,7 @@ using MediaBrowser.Common.Security; using MediaBrowser.Common.Updates; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Serialization; +using MediaBrowser.Model.System; using MediaBrowser.Model.Updates; using SimpleInjector; using System; @@ -31,6 +30,22 @@ namespace MediaBrowser.Common.Implementations where TApplicationPathsType : class, IApplicationPaths, new() { /// <summary> + /// Occurs when [has pending restart changed]. + /// </summary> + public event EventHandler HasPendingRestartChanged; + + /// <summary> + /// Occurs when [application updated]. + /// </summary> + public event EventHandler<GenericEventArgs<Version>> ApplicationUpdated; + + /// <summary> + /// Gets or sets a value indicating whether this instance has changes that require the entire application to restart. + /// </summary> + /// <value><c>true</c> if this instance has pending application restart; otherwise, <c>false</c>.</value> + public bool HasPendingRestart { get; private set; } + + /// <summary> /// Gets or sets the logger. /// </summary> /// <value>The logger.</value> @@ -132,11 +147,11 @@ namespace MediaBrowser.Common.Implementations /// Gets the kernel. /// </summary> /// <value>The kernel.</value> - protected IKernel Kernel { get; private set; } protected ITaskManager TaskManager { get; private set; } protected ISecurityManager SecurityManager { get; private set; } protected IPackageManager PackageManager { get; private set; } protected IHttpClient HttpClient { get; private set; } + protected INetworkManager NetworkManager { get; private set; } protected IConfigurationManager ConfigurationManager { get; private set; } @@ -168,15 +183,11 @@ namespace MediaBrowser.Common.Implementations Logger.Info("Version {0} initializing", ApplicationVersion); - Kernel = GetKernel(); - await RegisterResources().ConfigureAwait(false); FindParts(); Task.Run(() => ConfigureAutoRunAtStartup()); - - Kernel.Init(); } /// <summary> @@ -191,7 +202,6 @@ namespace MediaBrowser.Common.Implementations /// <value>The name of the log file prefix.</value> protected abstract string LogFilePrefixName { get; } - protected abstract IKernel GetKernel(); protected abstract IConfigurationManager GetConfigurationManager(); /// <summary> @@ -199,10 +209,6 @@ namespace MediaBrowser.Common.Implementations /// </summary> protected virtual void FindParts() { - Resolve<IHttpServer>().Init(GetExports<IRestfulService>(false)); - Resolve<IServerManager>().AddWebSocketListeners(GetExports<IWebSocketListener>(false)); - - Resolve<IServerManager>().Start(); Resolve<ITaskManager>().AddTasks(GetExports<IScheduledTask>(false)); Plugins = GetExports<IPlugin>(); @@ -239,11 +245,7 @@ namespace MediaBrowser.Common.Implementations RegisterSingleInstance<IApplicationPaths>(ApplicationPaths); - var networkManager = new NetworkManager(); - - var serverManager = new ServerManager.ServerManager(this, Kernel, networkManager, JsonSerializer, Logger, ConfigurationManager); - - TaskManager = new TaskManager(ApplicationPaths, JsonSerializer, Logger, serverManager); + TaskManager = new TaskManager(ApplicationPaths, JsonSerializer, Logger); RegisterSingleInstance(JsonSerializer); RegisterSingleInstance(XmlSerializer); @@ -251,25 +253,22 @@ namespace MediaBrowser.Common.Implementations RegisterSingleInstance(LogManager); RegisterSingleInstance(Logger); - RegisterSingleInstance(Kernel); - RegisterSingleInstance(TaskManager); - RegisterSingleInstance<IWebSocketServer>(() => new AlchemyServer(Logger)); RegisterSingleInstance(ProtobufSerializer); - RegisterSingleInstance<IUdpServer>(new UdpServer(Logger), false); HttpClient = new HttpClientManager.HttpClientManager(ApplicationPaths, Logger); RegisterSingleInstance(HttpClient); - RegisterSingleInstance<INetworkManager>(networkManager); - RegisterSingleInstance<IServerManager>(serverManager); + NetworkManager = new NetworkManager(); - SecurityManager = new PluginSecurityManager(Kernel, HttpClient, JsonSerializer, ApplicationPaths); + RegisterSingleInstance(NetworkManager); + + SecurityManager = new PluginSecurityManager(this, HttpClient, JsonSerializer, ApplicationPaths); RegisterSingleInstance(SecurityManager); - PackageManager = new PackageManager(SecurityManager, networkManager, HttpClient, ApplicationPaths, JsonSerializer, Logger); + PackageManager = new PackageManager(SecurityManager, NetworkManager, HttpClient, ApplicationPaths, JsonSerializer, Logger); RegisterSingleInstance(PackageManager); }); @@ -451,6 +450,34 @@ namespace MediaBrowser.Common.Implementations } /// <summary> + /// Performs the pending restart. + /// </summary> + /// <returns>Task.</returns> + public void PerformPendingRestart() + { + if (HasPendingRestart) + { + Logger.Info("Restarting the application"); + + Restart(); + } + else + { + Logger.Info("PerformPendingRestart - not needed"); + } + } + + /// <summary> + /// Notifies that the kernel that a change has been made that requires a restart + /// </summary> + public void NotifyPendingRestart() + { + HasPendingRestart = true; + + EventHelper.QueueEventIfNotNull(HasPendingRestartChanged, this, EventArgs.Empty, Logger); + } + + /// <summary> /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. /// </summary> public void Dispose() @@ -488,7 +515,20 @@ namespace MediaBrowser.Common.Implementations public abstract Task<CheckForUpdateResult> CheckForApplicationUpdate(CancellationToken cancellationToken, IProgress<double> progress); - public abstract Task UpdateApplication(PackageVersionInfo package, CancellationToken cancellationToken, IProgress<double> progress); + /// <summary> + /// Updates the application. + /// </summary> + /// <param name="package">The package that contains the update</param> + /// <param name="cancellationToken">The cancellation token.</param> + /// <param name="progress">The progress.</param> + /// <returns>Task.</returns> + public async Task UpdateApplication(PackageVersionInfo package, CancellationToken cancellationToken, IProgress<double> progress) + { + var pkgManager = Resolve<IPackageManager>(); + await pkgManager.InstallPackage(progress, package, cancellationToken).ConfigureAwait(false); + + EventHelper.QueueEventIfNotNull(ApplicationUpdated, this, new GenericEventArgs<Version> { Argument = package.version }, Logger); + } public abstract void Shutdown(); } diff --git a/MediaBrowser.Common.Implementations/BaseApplicationPaths.cs b/MediaBrowser.Common.Implementations/BaseApplicationPaths.cs index d16933616..56e699b35 100644 --- a/MediaBrowser.Common.Implementations/BaseApplicationPaths.cs +++ b/MediaBrowser.Common.Implementations/BaseApplicationPaths.cs @@ -1,5 +1,4 @@ using MediaBrowser.Common.Configuration; -using MediaBrowser.Common.Kernel; using System; using System.Configuration; using System.IO; diff --git a/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs b/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs index d2af8fa20..d653a5c9b 100644 --- a/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs +++ b/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs @@ -1,6 +1,5 @@ using MediaBrowser.Common.Configuration; using MediaBrowser.Common.IO; -using MediaBrowser.Common.Kernel; using MediaBrowser.Common.Net; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Net; @@ -9,7 +8,6 @@ using System.Collections.Concurrent; using System.Collections.Generic; using System.IO; using System.Linq; -using System.Net; using System.Net.Cache; using System.Net.Http; using System.Text; diff --git a/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj b/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj index 2f3ebdf19..f73dac71f 100644 --- a/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj +++ b/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj @@ -35,9 +35,6 @@ <RunPostBuildEvent>Always</RunPostBuildEvent> </PropertyGroup> <ItemGroup> - <Reference Include="Alchemy"> - <HintPath>..\packages\Alchemy.2.2.1\lib\net40\Alchemy.dll</HintPath> - </Reference> <Reference Include="Mediabrowser.PluginSecurity"> <HintPath>..\ThirdParty\PluginSecurity\Mediabrowser.PluginSecurity.dll</HintPath> </Reference> @@ -47,41 +44,6 @@ <Reference Include="protobuf-net"> <HintPath>..\packages\protobuf-net.2.0.0.621\lib\net40\protobuf-net.dll</HintPath> </Reference> - <Reference Include="ServiceStack, Version=3.9.38.0, Culture=neutral, processorArchitecture=MSIL"> - <SpecificVersion>False</SpecificVersion> - <HintPath>..\packages\ServiceStack.3.9.38\lib\net35\ServiceStack.dll</HintPath> - </Reference> - <Reference Include="ServiceStack.Api.Swagger, Version=3.9.38.0, Culture=neutral, processorArchitecture=MSIL"> - <SpecificVersion>False</SpecificVersion> - <HintPath>..\packages\ServiceStack.Api.Swagger.3.9.38\lib\net35\ServiceStack.Api.Swagger.dll</HintPath> - </Reference> - <Reference Include="ServiceStack.Common, Version=3.9.38.0, Culture=neutral, processorArchitecture=MSIL"> - <SpecificVersion>False</SpecificVersion> - <HintPath>..\packages\ServiceStack.Common.3.9.38\lib\net35\ServiceStack.Common.dll</HintPath> - </Reference> - <Reference Include="ServiceStack.Interfaces, Version=3.9.38.0, Culture=neutral, processorArchitecture=MSIL"> - <SpecificVersion>False</SpecificVersion> - <HintPath>..\packages\ServiceStack.Common.3.9.38\lib\net35\ServiceStack.Interfaces.dll</HintPath> - </Reference> - <Reference Include="ServiceStack.Logging.NLog"> - <HintPath>..\packages\ServiceStack.Logging.NLog.1.0.6.0\lib\net35\ServiceStack.Logging.NLog.dll</HintPath> - </Reference> - <Reference Include="ServiceStack.OrmLite, Version=3.9.39.0, Culture=neutral, processorArchitecture=MSIL"> - <SpecificVersion>False</SpecificVersion> - <HintPath>..\packages\ServiceStack.OrmLite.SqlServer.3.9.39\lib\ServiceStack.OrmLite.dll</HintPath> - </Reference> - <Reference Include="ServiceStack.OrmLite.SqlServer, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"> - <SpecificVersion>False</SpecificVersion> - <HintPath>..\packages\ServiceStack.OrmLite.SqlServer.3.9.39\lib\ServiceStack.OrmLite.SqlServer.dll</HintPath> - </Reference> - <Reference Include="ServiceStack.Redis, Version=3.9.38.0, Culture=neutral, processorArchitecture=MSIL"> - <SpecificVersion>False</SpecificVersion> - <HintPath>..\packages\ServiceStack.Redis.3.9.38\lib\net35\ServiceStack.Redis.dll</HintPath> - </Reference> - <Reference Include="ServiceStack.ServiceInterface, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"> - <SpecificVersion>False</SpecificVersion> - <HintPath>..\packages\ServiceStack.3.9.38\lib\net35\ServiceStack.ServiceInterface.dll</HintPath> - </Reference> <Reference Include="ServiceStack.Text, Version=3.9.38.0, Culture=neutral, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> <HintPath>..\packages\ServiceStack.Text.3.9.38\lib\net35\ServiceStack.Text.dll</HintPath> @@ -97,16 +59,6 @@ <Reference Include="System.Net" /> <Reference Include="System.Net.Http" /> <Reference Include="System.Net.Http.WebRequest" /> - <Reference Include="System.Reactive.Core"> - <HintPath>..\packages\Rx-Core.2.1.30214.0\lib\Net45\System.Reactive.Core.dll</HintPath> - </Reference> - <Reference Include="System.Reactive.Interfaces"> - <HintPath>..\packages\Rx-Interfaces.2.1.30214.0\lib\Net45\System.Reactive.Interfaces.dll</HintPath> - </Reference> - <Reference Include="System.Reactive.Linq"> - <HintPath>..\packages\Rx-Linq.2.1.30214.0\lib\Net45\System.Reactive.Linq.dll</HintPath> - </Reference> - <Reference Include="System.Web" /> <Reference Include="System.Xml" /> </ItemGroup> <ItemGroup> @@ -117,12 +69,6 @@ <Compile Include="BaseApplicationPaths.cs" /> <Compile Include="Configuration\BaseConfigurationManager.cs" /> <Compile Include="HttpClientManager\HttpClientManager.cs" /> - <Compile Include="HttpServer\BaseRestService.cs" /> - <Compile Include="HttpServer\HttpServer.cs" /> - <Compile Include="HttpServer\NativeWebSocket.cs" /> - <Compile Include="HttpServer\ServerFactory.cs" /> - <Compile Include="HttpServer\StreamWriter.cs" /> - <Compile Include="HttpServer\SwaggerService.cs" /> <Compile Include="Logging\LogHelper.cs" /> <Compile Include="Logging\NLogger.cs" /> <Compile Include="Logging\NlogManager.cs" /> @@ -140,12 +86,8 @@ <Compile Include="Serialization\JsonSerializer.cs" /> <Compile Include="Serialization\ProtobufSerializer.cs" /> <Compile Include="Serialization\XmlSerializer.cs" /> - <Compile Include="ServerManager\ServerManager.cs" /> - <Compile Include="ServerManager\WebSocketConnection.cs" /> - <Compile Include="Udp\UdpServer.cs" /> + <Compile Include="Updates\ApplicationUpdater.cs" /> <Compile Include="Updates\PackageManager.cs" /> - <Compile Include="WebSocket\AlchemyServer.cs" /> - <Compile Include="WebSocket\AlchemyWebSocket.cs" /> </ItemGroup> <ItemGroup> <ProjectReference Include="..\MediaBrowser.Common\MediaBrowser.Common.csproj"> @@ -159,52 +101,6 @@ </ItemGroup> <ItemGroup> <None Include="packages.config" /> - <EmbeddedResource Include="ServerManager\RegisterServer.bat" /> - </ItemGroup> - <ItemGroup> - <Content Include="README.txt" /> - <Content Include="swagger-ui\css\screen.css"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> - <Content Include="swagger-ui\images\pet_store_api.png"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> - <Content Include="swagger-ui\images\wordnik_api.png"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> - <Content Include="swagger-ui\index.html"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> - <Content Include="swagger-ui\lib\backbone-min.js"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> - <Content Include="swagger-ui\lib\handlebars.runtime-1.0.0.beta.6.js"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> - <Content Include="swagger-ui\lib\jquery.ba-bbq.min.js"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> - <Content Include="swagger-ui\lib\jquery.min.js"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> - <Content Include="swagger-ui\lib\jquery.slideto.min.js"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> - <Content Include="swagger-ui\lib\jquery.wiggle.min.js"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> - <Content Include="swagger-ui\lib\swagger.js"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> - <Content Include="swagger-ui\lib\underscore-min.js"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> - <Content Include="swagger-ui\swagger-ui.js"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> - <Content Include="swagger-ui\swagger-ui.min.js"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> </ItemGroup> <ItemGroup /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> diff --git a/MediaBrowser.Common.Implementations/ScheduledTasks/ScheduledTaskWorker.cs b/MediaBrowser.Common.Implementations/ScheduledTasks/ScheduledTaskWorker.cs index d5adf3265..f57d48f07 100644 --- a/MediaBrowser.Common.Implementations/ScheduledTasks/ScheduledTaskWorker.cs +++ b/MediaBrowser.Common.Implementations/ScheduledTasks/ScheduledTaskWorker.cs @@ -1,6 +1,5 @@ using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Extensions; -using MediaBrowser.Common.Kernel; using MediaBrowser.Common.ScheduledTasks; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Serialization; @@ -50,12 +49,6 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks private ITaskManager TaskManager { get; set; } /// <summary> - /// Gets or sets the server manager. - /// </summary> - /// <value>The server manager.</value> - private IServerManager ServerManager { get; set; } - - /// <summary> /// Initializes a new instance of the <see cref="ScheduledTaskWorker" /> class. /// </summary> /// <param name="scheduledTask">The scheduled task.</param> @@ -64,7 +57,7 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks /// <param name="jsonSerializer">The json serializer.</param> /// <param name="logger">The logger.</param> /// <param name="serverManager">The server manager.</param> - public ScheduledTaskWorker(IScheduledTask scheduledTask, IApplicationPaths applicationPaths, ITaskManager taskManager, IJsonSerializer jsonSerializer, ILogger logger, IServerManager serverManager) + public ScheduledTaskWorker(IScheduledTask scheduledTask, IApplicationPaths applicationPaths, ITaskManager taskManager, IJsonSerializer jsonSerializer, ILogger logger) { if (scheduledTask == null) { @@ -86,17 +79,12 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks { throw new ArgumentNullException("logger"); } - if (serverManager == null) - { - throw new ArgumentNullException("serverManager"); - } ScheduledTask = scheduledTask; ApplicationPaths = applicationPaths; TaskManager = taskManager; JsonSerializer = jsonSerializer; Logger = logger; - ServerManager = serverManager; ReloadTriggerEvents(true); } @@ -331,6 +319,8 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks Logger.Info("Executing {0}", Name); + ((TaskManager)TaskManager).OnTaskExecuting(ScheduledTask); + var progress = new Progress<double>(); progress.ProgressChanged += progress_ProgressChanged; @@ -338,8 +328,6 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks TaskCompletionStatus status; CurrentExecutionStartTime = DateTime.UtcNow; - ServerManager.SendWebSocketMessage("ScheduledTaskBeginExecute", Name); - try { await ExecuteTask(CurrentCancellationTokenSource.Token, progress).ConfigureAwait(false); @@ -517,8 +505,7 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks /// <param name="startTime">The start time.</param> /// <param name="endTime">The end time.</param> /// <param name="status">The status.</param> - /// <param name="sendNotification">if set to <c>true</c> [send notification].</param> - private void OnTaskCompleted(DateTime startTime, DateTime endTime, TaskCompletionStatus status, bool sendNotification = true) + private void OnTaskCompleted(DateTime startTime, DateTime endTime, TaskCompletionStatus status) { var elapsedTime = endTime - startTime; @@ -537,10 +524,7 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks LastExecutionResult = result; - if (sendNotification) - { - ServerManager.SendWebSocketMessage("ScheduledTaskEndExecute", result); - } + ((TaskManager) TaskManager).OnTaskCompleted(ScheduledTask, result); } /// <summary> @@ -564,7 +548,7 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks if (State == TaskState.Running) { - OnTaskCompleted(CurrentExecutionStartTime, DateTime.UtcNow, TaskCompletionStatus.Aborted, false); + OnTaskCompleted(CurrentExecutionStartTime, DateTime.UtcNow, TaskCompletionStatus.Aborted); } if (CurrentCancellationTokenSource != null) diff --git a/MediaBrowser.Common.Implementations/ScheduledTasks/TaskManager.cs b/MediaBrowser.Common.Implementations/ScheduledTasks/TaskManager.cs index 946887303..61e1f6329 100644 --- a/MediaBrowser.Common.Implementations/ScheduledTasks/TaskManager.cs +++ b/MediaBrowser.Common.Implementations/ScheduledTasks/TaskManager.cs @@ -1,5 +1,6 @@ -using MediaBrowser.Common.Configuration; -using MediaBrowser.Common.Kernel; +using System.Threading.Tasks; +using MediaBrowser.Common.Configuration; +using MediaBrowser.Common.Events; using MediaBrowser.Common.ScheduledTasks; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Serialization; @@ -15,6 +16,9 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks /// </summary> public class TaskManager : ITaskManager { + public event EventHandler<EventArgs> TaskExecuting; + public event EventHandler<GenericEventArgs<TaskResult>> TaskCompleted; + /// <summary> /// Gets the list of Scheduled Tasks /// </summary> @@ -45,25 +49,17 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks private ILogger Logger { get; set; } /// <summary> - /// Gets or sets the server manager. - /// </summary> - /// <value>The server manager.</value> - private IServerManager ServerManager { get; set; } - - /// <summary> /// Initializes a new instance of the <see cref="TaskManager" /> class. /// </summary> /// <param name="applicationPaths">The application paths.</param> /// <param name="jsonSerializer">The json serializer.</param> /// <param name="logger">The logger.</param> - /// <param name="serverManager">The server manager.</param> /// <exception cref="System.ArgumentException">kernel</exception> - public TaskManager(IApplicationPaths applicationPaths, IJsonSerializer jsonSerializer, ILogger logger, IServerManager serverManager) + public TaskManager(IApplicationPaths applicationPaths, IJsonSerializer jsonSerializer, ILogger logger) { ApplicationPaths = applicationPaths; JsonSerializer = jsonSerializer; Logger = logger; - ServerManager = serverManager; ScheduledTasks = new IScheduledTaskWorker[] { }; } @@ -75,7 +71,9 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks public void CancelIfRunningAndQueue<T>() where T : IScheduledTask { - ScheduledTasks.First(t => t.ScheduledTask.GetType() == typeof(T)).CancelIfRunning(); + var task = ScheduledTasks.First(t => t.ScheduledTask.GetType() == typeof(T)); + ((ScheduledTaskWorker)task).CancelIfRunning(); + QueueScheduledTask<T>(); } @@ -101,7 +99,7 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks QueueScheduledTask(scheduledTask); } - + /// <summary> /// Queues the scheduled task. /// </summary> @@ -115,7 +113,7 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks // If it's idle just execute immediately if (task.State == TaskState.Idle) { - task.Execute(); + ((ScheduledTaskWorker)task).Execute(); return; } @@ -132,31 +130,6 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks } /// <summary> - /// Called when [task completed]. - /// </summary> - /// <param name="task">The task.</param> - public void OnTaskCompleted(IScheduledTask task) - { - // Execute queued tasks - lock (_taskQueue) - { - var copy = _taskQueue.ToList(); - - foreach (var type in copy) - { - var scheduledTask = ScheduledTasks.First(t => t.GetType() == type); - - if (scheduledTask.State == TaskState.Idle) - { - scheduledTask.Execute(); - - _taskQueue.Remove(type); - } - } - } - } - - /// <summary> /// Adds the tasks. /// </summary> /// <param name="tasks">The tasks.</param> @@ -164,7 +137,7 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks { var myTasks = ScheduledTasks.ToList(); - myTasks.AddRange(tasks.Select(t => new ScheduledTaskWorker(t, ApplicationPaths, this, JsonSerializer, Logger, ServerManager))); + myTasks.AddRange(tasks.Select(t => new ScheduledTaskWorker(t, ApplicationPaths, this, JsonSerializer, Logger))); ScheduledTasks = myTasks.ToArray(); } @@ -189,5 +162,25 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks task.Dispose(); } } + + public void Cancel(IScheduledTaskWorker task) + { + ((ScheduledTaskWorker)task).Cancel(); + } + + public Task Execute(IScheduledTaskWorker task) + { + return ((ScheduledTaskWorker)task).Execute(); + } + + internal void OnTaskExecuting(IScheduledTask task) + { + EventHelper.QueueEventIfNotNull(TaskExecuting, task, EventArgs.Empty, Logger); + } + + internal void OnTaskCompleted(IScheduledTask task, TaskResult result) + { + EventHelper.QueueEventIfNotNull(TaskExecuting, task, new GenericEventArgs<TaskResult> { Argument = result }, Logger); + } } } diff --git a/MediaBrowser.Common.Implementations/ScheduledTasks/Tasks/SystemUpdateTask.cs b/MediaBrowser.Common.Implementations/ScheduledTasks/Tasks/SystemUpdateTask.cs index 7da1b9c5a..e74693f93 100644 --- a/MediaBrowser.Common.Implementations/ScheduledTasks/Tasks/SystemUpdateTask.cs +++ b/MediaBrowser.Common.Implementations/ScheduledTasks/Tasks/SystemUpdateTask.cs @@ -1,5 +1,4 @@ using MediaBrowser.Common.Configuration; -using MediaBrowser.Common.Kernel; using MediaBrowser.Common.ScheduledTasks; using MediaBrowser.Model.Logging; using System; @@ -31,24 +30,16 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks.Tasks private ILogger Logger { get; set; } /// <summary> - /// Gets or sets the kernel. - /// </summary> - /// <value>The kernel.</value> - private IKernel Kernel { get; set; } - - /// <summary> /// Initializes a new instance of the <see cref="SystemUpdateTask" /> class. /// </summary> /// <param name="appHost">The app host.</param> /// <param name="configurationManager">The configuration manager.</param> /// <param name="logger">The logger.</param> - /// <param name="kernel">The kernel.</param> - public SystemUpdateTask(IApplicationHost appHost, IConfigurationManager configurationManager, ILogger logger, IKernel kernel) + public SystemUpdateTask(IApplicationHost appHost, IConfigurationManager configurationManager, ILogger logger) { _appHost = appHost; ConfigurationManager = configurationManager; Logger = logger; - Kernel = kernel; } /// <summary> @@ -110,8 +101,6 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks.Tasks // Release the event handler innerProgress.ProgressChanged -= innerProgressHandler; - - Kernel.OnApplicationUpdated(updateInfo.AvailableVersion); } else { diff --git a/MediaBrowser.Common.Implementations/Security/PluginSecurityManager.cs b/MediaBrowser.Common.Implementations/Security/PluginSecurityManager.cs index d1a4940ef..0404ee7fe 100644 --- a/MediaBrowser.Common.Implementations/Security/PluginSecurityManager.cs +++ b/MediaBrowser.Common.Implementations/Security/PluginSecurityManager.cs @@ -3,7 +3,6 @@ using MediaBrowser.Common.Security; using MediaBrowser.Model.Serialization; using Mediabrowser.Model.Entities; using Mediabrowser.PluginSecurity; -using MediaBrowser.Common.Kernel; using MediaBrowser.Common.Net; using System; using System.Threading; @@ -44,29 +43,19 @@ namespace MediaBrowser.Common.Implementations.Security private IHttpClient _httpClient; private IJsonSerializer _jsonSerializer; - - /// <summary> - /// The _kernel - /// </summary> - private readonly IKernel _kernel; + private IApplicationHost _appHost; /// <summary> /// Initializes a new instance of the <see cref="PluginSecurityManager" /> class. /// </summary> - /// <param name="kernel">The kernel.</param> - public PluginSecurityManager(IKernel kernel, IHttpClient httpClient, IJsonSerializer jsonSerializer, IApplicationPaths appPaths) + public PluginSecurityManager(IApplicationHost appHost, IHttpClient httpClient, IJsonSerializer jsonSerializer, IApplicationPaths appPaths) { - if (kernel == null) - { - throw new ArgumentNullException("kernel"); - } - if (httpClient == null) { throw new ArgumentNullException("httpClient"); } - - _kernel = kernel; + + _appHost = appHost; _httpClient = httpClient; _jsonSerializer = jsonSerializer; MBRegistration.Init(appPaths); @@ -98,7 +87,7 @@ namespace MediaBrowser.Common.Implementations.Security // Clear this so it will re-evaluate ResetSupporterInfo(); // And we'll need to restart to re-evaluate the status of plug-ins - _kernel.NotifyPendingRestart(); + _appHost.NotifyPendingRestart(); } } @@ -115,7 +104,7 @@ namespace MediaBrowser.Common.Implementations.Security { MBRegistration.LegacyKey = value; // And we'll need to restart to re-evaluate the status of plug-ins - _kernel.NotifyPendingRestart(); + _appHost.NotifyPendingRestart(); } } diff --git a/MediaBrowser.Common/Updates/ApplicationUpdater.cs b/MediaBrowser.Common.Implementations/Updates/ApplicationUpdater.cs index a796e1bd2..3b06f2006 100644 --- a/MediaBrowser.Common/Updates/ApplicationUpdater.cs +++ b/MediaBrowser.Common.Implementations/Updates/ApplicationUpdater.cs @@ -1,14 +1,8 @@ -using System; -using System.Collections.Generic; +using MediaBrowser.Common.Configuration; using System.Diagnostics; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using System.IO; -using MediaBrowser.Common.Configuration; -using MediaBrowser.Common.Kernel; -namespace MediaBrowser.Common.Updates +namespace MediaBrowser.Common.Implementations.Updates { public enum MBApplication { diff --git a/MediaBrowser.Common.Implementations/packages.config b/MediaBrowser.Common.Implementations/packages.config index 2d6276a8e..0c064f3e4 100644 --- a/MediaBrowser.Common.Implementations/packages.config +++ b/MediaBrowser.Common.Implementations/packages.config @@ -1,17 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <packages> - <package id="Alchemy" version="2.2.1" targetFramework="net45" /> <package id="NLog" version="2.0.0.2000" targetFramework="net45" /> <package id="protobuf-net" version="2.0.0.621" targetFramework="net45" /> - <package id="Rx-Core" version="2.1.30214.0" targetFramework="net45" /> - <package id="Rx-Interfaces" version="2.1.30214.0" targetFramework="net45" /> - <package id="Rx-Linq" version="2.1.30214.0" targetFramework="net45" /> - <package id="ServiceStack" version="3.9.38" targetFramework="net45" /> - <package id="ServiceStack.Api.Swagger" version="3.9.38" targetFramework="net45" /> - <package id="ServiceStack.Common" version="3.9.38" targetFramework="net45" /> - <package id="ServiceStack.Logging.NLog" version="1.0.6.0" targetFramework="net45" /> - <package id="ServiceStack.OrmLite.SqlServer" version="3.9.39" targetFramework="net45" /> - <package id="ServiceStack.Redis" version="3.9.38" targetFramework="net45" /> <package id="ServiceStack.Text" version="3.9.38" targetFramework="net45" /> <package id="SimpleInjector" version="2.0.0-beta5" targetFramework="net45" /> </packages>
\ No newline at end of file diff --git a/MediaBrowser.Common/IApplicationHost.cs b/MediaBrowser.Common/IApplicationHost.cs index 4bd90e531..8165f7723 100644 --- a/MediaBrowser.Common/IApplicationHost.cs +++ b/MediaBrowser.Common/IApplicationHost.cs @@ -13,6 +13,27 @@ namespace MediaBrowser.Common public interface IApplicationHost { /// <summary> + /// Performs the pending restart. + /// </summary> + void PerformPendingRestart(); + + /// <summary> + /// Gets or sets a value indicating whether this instance has pending kernel reload. + /// </summary> + /// <value><c>true</c> if this instance has pending kernel reload; otherwise, <c>false</c>.</value> + bool HasPendingRestart { get; } + + /// <summary> + /// Occurs when [has pending restart changed]. + /// </summary> + event EventHandler HasPendingRestartChanged; + + /// <summary> + /// Notifies the pending restart. + /// </summary> + void NotifyPendingRestart(); + + /// <summary> /// Restarts this instance. /// </summary> void Restart(); diff --git a/MediaBrowser.Common/Kernel/BaseKernel.cs b/MediaBrowser.Common/Kernel/BaseKernel.cs deleted file mode 100644 index cf8133e97..000000000 --- a/MediaBrowser.Common/Kernel/BaseKernel.cs +++ /dev/null @@ -1,167 +0,0 @@ -using MediaBrowser.Common.Configuration; -using MediaBrowser.Common.Events; -using MediaBrowser.Model.Logging; -using MediaBrowser.Model.System; -using System; - -namespace MediaBrowser.Common.Kernel -{ - /// <summary> - /// Represents a shared base kernel for both the Ui and server apps - /// </summary> - public abstract class BaseKernel : IKernel - { - /// <summary> - /// Occurs when [has pending restart changed]. - /// </summary> - public event EventHandler HasPendingRestartChanged; - - #region ApplicationUpdated Event - /// <summary> - /// Occurs when [application updated]. - /// </summary> - public event EventHandler<GenericEventArgs<Version>> ApplicationUpdated; - /// <summary> - /// Called when [application updated]. - /// </summary> - /// <param name="newVersion">The new version.</param> - public void OnApplicationUpdated(Version newVersion) - { - EventHelper.QueueEventIfNotNull(ApplicationUpdated, this, new GenericEventArgs<Version> { Argument = newVersion }, Logger); - - NotifyPendingRestart(); - } - #endregion - - /// <summary> - /// Gets or sets a value indicating whether this instance has changes that require the entire application to restart. - /// </summary> - /// <value><c>true</c> if this instance has pending application restart; otherwise, <c>false</c>.</value> - public bool HasPendingRestart { get; private set; } - - /// <summary> - /// Gets the UDP server port number. - /// This can't be configurable because then the user would have to configure their client to discover the server. - /// </summary> - /// <value>The UDP server port number.</value> - public abstract int UdpServerPortNumber { get; } - - /// <summary> - /// Gets the name of the web application that can be used for url building. - /// All api urls will be of the form {protocol}://{host}:{port}/{appname}/... - /// </summary> - /// <value>The name of the web application.</value> - public string WebApplicationName - { - get { return "mediabrowser"; } - } - - /// <summary> - /// Gets the HTTP server URL prefix. - /// </summary> - /// <value>The HTTP server URL prefix.</value> - public virtual string HttpServerUrlPrefix - { - get - { - return "http://+:" + _configurationManager.CommonConfiguration.HttpServerPortNumber + "/" + WebApplicationName + "/"; - } - } - - /// <summary> - /// Gets the kernel context. Subclasses will have to override. - /// </summary> - /// <value>The kernel context.</value> - public abstract KernelContext KernelContext { get; } - - /// <summary> - /// Gets the logger. - /// </summary> - /// <value>The logger.</value> - protected ILogger Logger { get; private set; } - - /// <summary> - /// Gets or sets the application host. - /// </summary> - /// <value>The application host.</value> - protected IApplicationHost ApplicationHost { get; private set; } - - private readonly IConfigurationManager _configurationManager; - - /// <summary> - /// Initializes a new instance of the <see cref="BaseKernel" /> class. - /// </summary> - /// <param name="appHost">The app host.</param> - /// <param name="logManager">The log manager.</param> - protected BaseKernel(IApplicationHost appHost, ILogManager logManager, IConfigurationManager configurationManager) - { - ApplicationHost = appHost; - _configurationManager = configurationManager; - Logger = logManager.GetLogger("Kernel"); - } - - /// <summary> - /// Initializes the Kernel - /// </summary> - /// <returns>Task.</returns> - public void Init() - { - ReloadInternal(); - - Logger.Info("Kernel.Init Complete"); - } - - /// <summary> - /// Performs initializations that can be reloaded at anytime - /// </summary> - /// <returns>Task.</returns> - protected virtual void ReloadInternal() - { - } - - /// <summary> - /// Notifies that the kernel that a change has been made that requires a restart - /// </summary> - public void NotifyPendingRestart() - { - HasPendingRestart = true; - - EventHelper.QueueEventIfNotNull(HasPendingRestartChanged, this, EventArgs.Empty, Logger); - } - - /// <summary> - /// Performs the pending restart. - /// </summary> - /// <returns>Task.</returns> - public void PerformPendingRestart() - { - if (HasPendingRestart) - { - Logger.Info("Restarting the application"); - - ApplicationHost.Restart(); - } - else - { - Logger.Info("PerformPendingRestart - not needed"); - } - } - - /// <summary> - /// Gets the system status. - /// </summary> - /// <returns>SystemInfo.</returns> - public virtual SystemInfo GetSystemInfo() - { - return new SystemInfo - { - HasPendingRestart = HasPendingRestart, - Version = ApplicationHost.ApplicationVersion.ToString(), - IsNetworkDeployed = ApplicationHost.CanSelfUpdate, - WebSocketPortNumber = ApplicationHost.Resolve<IServerManager>().WebSocketPortNumber, - SupportsNativeWebSocket = ApplicationHost.Resolve<IServerManager>().SupportsNativeWebSocket, - FailedPluginAssemblies = ApplicationHost.FailedAssemblies.ToArray() - }; - } - } -} diff --git a/MediaBrowser.Common/Kernel/IKernel.cs b/MediaBrowser.Common/Kernel/IKernel.cs deleted file mode 100644 index 51677677a..000000000 --- a/MediaBrowser.Common/Kernel/IKernel.cs +++ /dev/null @@ -1,74 +0,0 @@ -using MediaBrowser.Model.System; -using System; - -namespace MediaBrowser.Common.Kernel -{ - /// <summary> - /// Interface IKernel - /// </summary> - public interface IKernel - { - /// <summary> - /// Occurs when [has pending restart changed]. - /// </summary> - event EventHandler HasPendingRestartChanged; - - /// <summary> - /// Gets the kernel context. - /// </summary> - /// <value>The kernel context.</value> - KernelContext KernelContext { get; } - - /// <summary> - /// Inits this instance. - /// </summary> - /// <returns>Task.</returns> - void Init(); - - /// <summary> - /// Gets or sets a value indicating whether this instance has pending kernel reload. - /// </summary> - /// <value><c>true</c> if this instance has pending kernel reload; otherwise, <c>false</c>.</value> - bool HasPendingRestart { get; } - - /// <summary> - /// Gets the system status. - /// </summary> - /// <returns>SystemInfo.</returns> - SystemInfo GetSystemInfo(); - - /// <summary> - /// Called when [application updated]. - /// </summary> - /// <param name="newVersion">The new version.</param> - void OnApplicationUpdated(Version newVersion); - - /// <summary> - /// Gets the name of the web application. - /// </summary> - /// <value>The name of the web application.</value> - string WebApplicationName { get; } - - /// <summary> - /// Performs the pending restart. - /// </summary> - void PerformPendingRestart(); - - /// <summary> - /// Gets the UDP server port number. - /// </summary> - /// <value>The UDP server port number.</value> - int UdpServerPortNumber { get; } - - /// <summary> - /// Gets the HTTP server URL prefix. - /// </summary> - /// <value>The HTTP server URL prefix.</value> - string HttpServerUrlPrefix { get; } - - /// <summary> - /// Notifies the pending restart. - /// </summary> - void NotifyPendingRestart(); - } -} diff --git a/MediaBrowser.Common/Kernel/KernelContext.cs b/MediaBrowser.Common/Kernel/KernelContext.cs deleted file mode 100644 index 1f84c0242..000000000 --- a/MediaBrowser.Common/Kernel/KernelContext.cs +++ /dev/null @@ -1,18 +0,0 @@ - -namespace MediaBrowser.Common.Kernel -{ - /// <summary> - /// Enum KernelContext - /// </summary> - public enum KernelContext - { - /// <summary> - /// The server - /// </summary> - Server, - /// <summary> - /// The UI - /// </summary> - Ui - } -} diff --git a/MediaBrowser.Common/MediaBrowser.Common.csproj b/MediaBrowser.Common/MediaBrowser.Common.csproj index 8b7aae9cb..578a76a30 100644 --- a/MediaBrowser.Common/MediaBrowser.Common.csproj +++ b/MediaBrowser.Common/MediaBrowser.Common.csproj @@ -59,12 +59,11 @@ <Compile Include="IO\IIsoMount.cs" /> <Compile Include="IO\ProgressStream.cs" /> <Compile Include="IO\StreamDefaults.cs" /> - <Compile Include="Kernel\BasePeriodicWebSocketListener.cs" /> + <Compile Include="Net\BasePeriodicWebSocketListener.cs" /> <Compile Include="Configuration\IApplicationPaths.cs" /> - <Compile Include="Kernel\IServerManager.cs" /> - <Compile Include="Kernel\IWebSocketListener.cs" /> + <Compile Include="Net\IServerManager.cs" /> + <Compile Include="Net\IWebSocketListener.cs" /> <Compile Include="IApplicationHost.cs" /> - <Compile Include="Kernel\IKernel.cs" /> <Compile Include="Net\IHttpClient.cs" /> <Compile Include="Net\IHttpServer.cs" /> <Compile Include="Net\INetworkManager.cs" /> @@ -94,15 +93,13 @@ <Compile Include="ScheduledTasks\ScheduledTaskHelpers.cs" /> <Compile Include="ScheduledTasks\StartupTrigger.cs" /> <Compile Include="ScheduledTasks\SystemEventTrigger.cs" /> - <Compile Include="Kernel\BaseKernel.cs" /> - <Compile Include="Kernel\KernelContext.cs" /> <Compile Include="Plugins\BasePlugin.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="ScheduledTasks\DailyTrigger.cs" /> <Compile Include="ScheduledTasks\IntervalTrigger.cs" /> + <Compile Include="ScheduledTasks\TaskCompletionEventArgs.cs" /> <Compile Include="ScheduledTasks\WeeklyTrigger.cs" /> <Compile Include="Security\ISecurityManager.cs" /> - <Compile Include="Updates\ApplicationUpdater.cs" /> <Compile Include="Updates\IPackageManager.cs" /> </ItemGroup> <ItemGroup> diff --git a/MediaBrowser.Common/Kernel/BasePeriodicWebSocketListener.cs b/MediaBrowser.Common/Net/BasePeriodicWebSocketListener.cs index 6a44cf372..9207ffe1d 100644 --- a/MediaBrowser.Common/Kernel/BasePeriodicWebSocketListener.cs +++ b/MediaBrowser.Common/Net/BasePeriodicWebSocketListener.cs @@ -1,12 +1,11 @@ -using MediaBrowser.Common.Net; -using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Logging; using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; -namespace MediaBrowser.Common.Kernel +namespace MediaBrowser.Common.Net { /// <summary> /// Starts sending data over a web socket periodically when a message is received, and then stops when a corresponding stop message is received diff --git a/MediaBrowser.Common/Kernel/IServerManager.cs b/MediaBrowser.Common/Net/IServerManager.cs index a8c6a253a..0f95c775e 100644 --- a/MediaBrowser.Common/Kernel/IServerManager.cs +++ b/MediaBrowser.Common/Net/IServerManager.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; -namespace MediaBrowser.Common.Kernel +namespace MediaBrowser.Common.Net { public interface IServerManager : IDisposable { diff --git a/MediaBrowser.Common/Kernel/IWebSocketListener.cs b/MediaBrowser.Common/Net/IWebSocketListener.cs index b04bb6885..4b6c4111d 100644 --- a/MediaBrowser.Common/Kernel/IWebSocketListener.cs +++ b/MediaBrowser.Common/Net/IWebSocketListener.cs @@ -1,7 +1,6 @@ -using MediaBrowser.Common.Net; -using System.Threading.Tasks; +using System.Threading.Tasks; -namespace MediaBrowser.Common.Kernel +namespace MediaBrowser.Common.Net { /// <summary> ///This is an interface for listening to messages coming through a web socket connection diff --git a/MediaBrowser.Common/ScheduledTasks/IScheduledTaskWorker.cs b/MediaBrowser.Common/ScheduledTasks/IScheduledTaskWorker.cs index 31cb4bcb8..2fa76472d 100644 --- a/MediaBrowser.Common/ScheduledTasks/IScheduledTaskWorker.cs +++ b/MediaBrowser.Common/ScheduledTasks/IScheduledTaskWorker.cs @@ -1,7 +1,6 @@ using MediaBrowser.Model.Tasks; using System; using System.Collections.Generic; -using System.Threading.Tasks; namespace MediaBrowser.Common.ScheduledTasks { @@ -64,23 +63,5 @@ namespace MediaBrowser.Common.ScheduledTasks /// </summary> /// <value>The unique id.</value> Guid Id { get; } - - /// <summary> - /// Executes the task - /// </summary> - /// <returns>Task.</returns> - /// <exception cref="System.InvalidOperationException">Cannot execute a Task that is already running</exception> - Task Execute(); - - /// <summary> - /// Stops the task if it is currently executing - /// </summary> - /// <exception cref="System.InvalidOperationException">Cannot cancel a Task unless it is in the Running state.</exception> - void Cancel(); - - /// <summary> - /// Cancels if running. - /// </summary> - void CancelIfRunning(); } }
\ No newline at end of file diff --git a/MediaBrowser.Common/ScheduledTasks/ITaskManager.cs b/MediaBrowser.Common/ScheduledTasks/ITaskManager.cs index d06f1f194..ec0e7c1c9 100644 --- a/MediaBrowser.Common/ScheduledTasks/ITaskManager.cs +++ b/MediaBrowser.Common/ScheduledTasks/ITaskManager.cs @@ -1,5 +1,8 @@ -using System; +using MediaBrowser.Common.Events; +using MediaBrowser.Model.Tasks; +using System; using System.Collections.Generic; +using System.Threading.Tasks; namespace MediaBrowser.Common.ScheduledTasks { @@ -36,5 +39,11 @@ namespace MediaBrowser.Common.ScheduledTasks /// </summary> /// <param name="tasks">The tasks.</param> void AddTasks(IEnumerable<IScheduledTask> tasks); + + void Cancel(IScheduledTaskWorker task); + Task Execute(IScheduledTaskWorker task); + + event EventHandler<EventArgs> TaskExecuting; + event EventHandler<GenericEventArgs<TaskResult>> TaskCompleted; } }
\ No newline at end of file diff --git a/MediaBrowser.Common/ScheduledTasks/TaskCompletionEventArgs.cs b/MediaBrowser.Common/ScheduledTasks/TaskCompletionEventArgs.cs new file mode 100644 index 000000000..8aab6b50d --- /dev/null +++ b/MediaBrowser.Common/ScheduledTasks/TaskCompletionEventArgs.cs @@ -0,0 +1,12 @@ +using MediaBrowser.Model.Tasks; +using System; + +namespace MediaBrowser.Common.ScheduledTasks +{ + public class TaskCompletionEventArgs : EventArgs + { + public IScheduledTask Task { get; set; } + + public TaskResult Result { get; set; } + } +} diff --git a/MediaBrowser.Controller/BaseManager.cs b/MediaBrowser.Controller/BaseManager.cs deleted file mode 100644 index 99395a50e..000000000 --- a/MediaBrowser.Controller/BaseManager.cs +++ /dev/null @@ -1,50 +0,0 @@ -using MediaBrowser.Common.Kernel; -using System; - -namespace MediaBrowser.Controller -{ - /// <summary> - /// Class BaseManager - /// </summary> - /// <typeparam name="TKernelType">The type of the T kernel type.</typeparam> - public abstract class BaseManager<TKernelType> : IDisposable - where TKernelType : class, IKernel - { - /// <summary> - /// The _kernel - /// </summary> - protected readonly TKernelType Kernel; - - /// <summary> - /// Initializes a new instance of the <see cref="BaseManager" /> class. - /// </summary> - /// <param name="kernel">The kernel.</param> - /// <exception cref="System.ArgumentNullException">kernel</exception> - protected BaseManager(TKernelType kernel) - { - if (kernel == null) - { - throw new ArgumentNullException("kernel"); - } - - Kernel = kernel; - } - - /// <summary> - /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. - /// </summary> - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - /// <summary> - /// Releases unmanaged and - optionally - managed resources. - /// </summary> - /// <param name="dispose"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param> - protected virtual void Dispose(bool dispose) - { - } - } -} diff --git a/MediaBrowser.Controller/IO/FileSystemManager.cs b/MediaBrowser.Controller/IO/FileSystemManager.cs index 4afc8265f..463672ece 100644 --- a/MediaBrowser.Controller/IO/FileSystemManager.cs +++ b/MediaBrowser.Controller/IO/FileSystemManager.cs @@ -1,5 +1,4 @@ using MediaBrowser.Common.IO; -using MediaBrowser.Common.Kernel; using MediaBrowser.Common.ScheduledTasks; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; @@ -17,7 +16,7 @@ namespace MediaBrowser.Controller.IO /// modify the directories that the system is watching for changes should use the methods of /// this class to do so. This way we can have the watchers correctly respond to only external changes. /// </summary> - public class FileSystemManager : BaseManager<Kernel> + public class FileSystemManager : IDisposable { /// <summary> /// Gets or sets the directory watchers. @@ -26,22 +25,14 @@ namespace MediaBrowser.Controller.IO private DirectoryWatchers DirectoryWatchers { get; set; } /// <summary> - /// The _logger - /// </summary> - private readonly ILogger _logger; - - /// <summary> /// Initializes a new instance of the <see cref="FileSystemManager" /> class. /// </summary> - /// <param name="kernel">The kernel.</param> /// <param name="logManager">The log manager.</param> /// <param name="taskManager">The task manager.</param> /// <param name="libraryManager">The library manager.</param> /// <param name="configurationManager">The configuration manager.</param> - public FileSystemManager(Kernel kernel, ILogManager logManager, ITaskManager taskManager, ILibraryManager libraryManager, IServerConfigurationManager configurationManager) - : base(kernel) + public FileSystemManager(ILogManager logManager, ITaskManager taskManager, ILibraryManager libraryManager, IServerConfigurationManager configurationManager) { - _logger = logManager.GetLogger("FileSystemManager"); DirectoryWatchers = new DirectoryWatchers(logManager, taskManager, libraryManager, configurationManager); } @@ -113,14 +104,17 @@ namespace MediaBrowser.Controller.IO /// Releases unmanaged and - optionally - managed resources. /// </summary> /// <param name="dispose"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param> - protected override void Dispose(bool dispose) + protected virtual void Dispose(bool dispose) { if (dispose) { DirectoryWatchers.Dispose(); } + } - base.Dispose(dispose); + public void Dispose() + { + Dispose(true); } } } diff --git a/MediaBrowser.Controller/IServerApplicationHost.cs b/MediaBrowser.Controller/IServerApplicationHost.cs new file mode 100644 index 000000000..d64067f43 --- /dev/null +++ b/MediaBrowser.Controller/IServerApplicationHost.cs @@ -0,0 +1,10 @@ +using MediaBrowser.Common; +using MediaBrowser.Model.System; + +namespace MediaBrowser.Controller +{ + public interface IServerApplicationHost : IApplicationHost + { + SystemInfo GetSystemInfo(); + } +} diff --git a/MediaBrowser.Controller/IServerApplicationPaths.cs b/MediaBrowser.Controller/IServerApplicationPaths.cs index b30120d83..c9bac4dd2 100644 --- a/MediaBrowser.Controller/IServerApplicationPaths.cs +++ b/MediaBrowser.Controller/IServerApplicationPaths.cs @@ -1,5 +1,4 @@ using MediaBrowser.Common.Configuration; -using MediaBrowser.Common.Kernel; namespace MediaBrowser.Controller { diff --git a/MediaBrowser.Controller/Kernel.cs b/MediaBrowser.Controller/Kernel.cs index 2cf6fd188..40c59c8cf 100644 --- a/MediaBrowser.Controller/Kernel.cs +++ b/MediaBrowser.Controller/Kernel.cs @@ -1,5 +1,4 @@ using MediaBrowser.Common; -using MediaBrowser.Common.Kernel; using MediaBrowser.Common.ScheduledTasks; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Drawing; @@ -11,11 +10,9 @@ using MediaBrowser.Controller.MediaInfo; using MediaBrowser.Controller.Persistence; using MediaBrowser.Controller.Plugins; using MediaBrowser.Controller.Providers; -using MediaBrowser.Controller.Updates; using MediaBrowser.Controller.Weather; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Serialization; -using MediaBrowser.Model.System; using System; using System.Collections.Generic; using System.Linq; @@ -27,7 +24,7 @@ namespace MediaBrowser.Controller /// <summary> /// Class Kernel /// </summary> - public class Kernel : BaseKernel, IDisposable + public class Kernel : IDisposable { /// <summary> /// Gets the instance. @@ -60,12 +57,25 @@ namespace MediaBrowser.Controller public ProviderManager ProviderManager { get; private set; } /// <summary> - /// Gets the kernel context. + /// Gets the name of the web application that can be used for url building. + /// All api urls will be of the form {protocol}://{host}:{port}/{appname}/... /// </summary> - /// <value>The kernel context.</value> - public override KernelContext KernelContext + /// <value>The name of the web application.</value> + public string WebApplicationName { - get { return KernelContext.Server; } + get { return "mediabrowser"; } + } + + /// <summary> + /// Gets the HTTP server URL prefix. + /// </summary> + /// <value>The HTTP server URL prefix.</value> + public virtual string HttpServerUrlPrefix + { + get + { + return "http://+:" + _configurationManager.Configuration.HttpServerPortNumber + "/" + WebApplicationName + "/"; + } } /// <summary> @@ -145,7 +155,7 @@ namespace MediaBrowser.Controller /// Gets the UDP server port number. /// </summary> /// <value>The UDP server port number.</value> - public override int UdpServerPortNumber + public int UdpServerPortNumber { get { return 7359; } } @@ -154,6 +164,7 @@ namespace MediaBrowser.Controller private readonly IServerConfigurationManager _configurationManager; private readonly ILogManager _logManager; + private IApplicationHost ApplicationHost { get; set; } /// <summary> /// Creates a kernel based on a Data path, which is akin to our current programdata path @@ -164,10 +175,10 @@ namespace MediaBrowser.Controller /// <param name="configurationManager">The configuration manager.</param> /// <exception cref="System.ArgumentNullException">isoManager</exception> public Kernel(IApplicationHost appHost, IXmlSerializer xmlSerializer, ILogManager logManager, IServerConfigurationManager configurationManager) - : base(appHost, logManager, configurationManager) { Instance = this; + ApplicationHost = appHost; _configurationManager = configurationManager; _xmlSerializer = xmlSerializer; _logManager = logManager; @@ -207,10 +218,8 @@ namespace MediaBrowser.Controller /// Performs initializations that can be reloaded at anytime /// </summary> /// <returns>Task.</returns> - protected override async void ReloadInternal() + public async Task Init() { - base.ReloadInternal(); - FindParts(); await LoadRepositories().ConfigureAwait(false); @@ -306,27 +315,8 @@ namespace MediaBrowser.Controller { DisposeFileSystemManager(); - FileSystemManager = new FileSystemManager(this, _logManager, ApplicationHost.Resolve<ITaskManager>(), ApplicationHost.Resolve<ILibraryManager>(), _configurationManager); + FileSystemManager = new FileSystemManager(_logManager, ApplicationHost.Resolve<ITaskManager>(), ApplicationHost.Resolve<ILibraryManager>(), _configurationManager); FileSystemManager.StartWatchers(); } - - /// <summary> - /// Gets the system info. - /// </summary> - /// <returns>SystemInfo.</returns> - public override SystemInfo GetSystemInfo() - { - var info = base.GetSystemInfo(); - - var installationManager = ApplicationHost.Resolve<IInstallationManager>(); - - if (installationManager != null) - { - info.InProgressInstallations = installationManager.CurrentInstallations.Select(i => i.Item1).ToArray(); - info.CompletedInstallations = installationManager.CompletedInstallations.ToArray(); - } - - return info; - } } } diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj index 018b3960d..c07713d7d 100644 --- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj +++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj @@ -70,7 +70,6 @@ <Compile Include="..\SharedVersion.cs"> <Link>Properties\SharedVersion.cs</Link> </Compile> - <Compile Include="BaseManager.cs" /> <Compile Include="Configuration\IServerConfigurationManager.cs" /> <Compile Include="Drawing\ImageExtensions.cs" /> <Compile Include="Drawing\ImageHeader.cs" /> @@ -105,6 +104,7 @@ <Compile Include="IO\FileSystem.cs" /> <Compile Include="IO\FileSystemManager.cs" /> <Compile Include="IO\NativeMethods.cs" /> + <Compile Include="IServerApplicationHost.cs" /> <Compile Include="IServerApplicationPaths.cs" /> <Compile Include="Library\ChildrenChangedEventArgs.cs" /> <Compile Include="Library\DtoBuilder.cs" /> diff --git a/MediaBrowser.Controller/Providers/ProviderManager.cs b/MediaBrowser.Controller/Providers/ProviderManager.cs index 16e862fb9..0df5f64d3 100644 --- a/MediaBrowser.Controller/Providers/ProviderManager.cs +++ b/MediaBrowser.Controller/Providers/ProviderManager.cs @@ -18,7 +18,7 @@ namespace MediaBrowser.Controller.Providers /// <summary> /// Class ProviderManager /// </summary> - public class ProviderManager : BaseManager<Kernel> + public class ProviderManager : IDisposable { /// <summary> /// The remote image cache @@ -42,7 +42,9 @@ namespace MediaBrowser.Controller.Providers private readonly IHttpClient _httpClient; private IServerConfigurationManager ConfigurationManager { get; set; } - + + private Kernel Kernel { get; set; } + /// <summary> /// Initializes a new instance of the <see cref="ProviderManager" /> class. /// </summary> @@ -50,9 +52,9 @@ namespace MediaBrowser.Controller.Providers /// <param name="httpClient">The HTTP client.</param> /// <param name="logger">The logger.</param> public ProviderManager(Kernel kernel, IHttpClient httpClient, ILogger logger, IServerConfigurationManager configurationManager) - : base(kernel) { _logger = logger; + Kernel = kernel; _httpClient = httpClient; ConfigurationManager = configurationManager; _remoteImageCache = new FileSystemRepository(ImagesDataPath); @@ -354,14 +356,17 @@ namespace MediaBrowser.Controller.Providers /// Releases unmanaged and - optionally - managed resources. /// </summary> /// <param name="dispose"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param> - protected override void Dispose(bool dispose) + protected virtual void Dispose(bool dispose) { if (dispose) { _remoteImageCache.Dispose(); } + } - base.Dispose(dispose); + public void Dispose() + { + Dispose(true); } } } diff --git a/MediaBrowser.Model/Configuration/BaseApplicationConfiguration.cs b/MediaBrowser.Model/Configuration/BaseApplicationConfiguration.cs index 74241ac02..9fc8d824f 100644 --- a/MediaBrowser.Model/Configuration/BaseApplicationConfiguration.cs +++ b/MediaBrowser.Model/Configuration/BaseApplicationConfiguration.cs @@ -19,20 +19,6 @@ namespace MediaBrowser.Model.Configuration public bool EnableDebugLevelLogging { get; set; } /// <summary> - /// Gets or sets a value indicating whether [enable HTTP level logging]. - /// </summary> - /// <value><c>true</c> if [enable HTTP level logging]; otherwise, <c>false</c>.</value> - [ProtoMember(56)] - public bool EnableHttpLevelLogging { get; set; } - - /// <summary> - /// Gets or sets the HTTP server port number. - /// </summary> - /// <value>The HTTP server port number.</value> - [ProtoMember(2)] - public int HttpServerPortNumber { get; set; } - - /// <summary> /// Enable automatically and silently updating of the application /// </summary> /// <value><c>true</c> if [enable auto update]; otherwise, <c>false</c>.</value> @@ -60,13 +46,6 @@ namespace MediaBrowser.Model.Configuration public bool RunAtStartup { get; set; } /// <summary> - /// Gets or sets the legacy web socket port number. - /// </summary> - /// <value>The legacy web socket port number.</value> - [ProtoMember(59)] - public int LegacyWebSocketPortNumber { get; set; } - - /// <summary> /// Gets or sets a value indicating whether this instance is first run. /// </summary> /// <value><c>true</c> if this instance is first run; otherwise, <c>false</c>.</value> @@ -78,14 +57,9 @@ namespace MediaBrowser.Model.Configuration /// </summary> public BaseApplicationConfiguration() { - HttpServerPortNumber = 8096; - LegacyWebSocketPortNumber = 8945; - EnableAutoUpdate = true; LogFileRetentionDays = 14; - EnableHttpLevelLogging = true; - #if (DEBUG) EnableDebugLevelLogging = true; #endif diff --git a/MediaBrowser.Model/Configuration/ServerConfiguration.cs b/MediaBrowser.Model/Configuration/ServerConfiguration.cs index ff7f5221b..0ddafe19a 100644 --- a/MediaBrowser.Model/Configuration/ServerConfiguration.cs +++ b/MediaBrowser.Model/Configuration/ServerConfiguration.cs @@ -13,6 +13,27 @@ namespace MediaBrowser.Model.Configuration public class ServerConfiguration : BaseApplicationConfiguration { /// <summary> + /// Gets or sets a value indicating whether [enable HTTP level logging]. + /// </summary> + /// <value><c>true</c> if [enable HTTP level logging]; otherwise, <c>false</c>.</value> + [ProtoMember(56)] + public bool EnableHttpLevelLogging { get; set; } + + /// <summary> + /// Gets or sets the HTTP server port number. + /// </summary> + /// <value>The HTTP server port number.</value> + [ProtoMember(2)] + public int HttpServerPortNumber { get; set; } + + /// <summary> + /// Gets or sets the legacy web socket port number. + /// </summary> + /// <value>The legacy web socket port number.</value> + [ProtoMember(59)] + public int LegacyWebSocketPortNumber { get; set; } + + /// <summary> /// Gets or sets a value indicating whether [enable internet providers]. /// </summary> /// <value><c>true</c> if [enable internet providers]; otherwise, <c>false</c>.</value> @@ -255,6 +276,10 @@ namespace MediaBrowser.Model.Configuration public ServerConfiguration() : base() { + HttpServerPortNumber = 8096; + LegacyWebSocketPortNumber = 8945; + EnableHttpLevelLogging = true; + #if (DEBUG) EnableDeveloperTools = true; #endif diff --git a/MediaBrowser.Common.Implementations/HttpServer/BaseRestService.cs b/MediaBrowser.Server.Implementations/HttpServer/BaseRestService.cs index 382183b58..b84708437 100644 --- a/MediaBrowser.Common.Implementations/HttpServer/BaseRestService.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/BaseRestService.cs @@ -14,7 +14,7 @@ using System.Linq; using System.Threading.Tasks; using MimeTypes = MediaBrowser.Common.Net.MimeTypes; -namespace MediaBrowser.Common.Implementations.HttpServer +namespace MediaBrowser.Server.Implementations.HttpServer { /// <summary> /// Class BaseRestService diff --git a/MediaBrowser.Common.Implementations/HttpServer/HttpServer.cs b/MediaBrowser.Server.Implementations/HttpServer/HttpServer.cs index 785ca56c6..ee5009e21 100644 --- a/MediaBrowser.Common.Implementations/HttpServer/HttpServer.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/HttpServer.cs @@ -1,6 +1,6 @@ using Funq; +using MediaBrowser.Common; using MediaBrowser.Common.Extensions; -using MediaBrowser.Common.Kernel; using MediaBrowser.Common.Net; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Serialization; @@ -26,7 +26,7 @@ using System.Reflection; using System.Text; using System.Threading.Tasks; -namespace MediaBrowser.Common.Implementations.HttpServer +namespace MediaBrowser.Server.Implementations.HttpServer { /// <summary> /// Class HttpServer diff --git a/MediaBrowser.Common.Implementations/HttpServer/NativeWebSocket.cs b/MediaBrowser.Server.Implementations/HttpServer/NativeWebSocket.cs index 97bab96f8..9f5d14eaf 100644 --- a/MediaBrowser.Common.Implementations/HttpServer/NativeWebSocket.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/NativeWebSocket.cs @@ -7,7 +7,7 @@ using System.Threading.Tasks; using WebSocketMessageType = MediaBrowser.Common.Net.WebSocketMessageType; using WebSocketState = MediaBrowser.Common.Net.WebSocketState; -namespace MediaBrowser.Common.Implementations.HttpServer +namespace MediaBrowser.Server.Implementations.HttpServer { /// <summary> /// Class NativeWebSocket diff --git a/MediaBrowser.Common.Implementations/HttpServer/ServerFactory.cs b/MediaBrowser.Server.Implementations/HttpServer/ServerFactory.cs index 743bd60c4..75e077c38 100644 --- a/MediaBrowser.Common.Implementations/HttpServer/ServerFactory.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/ServerFactory.cs @@ -1,9 +1,9 @@ -using MediaBrowser.Common.Kernel; +using MediaBrowser.Common; using MediaBrowser.Common.Net; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Serialization; -namespace MediaBrowser.Common.Implementations.HttpServer +namespace MediaBrowser.Server.Implementations.HttpServer { /// <summary> /// Class ServerFactory diff --git a/MediaBrowser.Common.Implementations/HttpServer/StreamWriter.cs b/MediaBrowser.Server.Implementations/HttpServer/StreamWriter.cs index c92bfe0b9..c4524280d 100644 --- a/MediaBrowser.Common.Implementations/HttpServer/StreamWriter.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/StreamWriter.cs @@ -2,7 +2,7 @@ using System.IO; using System.Threading.Tasks; -namespace MediaBrowser.Common.Implementations.HttpServer +namespace MediaBrowser.Server.Implementations.HttpServer { /// <summary> /// Class StreamWriter diff --git a/MediaBrowser.Common.Implementations/HttpServer/SwaggerService.cs b/MediaBrowser.Server.Implementations/HttpServer/SwaggerService.cs index a4808834d..18ab40d93 100644 --- a/MediaBrowser.Common.Implementations/HttpServer/SwaggerService.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/SwaggerService.cs @@ -2,7 +2,7 @@ using System.Diagnostics; using System.IO; -namespace MediaBrowser.Common.Implementations.HttpServer +namespace MediaBrowser.Server.Implementations.HttpServer { /// <summary> /// Class GetDashboardResource diff --git a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj index 45aa3e530..e56c79ded 100644 --- a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj +++ b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj @@ -32,6 +32,9 @@ <WarningLevel>4</WarningLevel> </PropertyGroup> <ItemGroup> + <Reference Include="Alchemy"> + <HintPath>..\packages\Alchemy.2.2.1\lib\net40\Alchemy.dll</HintPath> + </Reference> <Reference Include="BdInfo, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> <HintPath>..\packages\MediaBrowser.BdInfo.1.0.0.2\lib\net45\BdInfo.dll</HintPath> @@ -39,6 +42,39 @@ <Reference Include="MoreLinq"> <HintPath>..\packages\morelinq.1.0.15631-beta\lib\net35\MoreLinq.dll</HintPath> </Reference> + <Reference Include="NLog"> + <HintPath>..\packages\NLog.2.0.0.2000\lib\net40\NLog.dll</HintPath> + </Reference> + <Reference Include="ServiceStack"> + <HintPath>..\packages\ServiceStack.3.9.38\lib\net35\ServiceStack.dll</HintPath> + </Reference> + <Reference Include="ServiceStack.Api.Swagger"> + <HintPath>..\packages\ServiceStack.Api.Swagger.3.9.38\lib\net35\ServiceStack.Api.Swagger.dll</HintPath> + </Reference> + <Reference Include="ServiceStack.Common"> + <HintPath>..\packages\ServiceStack.Common.3.9.38\lib\net35\ServiceStack.Common.dll</HintPath> + </Reference> + <Reference Include="ServiceStack.Interfaces"> + <HintPath>..\packages\ServiceStack.Common.3.9.38\lib\net35\ServiceStack.Interfaces.dll</HintPath> + </Reference> + <Reference Include="ServiceStack.Logging.NLog"> + <HintPath>..\packages\ServiceStack.Logging.NLog.1.0.6.0\lib\net35\ServiceStack.Logging.NLog.dll</HintPath> + </Reference> + <Reference Include="ServiceStack.OrmLite"> + <HintPath>..\packages\ServiceStack.OrmLite.SqlServer.3.9.39\lib\ServiceStack.OrmLite.dll</HintPath> + </Reference> + <Reference Include="ServiceStack.OrmLite.SqlServer"> + <HintPath>..\packages\ServiceStack.OrmLite.SqlServer.3.9.39\lib\ServiceStack.OrmLite.SqlServer.dll</HintPath> + </Reference> + <Reference Include="ServiceStack.Redis"> + <HintPath>..\packages\ServiceStack.Redis.3.9.38\lib\net35\ServiceStack.Redis.dll</HintPath> + </Reference> + <Reference Include="ServiceStack.ServiceInterface"> + <HintPath>..\packages\ServiceStack.3.9.38\lib\net35\ServiceStack.ServiceInterface.dll</HintPath> + </Reference> + <Reference Include="ServiceStack.Text"> + <HintPath>..\packages\ServiceStack.Text.3.9.38\lib\net35\ServiceStack.Text.dll</HintPath> + </Reference> <Reference Include="System" /> <Reference Include="System.Core" /> <Reference Include="System.Data.SQLite"> @@ -47,6 +83,16 @@ <Reference Include="System.Data.SQLite.Linq"> <HintPath>..\packages\System.Data.SQLite.1.0.84.0\lib\net45\System.Data.SQLite.Linq.dll</HintPath> </Reference> + <Reference Include="System.Reactive.Core"> + <HintPath>..\packages\Rx-Core.2.1.30214.0\lib\Net45\System.Reactive.Core.dll</HintPath> + </Reference> + <Reference Include="System.Reactive.Interfaces"> + <HintPath>..\packages\Rx-Interfaces.2.1.30214.0\lib\Net45\System.Reactive.Interfaces.dll</HintPath> + </Reference> + <Reference Include="System.Reactive.Linq"> + <HintPath>..\packages\Rx-Linq.2.1.30214.0\lib\Net45\System.Reactive.Linq.dll</HintPath> + </Reference> + <Reference Include="System.Web" /> <Reference Include="System.Xml.Linq" /> <Reference Include="System.Data.DataSetExtensions" /> <Reference Include="Microsoft.CSharp" /> @@ -59,6 +105,12 @@ </Compile> <Compile Include="BdInfo\BdInfoExaminer.cs" /> <Compile Include="Configuration\ServerConfigurationManager.cs" /> + <Compile Include="HttpServer\BaseRestService.cs" /> + <Compile Include="HttpServer\HttpServer.cs" /> + <Compile Include="HttpServer\NativeWebSocket.cs" /> + <Compile Include="HttpServer\ServerFactory.cs" /> + <Compile Include="HttpServer\StreamWriter.cs" /> + <Compile Include="HttpServer\SwaggerService.cs" /> <Compile Include="Library\CoreResolutionIgnoreRule.cs" /> <Compile Include="Library\LibraryManager.cs" /> <Compile Include="Library\ResolverHelper.cs" /> @@ -82,13 +134,18 @@ <Compile Include="ScheduledTasks\ImageCleanupTask.cs" /> <Compile Include="ScheduledTasks\PluginUpdateTask.cs" /> <Compile Include="ServerApplicationPaths.cs" /> + <Compile Include="ServerManager\ServerManager.cs" /> + <Compile Include="ServerManager\WebSocketConnection.cs" /> <Compile Include="Sqlite\SQLiteDisplayPreferencesRepository.cs" /> <Compile Include="Sqlite\SQLiteExtensions.cs" /> <Compile Include="Sqlite\SQLiteItemRepository.cs" /> <Compile Include="Sqlite\SQLiteRepository.cs" /> <Compile Include="Sqlite\SQLiteUserDataRepository.cs" /> <Compile Include="Sqlite\SQLiteUserRepository.cs" /> + <Compile Include="Udp\UdpServer.cs" /> <Compile Include="Updates\InstallationManager.cs" /> + <Compile Include="WebSocket\AlchemyServer.cs" /> + <Compile Include="WebSocket\AlchemyWebSocket.cs" /> <Compile Include="WorldWeatherOnline\WeatherProvider.cs" /> </ItemGroup> <ItemGroup> @@ -110,6 +167,49 @@ </ProjectReference> </ItemGroup> <ItemGroup> + <Content Include="README.txt" /> + <Content Include="swagger-ui\css\screen.css"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="swagger-ui\images\pet_store_api.png"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="swagger-ui\images\wordnik_api.png"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="swagger-ui\index.html"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="swagger-ui\lib\backbone-min.js"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="swagger-ui\lib\handlebars.runtime-1.0.0.beta.6.js"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="swagger-ui\lib\jquery.ba-bbq.min.js"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="swagger-ui\lib\jquery.min.js"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="swagger-ui\lib\jquery.slideto.min.js"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="swagger-ui\lib\jquery.wiggle.min.js"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="swagger-ui\lib\swagger.js"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="swagger-ui\lib\underscore-min.js"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="swagger-ui\swagger-ui.js"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="swagger-ui\swagger-ui.min.js"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> <Content Include="x64\SQLite.Interop.dll"> <CopyToOutputDirectory>Always</CopyToOutputDirectory> </Content> @@ -119,6 +219,7 @@ </ItemGroup> <ItemGroup> <None Include="packages.config" /> + <EmbeddedResource Include="ServerManager\RegisterServer.bat" /> </ItemGroup> <ItemGroup /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> diff --git a/MediaBrowser.Common.Implementations/README.txt b/MediaBrowser.Server.Implementations/README.txt index e8ce34205..e8ce34205 100644 --- a/MediaBrowser.Common.Implementations/README.txt +++ b/MediaBrowser.Server.Implementations/README.txt diff --git a/MediaBrowser.Common.Implementations/ServerManager/RegisterServer.bat b/MediaBrowser.Server.Implementations/ServerManager/RegisterServer.bat index d762dfaf7..d762dfaf7 100644 --- a/MediaBrowser.Common.Implementations/ServerManager/RegisterServer.bat +++ b/MediaBrowser.Server.Implementations/ServerManager/RegisterServer.bat diff --git a/MediaBrowser.Common.Implementations/ServerManager/ServerManager.cs b/MediaBrowser.Server.Implementations/ServerManager/ServerManager.cs index d18971f72..e4cb83e96 100644 --- a/MediaBrowser.Common.Implementations/ServerManager/ServerManager.cs +++ b/MediaBrowser.Server.Implementations/ServerManager/ServerManager.cs @@ -1,6 +1,7 @@ -using MediaBrowser.Common.Configuration; -using MediaBrowser.Common.Kernel; +using MediaBrowser.Common; using MediaBrowser.Common.Net; +using MediaBrowser.Controller; +using MediaBrowser.Controller.Configuration; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Serialization; using System; @@ -15,7 +16,7 @@ using System.Text; using System.Threading; using System.Threading.Tasks; -namespace MediaBrowser.Common.Implementations.ServerManager +namespace MediaBrowser.Server.Implementations.ServerManager { /// <summary> /// Manages the Http Server, Udp Server and WebSocket connections @@ -74,15 +75,10 @@ namespace MediaBrowser.Common.Implementations.ServerManager private readonly IApplicationHost _applicationHost; /// <summary> - /// The _kernel - /// </summary> - private readonly IKernel _kernel; - - /// <summary> /// Gets or sets the configuration manager. /// </summary> /// <value>The configuration manager.</value> - private IConfigurationManager ConfigurationManager { get; set; } + private IServerConfigurationManager ConfigurationManager { get; set; } /// <summary> /// Gets a value indicating whether [supports web socket]. @@ -99,7 +95,7 @@ namespace MediaBrowser.Common.Implementations.ServerManager /// <value>The web socket port number.</value> public int WebSocketPortNumber { - get { return SupportsNativeWebSocket ? ConfigurationManager.CommonConfiguration.HttpServerPortNumber : ConfigurationManager.CommonConfiguration.LegacyWebSocketPortNumber; } + get { return SupportsNativeWebSocket ? ConfigurationManager.Configuration.HttpServerPortNumber : ConfigurationManager.Configuration.LegacyWebSocketPortNumber; } } /// <summary> @@ -108,26 +104,23 @@ namespace MediaBrowser.Common.Implementations.ServerManager /// <value>The web socket listeners.</value> private readonly List<IWebSocketListener> _webSocketListeners = new List<IWebSocketListener>(); + private Kernel _kernel; + /// <summary> /// Initializes a new instance of the <see cref="ServerManager" /> class. /// </summary> /// <param name="applicationHost">The application host.</param> - /// <param name="kernel">The kernel.</param> /// <param name="networkManager">The network manager.</param> /// <param name="jsonSerializer">The json serializer.</param> /// <param name="logger">The logger.</param> /// <param name="configurationManager">The configuration manager.</param> /// <exception cref="System.ArgumentNullException">applicationHost</exception> - public ServerManager(IApplicationHost applicationHost, IKernel kernel, INetworkManager networkManager, IJsonSerializer jsonSerializer, ILogger logger, IConfigurationManager configurationManager) + public ServerManager(IApplicationHost applicationHost, INetworkManager networkManager, IJsonSerializer jsonSerializer, ILogger logger, IServerConfigurationManager configurationManager, Kernel kernel) { if (applicationHost == null) { throw new ArgumentNullException("applicationHost"); } - if (kernel == null) - { - throw new ArgumentNullException("kernel"); - } if (networkManager == null) { throw new ArgumentNullException("networkManager"); @@ -143,10 +136,10 @@ namespace MediaBrowser.Common.Implementations.ServerManager _logger = logger; _jsonSerializer = jsonSerializer; - _kernel = kernel; _applicationHost = applicationHost; _networkManager = networkManager; ConfigurationManager = configurationManager; + _kernel = kernel; } /// <summary> @@ -175,17 +168,11 @@ namespace MediaBrowser.Common.Implementations.ServerManager /// </summary> private void ReloadExternalWebSocketServer() { - // Avoid windows firewall prompts in the ui - if (_kernel.KernelContext != KernelContext.Server) - { - return; - } - DisposeExternalWebSocketServer(); ExternalWebSocketServer = _applicationHost.Resolve<IWebSocketServer>(); - ExternalWebSocketServer.Start(ConfigurationManager.CommonConfiguration.LegacyWebSocketPortNumber); + ExternalWebSocketServer.Start(ConfigurationManager.Configuration.LegacyWebSocketPortNumber); ExternalWebSocketServer.WebSocketConnected += HttpServer_WebSocketConnected; } @@ -208,7 +195,7 @@ namespace MediaBrowser.Common.Implementations.ServerManager try { HttpServer = _applicationHost.Resolve<IHttpServer>(); - HttpServer.EnableHttpRequestLogging = ConfigurationManager.CommonConfiguration.EnableHttpLevelLogging; + HttpServer.EnableHttpRequestLogging = ConfigurationManager.Configuration.EnableHttpLevelLogging; HttpServer.Start(_kernel.HttpServerUrlPrefix); } catch (HttpListenerException ex) @@ -275,12 +262,6 @@ namespace MediaBrowser.Common.Implementations.ServerManager return; } - // Avoid windows firewall prompts in the ui - if (_kernel.KernelContext != KernelContext.Server) - { - return; - } - DisposeUdpServer(); try @@ -305,7 +286,9 @@ namespace MediaBrowser.Common.Implementations.ServerManager /// <param name="e">The <see cref="UdpMessageReceivedEventArgs" /> instance containing the event data.</param> async void UdpServer_MessageReceived(object sender, UdpMessageReceivedEventArgs e) { - var expectedMessage = String.Format("who is MediaBrowser{0}?", _kernel.KernelContext); + var context = "Server"; + + var expectedMessage = String.Format("who is MediaBrowser{0}?", context); var expectedMessageBytes = Encoding.UTF8.GetBytes(expectedMessage); if (expectedMessageBytes.SequenceEqual(e.Bytes)) @@ -313,7 +296,7 @@ namespace MediaBrowser.Common.Implementations.ServerManager _logger.Info("Received UDP server request from " + e.RemoteEndPoint); // Send a response back with our ip address and port - var response = String.Format("MediaBrowser{0}|{1}:{2}", _kernel.KernelContext, _networkManager.GetLocalIpAddress(), _kernel.UdpServerPortNumber); + var response = String.Format("MediaBrowser{0}|{1}:{2}", context, _networkManager.GetLocalIpAddress(), _kernel.UdpServerPortNumber); await UdpServer.SendAsync(Encoding.UTF8.GetBytes(response), e.RemoteEndPoint); } @@ -447,7 +430,7 @@ namespace MediaBrowser.Common.Implementations.ServerManager var tmpFile = Path.Combine(ConfigurationManager.CommonApplicationPaths.TempDirectory, Guid.NewGuid() + ".bat"); // Extract the bat file - using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("MediaBrowser.Common.Implementations.ServerManager.RegisterServer.bat")) + using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("MediaBrowser.Server.Implementations.ServerManager.RegisterServer.bat")) { using (var fileStream = File.Create(tmpFile)) { @@ -459,10 +442,10 @@ namespace MediaBrowser.Common.Implementations.ServerManager { FileName = tmpFile, - Arguments = string.Format("{0} {1} {2} {3}", ConfigurationManager.CommonConfiguration.HttpServerPortNumber, + Arguments = string.Format("{0} {1} {2} {3}", ConfigurationManager.Configuration.HttpServerPortNumber, _kernel.HttpServerUrlPrefix, _kernel.UdpServerPortNumber, - ConfigurationManager.CommonConfiguration.LegacyWebSocketPortNumber), + ConfigurationManager.Configuration.LegacyWebSocketPortNumber), CreateNoWindow = true, WindowStyle = ProcessWindowStyle.Hidden, @@ -517,14 +500,14 @@ namespace MediaBrowser.Common.Implementations.ServerManager /// <exception cref="System.NotImplementedException"></exception> void _kernel_ConfigurationUpdated(object sender, EventArgs e) { - HttpServer.EnableHttpRequestLogging = ConfigurationManager.CommonConfiguration.EnableHttpLevelLogging; + HttpServer.EnableHttpRequestLogging = ConfigurationManager.Configuration.EnableHttpLevelLogging; if (!string.Equals(HttpServer.UrlPrefix, _kernel.HttpServerUrlPrefix, StringComparison.OrdinalIgnoreCase)) { ReloadHttpServer(); } - if (!SupportsNativeWebSocket && ExternalWebSocketServer != null && ExternalWebSocketServer.Port != ConfigurationManager.CommonConfiguration.LegacyWebSocketPortNumber) + if (!SupportsNativeWebSocket && ExternalWebSocketServer != null && ExternalWebSocketServer.Port != ConfigurationManager.Configuration.LegacyWebSocketPortNumber) { ReloadExternalWebSocketServer(); } diff --git a/MediaBrowser.Common.Implementations/ServerManager/WebSocketConnection.cs b/MediaBrowser.Server.Implementations/ServerManager/WebSocketConnection.cs index f826b02cc..d92c60773 100644 --- a/MediaBrowser.Common.Implementations/ServerManager/WebSocketConnection.cs +++ b/MediaBrowser.Server.Implementations/ServerManager/WebSocketConnection.cs @@ -6,7 +6,7 @@ using System.IO; using System.Threading; using System.Threading.Tasks; -namespace MediaBrowser.Common.Implementations.ServerManager +namespace MediaBrowser.Server.Implementations.ServerManager { /// <summary> /// Class WebSocketConnection diff --git a/MediaBrowser.Server.Implementations/Sqlite/SQLiteDisplayPreferencesRepository.cs b/MediaBrowser.Server.Implementations/Sqlite/SQLiteDisplayPreferencesRepository.cs index d6a0858af..ddf44d407 100644 --- a/MediaBrowser.Server.Implementations/Sqlite/SQLiteDisplayPreferencesRepository.cs +++ b/MediaBrowser.Server.Implementations/Sqlite/SQLiteDisplayPreferencesRepository.cs @@ -1,5 +1,4 @@ using MediaBrowser.Common.Configuration; -using MediaBrowser.Common.Kernel; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Persistence; using MediaBrowser.Model.Entities; diff --git a/MediaBrowser.Server.Implementations/Sqlite/SQLiteItemRepository.cs b/MediaBrowser.Server.Implementations/Sqlite/SQLiteItemRepository.cs index 87cce1785..6a9a9f6f5 100644 --- a/MediaBrowser.Server.Implementations/Sqlite/SQLiteItemRepository.cs +++ b/MediaBrowser.Server.Implementations/Sqlite/SQLiteItemRepository.cs @@ -1,5 +1,4 @@ using MediaBrowser.Common.Configuration; -using MediaBrowser.Common.Kernel; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Persistence; using MediaBrowser.Model.Logging; diff --git a/MediaBrowser.Server.Implementations/Sqlite/SQLiteUserDataRepository.cs b/MediaBrowser.Server.Implementations/Sqlite/SQLiteUserDataRepository.cs index 64ba4d1e2..dafdce798 100644 --- a/MediaBrowser.Server.Implementations/Sqlite/SQLiteUserDataRepository.cs +++ b/MediaBrowser.Server.Implementations/Sqlite/SQLiteUserDataRepository.cs @@ -1,5 +1,4 @@ using MediaBrowser.Common.Configuration; -using MediaBrowser.Common.Kernel; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Persistence; using MediaBrowser.Model.Logging; diff --git a/MediaBrowser.Server.Implementations/Sqlite/SQLiteUserRepository.cs b/MediaBrowser.Server.Implementations/Sqlite/SQLiteUserRepository.cs index 89d2900dd..43dffc596 100644 --- a/MediaBrowser.Server.Implementations/Sqlite/SQLiteUserRepository.cs +++ b/MediaBrowser.Server.Implementations/Sqlite/SQLiteUserRepository.cs @@ -1,5 +1,4 @@ using MediaBrowser.Common.Configuration; -using MediaBrowser.Common.Kernel; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Persistence; using MediaBrowser.Model.Logging; diff --git a/MediaBrowser.Common.Implementations/Udp/UdpServer.cs b/MediaBrowser.Server.Implementations/Udp/UdpServer.cs index e0435ab3c..c6869c12d 100644 --- a/MediaBrowser.Common.Implementations/Udp/UdpServer.cs +++ b/MediaBrowser.Server.Implementations/Udp/UdpServer.cs @@ -8,7 +8,7 @@ using System.Reactive.Linq; using System.Text; using System.Threading.Tasks; -namespace MediaBrowser.Common.Implementations.Udp +namespace MediaBrowser.Server.Implementations.Udp { /// <summary> /// Provides a Udp Server diff --git a/MediaBrowser.Server.Implementations/Updates/InstallationManager.cs b/MediaBrowser.Server.Implementations/Updates/InstallationManager.cs index e17ed0301..bdbf3896f 100644 --- a/MediaBrowser.Server.Implementations/Updates/InstallationManager.cs +++ b/MediaBrowser.Server.Implementations/Updates/InstallationManager.cs @@ -1,11 +1,9 @@ using MediaBrowser.Common; using MediaBrowser.Common.Events; -using MediaBrowser.Common.Kernel; using MediaBrowser.Common.Net; using MediaBrowser.Common.Plugins; using MediaBrowser.Common.Progress; using MediaBrowser.Common.Updates; -using MediaBrowser.Controller; using MediaBrowser.Controller.Updates; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Serialization; @@ -72,7 +70,7 @@ namespace MediaBrowser.Server.Implementations.Updates EventHelper.QueueEventIfNotNull(PluginUpdated, this, new GenericEventArgs<Tuple<IPlugin, PackageVersionInfo>> { Argument = new Tuple<IPlugin, PackageVersionInfo>(plugin, newVersion) }, _logger); - Kernel.NotifyPendingRestart(); + ApplicationHost.NotifyPendingRestart(); } #endregion @@ -91,7 +89,7 @@ namespace MediaBrowser.Server.Implementations.Updates EventHelper.QueueEventIfNotNull(PluginInstalled, this, new GenericEventArgs<PackageVersionInfo> { Argument = package }, _logger); - Kernel.NotifyPendingRestart(); + ApplicationHost.NotifyPendingRestart(); } #endregion @@ -123,19 +121,16 @@ namespace MediaBrowser.Server.Implementations.Updates /// <value>The application host.</value> protected IApplicationHost ApplicationHost { get; private set; } - private IKernel Kernel { get; set; } - /// <summary> /// Initializes a new instance of the <see cref="InstallationManager" /> class. /// </summary> - /// <param name="kernel">The kernel.</param> /// <param name="httpClient">The HTTP client.</param> /// <param name="packageManager">The package manager.</param> /// <param name="jsonSerializer">The json serializer.</param> /// <param name="logger">The logger.</param> /// <param name="appHost">The app host.</param> /// <exception cref="System.ArgumentNullException">zipClient</exception> - public InstallationManager(IKernel kernel, IHttpClient httpClient, IPackageManager packageManager, IJsonSerializer jsonSerializer, ILogger logger, IApplicationHost appHost) + public InstallationManager(IHttpClient httpClient, IPackageManager packageManager, IJsonSerializer jsonSerializer, ILogger logger, IApplicationHost appHost) { if (packageManager == null) { @@ -161,7 +156,6 @@ namespace MediaBrowser.Server.Implementations.Updates ApplicationHost = appHost; _packageManager = packageManager; _logger = logger; - Kernel = kernel; } /// <summary> @@ -454,7 +448,7 @@ namespace MediaBrowser.Server.Implementations.Updates OnPluginUninstalled(plugin); - Kernel.NotifyPendingRestart(); + ApplicationHost.NotifyPendingRestart(); } /// <summary> diff --git a/MediaBrowser.Common.Implementations/WebSocket/AlchemyServer.cs b/MediaBrowser.Server.Implementations/WebSocket/AlchemyServer.cs index 236bd27b7..37490c3d5 100644 --- a/MediaBrowser.Common.Implementations/WebSocket/AlchemyServer.cs +++ b/MediaBrowser.Server.Implementations/WebSocket/AlchemyServer.cs @@ -5,7 +5,7 @@ using MediaBrowser.Model.Logging; using System; using System.Net; -namespace MediaBrowser.Common.Implementations.WebSocket +namespace MediaBrowser.Server.Implementations.WebSocket { /// <summary> /// Class AlchemyServer diff --git a/MediaBrowser.Common.Implementations/WebSocket/AlchemyWebSocket.cs b/MediaBrowser.Server.Implementations/WebSocket/AlchemyWebSocket.cs index 1ecc38f2c..13a9ce050 100644 --- a/MediaBrowser.Common.Implementations/WebSocket/AlchemyWebSocket.cs +++ b/MediaBrowser.Server.Implementations/WebSocket/AlchemyWebSocket.cs @@ -6,7 +6,7 @@ using System.Text; using System.Threading; using System.Threading.Tasks; -namespace MediaBrowser.Common.Implementations.WebSocket +namespace MediaBrowser.Server.Implementations.WebSocket { /// <summary> /// Class AlchemyWebSocket diff --git a/MediaBrowser.Server.Implementations/packages.config b/MediaBrowser.Server.Implementations/packages.config index fb84d9aa7..002d5974e 100644 --- a/MediaBrowser.Server.Implementations/packages.config +++ b/MediaBrowser.Server.Implementations/packages.config @@ -1,6 +1,18 @@ <?xml version="1.0" encoding="utf-8"?> <packages> + <package id="Alchemy" version="2.2.1" targetFramework="net45" /> <package id="MediaBrowser.BdInfo" version="1.0.0.2" targetFramework="net45" /> <package id="morelinq" version="1.0.15631-beta" targetFramework="net45" /> + <package id="NLog" version="2.0.0.2000" targetFramework="net45" /> + <package id="Rx-Core" version="2.1.30214.0" targetFramework="net45" /> + <package id="Rx-Interfaces" version="2.1.30214.0" targetFramework="net45" /> + <package id="Rx-Linq" version="2.1.30214.0" targetFramework="net45" /> + <package id="ServiceStack" version="3.9.38" targetFramework="net45" /> + <package id="ServiceStack.Api.Swagger" version="3.9.38" targetFramework="net45" /> + <package id="ServiceStack.Common" version="3.9.38" targetFramework="net45" /> + <package id="ServiceStack.Logging.NLog" version="1.0.6.0" targetFramework="net45" /> + <package id="ServiceStack.OrmLite.SqlServer" version="3.9.39" targetFramework="net45" /> + <package id="ServiceStack.Redis" version="3.9.38" targetFramework="net45" /> + <package id="ServiceStack.Text" version="3.9.38" targetFramework="net45" /> <package id="System.Data.SQLite" version="1.0.84.0" targetFramework="net45" /> </packages>
\ No newline at end of file diff --git a/MediaBrowser.Common.Implementations/swagger-ui/css/screen.css b/MediaBrowser.Server.Implementations/swagger-ui/css/screen.css index 07773f9ef..07773f9ef 100644 --- a/MediaBrowser.Common.Implementations/swagger-ui/css/screen.css +++ b/MediaBrowser.Server.Implementations/swagger-ui/css/screen.css diff --git a/MediaBrowser.Common.Implementations/swagger-ui/images/pet_store_api.png b/MediaBrowser.Server.Implementations/swagger-ui/images/pet_store_api.png Binary files differindex f9f9cd4ae..f9f9cd4ae 100644 --- a/MediaBrowser.Common.Implementations/swagger-ui/images/pet_store_api.png +++ b/MediaBrowser.Server.Implementations/swagger-ui/images/pet_store_api.png diff --git a/MediaBrowser.Common.Implementations/swagger-ui/images/wordnik_api.png b/MediaBrowser.Server.Implementations/swagger-ui/images/wordnik_api.png Binary files differindex dca4f1455..dca4f1455 100644 --- a/MediaBrowser.Common.Implementations/swagger-ui/images/wordnik_api.png +++ b/MediaBrowser.Server.Implementations/swagger-ui/images/wordnik_api.png diff --git a/MediaBrowser.Common.Implementations/swagger-ui/index.html b/MediaBrowser.Server.Implementations/swagger-ui/index.html index 0b2b02b10..0b2b02b10 100644 --- a/MediaBrowser.Common.Implementations/swagger-ui/index.html +++ b/MediaBrowser.Server.Implementations/swagger-ui/index.html diff --git a/MediaBrowser.Common.Implementations/swagger-ui/lib/backbone-min.js b/MediaBrowser.Server.Implementations/swagger-ui/lib/backbone-min.js index c1c0d4fff..c1c0d4fff 100644 --- a/MediaBrowser.Common.Implementations/swagger-ui/lib/backbone-min.js +++ b/MediaBrowser.Server.Implementations/swagger-ui/lib/backbone-min.js diff --git a/MediaBrowser.Common.Implementations/swagger-ui/lib/handlebars.runtime-1.0.0.beta.6.js b/MediaBrowser.Server.Implementations/swagger-ui/lib/handlebars.runtime-1.0.0.beta.6.js index 987a5cd4d..987a5cd4d 100644 --- a/MediaBrowser.Common.Implementations/swagger-ui/lib/handlebars.runtime-1.0.0.beta.6.js +++ b/MediaBrowser.Server.Implementations/swagger-ui/lib/handlebars.runtime-1.0.0.beta.6.js diff --git a/MediaBrowser.Common.Implementations/swagger-ui/lib/jquery.ba-bbq.min.js b/MediaBrowser.Server.Implementations/swagger-ui/lib/jquery.ba-bbq.min.js index bcbf24834..bcbf24834 100644 --- a/MediaBrowser.Common.Implementations/swagger-ui/lib/jquery.ba-bbq.min.js +++ b/MediaBrowser.Server.Implementations/swagger-ui/lib/jquery.ba-bbq.min.js diff --git a/MediaBrowser.Common.Implementations/swagger-ui/lib/jquery.min.js b/MediaBrowser.Server.Implementations/swagger-ui/lib/jquery.min.js index 16ad06c5a..16ad06c5a 100644 --- a/MediaBrowser.Common.Implementations/swagger-ui/lib/jquery.min.js +++ b/MediaBrowser.Server.Implementations/swagger-ui/lib/jquery.min.js diff --git a/MediaBrowser.Common.Implementations/swagger-ui/lib/jquery.slideto.min.js b/MediaBrowser.Server.Implementations/swagger-ui/lib/jquery.slideto.min.js index ba32cff36..ba32cff36 100644 --- a/MediaBrowser.Common.Implementations/swagger-ui/lib/jquery.slideto.min.js +++ b/MediaBrowser.Server.Implementations/swagger-ui/lib/jquery.slideto.min.js diff --git a/MediaBrowser.Common.Implementations/swagger-ui/lib/jquery.wiggle.min.js b/MediaBrowser.Server.Implementations/swagger-ui/lib/jquery.wiggle.min.js index 2adb0d6d5..2adb0d6d5 100644 --- a/MediaBrowser.Common.Implementations/swagger-ui/lib/jquery.wiggle.min.js +++ b/MediaBrowser.Server.Implementations/swagger-ui/lib/jquery.wiggle.min.js diff --git a/MediaBrowser.Common.Implementations/swagger-ui/lib/swagger.js b/MediaBrowser.Server.Implementations/swagger-ui/lib/swagger.js index 68d8e40cc..68d8e40cc 100644 --- a/MediaBrowser.Common.Implementations/swagger-ui/lib/swagger.js +++ b/MediaBrowser.Server.Implementations/swagger-ui/lib/swagger.js diff --git a/MediaBrowser.Common.Implementations/swagger-ui/lib/underscore-min.js b/MediaBrowser.Server.Implementations/swagger-ui/lib/underscore-min.js index 5a0cb3b00..5a0cb3b00 100644 --- a/MediaBrowser.Common.Implementations/swagger-ui/lib/underscore-min.js +++ b/MediaBrowser.Server.Implementations/swagger-ui/lib/underscore-min.js diff --git a/MediaBrowser.Common.Implementations/swagger-ui/swagger-ui.js b/MediaBrowser.Server.Implementations/swagger-ui/swagger-ui.js index 4cdcc3976..4cdcc3976 100644 --- a/MediaBrowser.Common.Implementations/swagger-ui/swagger-ui.js +++ b/MediaBrowser.Server.Implementations/swagger-ui/swagger-ui.js diff --git a/MediaBrowser.Common.Implementations/swagger-ui/swagger-ui.min.js b/MediaBrowser.Server.Implementations/swagger-ui/swagger-ui.min.js index 6ab803707..6ab803707 100644 --- a/MediaBrowser.Common.Implementations/swagger-ui/swagger-ui.min.js +++ b/MediaBrowser.Server.Implementations/swagger-ui/swagger-ui.min.js diff --git a/MediaBrowser.ServerApplication/App.xaml.cs b/MediaBrowser.ServerApplication/App.xaml.cs index 470b7fc55..a3e273438 100644 --- a/MediaBrowser.ServerApplication/App.xaml.cs +++ b/MediaBrowser.ServerApplication/App.xaml.cs @@ -1,18 +1,17 @@ -using System.IO; -using MediaBrowser.Common.Configuration; +using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Constants; -using MediaBrowser.Common.Kernel; -using MediaBrowser.Common.Updates; +using MediaBrowser.Common.Implementations.Updates; using MediaBrowser.Controller; +using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Model.Logging; using MediaBrowser.Server.Implementations; using Microsoft.Win32; using System; using System.Diagnostics; +using System.IO; using System.Net.Cache; using System.Threading; -using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Media; @@ -209,9 +208,9 @@ namespace MediaBrowser.ServerApplication /// Opens the dashboard page. /// </summary> /// <param name="page">The page.</param> - public static void OpenDashboardPage(string page, User loggedInUser, IConfigurationManager configurationManager) + public static void OpenDashboardPage(string page, User loggedInUser, IServerConfigurationManager configurationManager) { - var url = "http://localhost:" + configurationManager.CommonConfiguration.HttpServerPortNumber + "/" + + var url = "http://localhost:" + configurationManager.Configuration.HttpServerPortNumber + "/" + Kernel.Instance.WebApplicationName + "/dashboard/" + page; if (loggedInUser != null) diff --git a/MediaBrowser.ServerApplication/ApplicationHost.cs b/MediaBrowser.ServerApplication/ApplicationHost.cs index d22c522e7..df3765818 100644 --- a/MediaBrowser.ServerApplication/ApplicationHost.cs +++ b/MediaBrowser.ServerApplication/ApplicationHost.cs @@ -2,12 +2,11 @@ using MediaBrowser.Common; using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Constants; +using MediaBrowser.Common.Events; using MediaBrowser.Common.Implementations; -using MediaBrowser.Common.Implementations.HttpServer; -using MediaBrowser.Common.Implementations.Logging; using MediaBrowser.Common.Implementations.ScheduledTasks; using MediaBrowser.Common.IO; -using MediaBrowser.Common.Kernel; +using MediaBrowser.Common.Net; using MediaBrowser.Common.Updates; using MediaBrowser.Controller; using MediaBrowser.Controller.Configuration; @@ -17,15 +16,18 @@ using MediaBrowser.Controller.Resolvers; using MediaBrowser.Controller.Updates; using MediaBrowser.IsoMounter; using MediaBrowser.Model.IO; -using MediaBrowser.Model.Logging; using MediaBrowser.Model.MediaInfo; using MediaBrowser.Model.System; using MediaBrowser.Model.Updates; using MediaBrowser.Server.Implementations; using MediaBrowser.Server.Implementations.BdInfo; using MediaBrowser.Server.Implementations.Configuration; +using MediaBrowser.Server.Implementations.HttpServer; using MediaBrowser.Server.Implementations.Library; +using MediaBrowser.Server.Implementations.ServerManager; +using MediaBrowser.Server.Implementations.Udp; using MediaBrowser.Server.Implementations.Updates; +using MediaBrowser.Server.Implementations.WebSocket; using MediaBrowser.ServerApplication.Implementations; using MediaBrowser.WebDashboard.Api; using System; @@ -41,16 +43,13 @@ namespace MediaBrowser.ServerApplication /// <summary> /// Class CompositionRoot /// </summary> - public class ApplicationHost : BaseApplicationHost<ServerApplicationPaths> + public class ApplicationHost : BaseApplicationHost<ServerApplicationPaths>, IServerApplicationHost { /// <summary> /// Gets the server kernel. /// </summary> /// <value>The server kernel.</value> - protected Kernel ServerKernel - { - get { return (Kernel)Kernel; } - } + protected Kernel ServerKernel { get; set; } /// <summary> /// Gets the server configuration manager. @@ -62,15 +61,6 @@ namespace MediaBrowser.ServerApplication } /// <summary> - /// Gets the kernel. - /// </summary> - /// <returns>IKernel.</returns> - protected override IKernel GetKernel() - { - return new Kernel(this, XmlSerializer, LogManager, ServerConfigurationManager); - } - - /// <summary> /// Gets the name of the log file prefix. /// </summary> /// <value>The name of the log file prefix.</value> @@ -88,30 +78,50 @@ namespace MediaBrowser.ServerApplication return new ServerConfigurationManager(ApplicationPaths, LogManager, XmlSerializer); } + private IInstallationManager InstallationManager { get; set; } + private IServerManager ServerManager { get; set; } + + public override async Task Init() + { + await base.Init().ConfigureAwait(false); + + await ServerKernel.Init().ConfigureAwait(false); + } + /// <summary> /// Registers resources that classes will depend on /// </summary> protected override async Task RegisterResources() { + ServerKernel = new Kernel(this, XmlSerializer, LogManager, ServerConfigurationManager); + await base.RegisterResources().ConfigureAwait(false); + RegisterSingleInstance<IServerApplicationHost>(this); RegisterSingleInstance<IServerApplicationPaths>(ApplicationPaths); - + RegisterSingleInstance(ServerKernel); RegisterSingleInstance(ServerConfigurationManager); + RegisterSingleInstance<IWebSocketServer>(() => new AlchemyServer(Logger)); + RegisterSingleInstance<IUdpServer>(new UdpServer(Logger), false); + RegisterSingleInstance<IIsoManager>(new PismoIsoManager(Logger)); RegisterSingleInstance<IBlurayExaminer>(new BdInfoExaminer()); RegisterSingleInstance<IZipClient>(new DotNetZipClient()); RegisterSingleInstance(ServerFactory.CreateServer(this, ProtobufSerializer, Logger, "Media Browser", "index.html"), false); + ServerManager = new ServerManager(this, NetworkManager, JsonSerializer, Logger, ServerConfigurationManager, ServerKernel); + RegisterSingleInstance(ServerManager); + var userManager = new UserManager(ServerKernel, Logger, ServerConfigurationManager); RegisterSingleInstance<IUserManager>(userManager); RegisterSingleInstance<ILibraryManager>(new LibraryManager(ServerKernel, Logger, TaskManager, userManager, ServerConfigurationManager)); - RegisterSingleInstance<IInstallationManager>(new InstallationManager(Kernel, HttpClient, PackageManager, JsonSerializer, Logger, this)); + InstallationManager = new InstallationManager(HttpClient, PackageManager, JsonSerializer, Logger, this); + RegisterSingleInstance(InstallationManager); } /// <summary> @@ -121,6 +131,11 @@ namespace MediaBrowser.ServerApplication { base.FindParts(); + Resolve<IHttpServer>().Init(GetExports<IRestfulService>(false)); + Resolve<IServerManager>().AddWebSocketListeners(GetExports<IWebSocketListener>(false)); + + Resolve<IServerManager>().Start(); + Resolve<ILibraryManager>().AddParts(GetExports<IResolverIgnoreRule>(), GetExports<IVirtualFolderCreator>(), GetExports<IItemResolver>(), GetExports<IIntroProvider>()); } @@ -158,19 +173,6 @@ namespace MediaBrowser.ServerApplication } /// <summary> - /// Updates the application. - /// </summary> - /// <param name="package">The package that contains the update</param> - /// <param name="cancellationToken">The cancellation token.</param> - /// <param name="progress">The progress.</param> - /// <returns>Task.</returns> - public override Task UpdateApplication(PackageVersionInfo package, CancellationToken cancellationToken, IProgress<double> progress) - { - var pkgManager = Resolve<IPackageManager>(); - return pkgManager.InstallPackage(progress, package, cancellationToken); - } - - /// <summary> /// Gets the composable part assemblies. /// </summary> /// <returns>IEnumerable{Assembly}.</returns> @@ -195,7 +197,7 @@ namespace MediaBrowser.ServerApplication yield return typeof(SystemInfo).Assembly; // Include composable parts in the Common assembly - yield return typeof(IKernel).Assembly; + yield return typeof(IApplicationHost).Assembly; // Include composable parts in the Controller assembly yield return typeof(Kernel).Assembly; @@ -211,6 +213,25 @@ namespace MediaBrowser.ServerApplication } /// <summary> + /// Gets the system status. + /// </summary> + /// <returns>SystemInfo.</returns> + public virtual SystemInfo GetSystemInfo() + { + return new SystemInfo + { + HasPendingRestart = HasPendingRestart, + Version = ApplicationVersion.ToString(), + IsNetworkDeployed = CanSelfUpdate, + WebSocketPortNumber = ServerManager.WebSocketPortNumber, + SupportsNativeWebSocket = ServerManager.SupportsNativeWebSocket, + FailedPluginAssemblies = FailedAssemblies.ToArray(), + InProgressInstallations = InstallationManager.CurrentInstallations.Select(i => i.Item1).ToArray(), + CompletedInstallations = InstallationManager.CompletedInstallations.ToArray() + }; + } + + /// <summary> /// Shuts down. /// </summary> public override void Shutdown() diff --git a/MediaBrowser.ServerApplication/StartupWizard.cs b/MediaBrowser.ServerApplication/StartupWizard.cs index 57a90ea81..f7946c711 100644 --- a/MediaBrowser.ServerApplication/StartupWizard.cs +++ b/MediaBrowser.ServerApplication/StartupWizard.cs @@ -1,5 +1,5 @@ using MediaBrowser.Common; -using MediaBrowser.Common.Configuration; +using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Plugins; using System.Linq; @@ -20,14 +20,14 @@ namespace MediaBrowser.ServerApplication /// </summary> private readonly IUserManager _userManager; - private readonly IConfigurationManager _configurationManager; + private readonly IServerConfigurationManager _configurationManager; /// <summary> /// Initializes a new instance of the <see cref="StartupWizard" /> class. /// </summary> /// <param name="appHost">The app host.</param> /// <param name="userManager">The user manager.</param> - public StartupWizard(IApplicationHost appHost, IUserManager userManager, IConfigurationManager configurationManager) + public StartupWizard(IApplicationHost appHost, IUserManager userManager, IServerConfigurationManager configurationManager) { _appHost = appHost; _userManager = userManager; diff --git a/MediaBrowser.ServerApplication/WebSocketEvents.cs b/MediaBrowser.ServerApplication/WebSocketEvents.cs index caa4ca2ab..43972bafc 100644 --- a/MediaBrowser.ServerApplication/WebSocketEvents.cs +++ b/MediaBrowser.ServerApplication/WebSocketEvents.cs @@ -1,11 +1,14 @@ using MediaBrowser.Common.Events; -using MediaBrowser.Common.Kernel; +using MediaBrowser.Common.Net; using MediaBrowser.Common.Plugins; +using MediaBrowser.Common.ScheduledTasks; +using MediaBrowser.Controller; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Plugins; using MediaBrowser.Controller.Updates; using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Tasks; using MediaBrowser.Model.Updates; using System; @@ -43,7 +46,9 @@ namespace MediaBrowser.ServerApplication /// <summary> /// The _kernel /// </summary> - private readonly IKernel _kernel; + private readonly IServerApplicationHost _appHost; + + private readonly ITaskManager _taskManager; /// <summary> /// Initializes a new instance of the <see cref="WebSocketEvents" /> class. @@ -51,14 +56,15 @@ namespace MediaBrowser.ServerApplication /// <param name="serverManager">The server manager.</param> /// <param name="logger">The logger.</param> /// <param name="userManager">The user manager.</param> - public WebSocketEvents(IServerManager serverManager, IKernel kernel, ILogger logger, IUserManager userManager, ILibraryManager libraryManager, IInstallationManager installationManager) + public WebSocketEvents(IServerManager serverManager, IServerApplicationHost appHost, ILogger logger, IUserManager userManager, ILibraryManager libraryManager, IInstallationManager installationManager, ITaskManager taskManager) { _serverManager = serverManager; _logger = logger; _userManager = userManager; _libraryManager = libraryManager; _installationManager = installationManager; - _kernel = kernel; + _appHost = appHost; + _taskManager = taskManager; } public void Run() @@ -68,13 +74,27 @@ namespace MediaBrowser.ServerApplication _libraryManager.LibraryChanged += libraryManager_LibraryChanged; - _kernel.HasPendingRestartChanged += kernel_HasPendingRestartChanged; + _appHost.HasPendingRestartChanged += kernel_HasPendingRestartChanged; _installationManager.PluginUninstalled += InstallationManager_PluginUninstalled; _installationManager.PackageInstalling += installationManager_PackageInstalling; _installationManager.PackageInstallationCancelled += installationManager_PackageInstallationCancelled; _installationManager.PackageInstallationCompleted += installationManager_PackageInstallationCompleted; _installationManager.PackageInstallationFailed += installationManager_PackageInstallationFailed; + + _taskManager.TaskExecuting += _taskManager_TaskExecuting; + _taskManager.TaskCompleted += _taskManager_TaskCompleted; + } + + void _taskManager_TaskCompleted(object sender, GenericEventArgs<TaskResult> e) + { + _serverManager.SendWebSocketMessage("ScheduledTaskEndExecute", e.Argument); + } + + void _taskManager_TaskExecuting(object sender, EventArgs e) + { + var task = (IScheduledTask) sender; + _serverManager.SendWebSocketMessage("ScheduledTaskBeginExecute", task.Name); } /// <summary> @@ -144,9 +164,7 @@ namespace MediaBrowser.ServerApplication /// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param> void kernel_HasPendingRestartChanged(object sender, EventArgs e) { - var kernel = (IKernel)sender; - - _serverManager.SendWebSocketMessage("HasPendingRestartChanged", kernel.GetSystemInfo()); + _serverManager.SendWebSocketMessage("HasPendingRestartChanged", _appHost.GetSystemInfo()); } /// <summary> @@ -196,7 +214,7 @@ namespace MediaBrowser.ServerApplication _installationManager.PackageInstallationCompleted -= installationManager_PackageInstallationCompleted; _installationManager.PackageInstallationFailed -= installationManager_PackageInstallationFailed; - _kernel.HasPendingRestartChanged -= kernel_HasPendingRestartChanged; + _appHost.HasPendingRestartChanged -= kernel_HasPendingRestartChanged; } } } diff --git a/MediaBrowser.WebDashboard/Api/DashboardInfoWebSocketListener.cs b/MediaBrowser.WebDashboard/Api/DashboardInfoWebSocketListener.cs index 93b23b943..cdcdb49dc 100644 --- a/MediaBrowser.WebDashboard/Api/DashboardInfoWebSocketListener.cs +++ b/MediaBrowser.WebDashboard/Api/DashboardInfoWebSocketListener.cs @@ -1,4 +1,4 @@ -using MediaBrowser.Common.Kernel; +using MediaBrowser.Common.Net; using MediaBrowser.Common.ScheduledTasks; using MediaBrowser.Controller; using MediaBrowser.Controller.Library; @@ -23,10 +23,7 @@ namespace MediaBrowser.WebDashboard.Api get { return "DashboardInfo"; } } - /// <summary> - /// The _kernel - /// </summary> - private readonly Kernel _kernel; + private readonly IServerApplicationHost _appHost; /// <summary> /// Gets or sets the task manager. @@ -42,14 +39,13 @@ namespace MediaBrowser.WebDashboard.Api /// <summary> /// Initializes a new instance of the <see cref="DashboardInfoWebSocketListener" /> class. /// </summary> - /// <param name="kernel">The kernel.</param> /// <param name="logger">The logger.</param> /// <param name="taskManager">The task manager.</param> /// <param name="userManager">The user manager.</param> - public DashboardInfoWebSocketListener(Kernel kernel, ILogger logger, ITaskManager taskManager, IUserManager userManager) + public DashboardInfoWebSocketListener(IServerApplicationHost appHost, ILogger logger, ITaskManager taskManager, IUserManager userManager) : base(logger) { - _kernel = kernel; + _appHost = appHost; _taskManager = taskManager; _userManager = userManager; } @@ -61,7 +57,7 @@ namespace MediaBrowser.WebDashboard.Api /// <returns>Task{IEnumerable{TaskInfo}}.</returns> protected override Task<DashboardInfo> GetDataToSend(object state) { - return Task.FromResult(DashboardService.GetDashboardInfo(_kernel, Logger, _taskManager, _userManager)); + return Task.FromResult(DashboardService.GetDashboardInfo(_appHost, Logger, _taskManager, _userManager)); } } } diff --git a/MediaBrowser.WebDashboard/Api/DashboardService.cs b/MediaBrowser.WebDashboard/Api/DashboardService.cs index 0c63e00b2..136a9170e 100644 --- a/MediaBrowser.WebDashboard/Api/DashboardService.cs +++ b/MediaBrowser.WebDashboard/Api/DashboardService.cs @@ -1,5 +1,4 @@ using MediaBrowser.Common.Extensions; -using MediaBrowser.Common.Implementations.HttpServer; using MediaBrowser.Common.Net; using MediaBrowser.Common.ScheduledTasks; using MediaBrowser.Controller; @@ -7,6 +6,7 @@ using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Plugins; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Tasks; +using MediaBrowser.Server.Implementations.HttpServer; using ServiceStack.ServiceHost; using System; using System.Collections.Generic; @@ -89,15 +89,18 @@ namespace MediaBrowser.WebDashboard.Api /// </summary> private readonly IUserManager _userManager; + private readonly IServerApplicationHost _appHost; + /// <summary> /// Initializes a new instance of the <see cref="DashboardService" /> class. /// </summary> /// <param name="taskManager">The task manager.</param> /// <param name="userManager">The user manager.</param> - public DashboardService(ITaskManager taskManager, IUserManager userManager) + public DashboardService(ITaskManager taskManager, IUserManager userManager, IServerApplicationHost appHost) { _taskManager = taskManager; _userManager = userManager; + _appHost = appHost; } /// <summary> @@ -107,18 +110,17 @@ namespace MediaBrowser.WebDashboard.Api /// <returns>System.Object.</returns> public object Get(GetDashboardInfo request) { - return GetDashboardInfo(Kernel.Instance, Logger, _taskManager, _userManager); + return GetDashboardInfo(_appHost, Logger, _taskManager, _userManager); } /// <summary> /// Gets the dashboard info. /// </summary> - /// <param name="kernel">The kernel.</param> /// <param name="logger">The logger.</param> /// <param name="taskManager">The task manager.</param> /// <param name="userManager">The user manager.</param> /// <returns>DashboardInfo.</returns> - public static DashboardInfo GetDashboardInfo(Kernel kernel, ILogger logger, ITaskManager taskManager, IUserManager userManager) + public static DashboardInfo GetDashboardInfo(IServerApplicationHost appHost, ILogger logger, ITaskManager taskManager, IUserManager userManager) { var connections = userManager.ConnectedUsers.ToArray(); @@ -126,7 +128,7 @@ namespace MediaBrowser.WebDashboard.Api return new DashboardInfo { - SystemInfo = kernel.GetSystemInfo(), + SystemInfo = appHost.GetSystemInfo(), RunningTasks = taskManager.ScheduledTasks.Where(i => i.State == TaskState.Running || i.State == TaskState.Cancelling) .Select(ScheduledTaskHelpers.GetTaskInfo) diff --git a/MediaBrowser.WebDashboard/Html/css/site.css b/MediaBrowser.WebDashboard/Html/css/site.css index 7fb09381f..6b7081b90 100644 --- a/MediaBrowser.WebDashboard/Html/css/site.css +++ b/MediaBrowser.WebDashboard/Html/css/site.css @@ -82,7 +82,7 @@ pre, textarea.pre { background-attachment: fixed;
}
-.libraryPage, .libraryPage .ui-content {
+.libraryPage, .itemListContent {
background: #262626!important;
background-attachment: fixed!important;
}
diff --git a/MediaBrowser.WebDashboard/Html/itemList.html b/MediaBrowser.WebDashboard/Html/itemList.html index 728f38a28..4be44b821 100644 --- a/MediaBrowser.WebDashboard/Html/itemList.html +++ b/MediaBrowser.WebDashboard/Html/itemList.html @@ -5,10 +5,10 @@ </head> <body> <div id="itemListPage" data-role="page" class="page libraryPage" data-theme="a"> - <div data-role="content"> -<!-- <div style="text-align: right;"> + <div data-role="content" class="itemListContent"> + <div style="text-align: right;"> <button type="button" onclick="$( '#optionsPanel', $.mobile.activePage ).panel( 'open' );" data-mini="true" data-inline="true">Options</button> - </div>--> + </div> <h1 id="itemName" class="listHeader"></h1> diff --git a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj index 7132cd792..e57d7ad2f 100644 --- a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj +++ b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj @@ -88,10 +88,6 @@ <Compile Include="ServerEntryPoint.cs" />
</ItemGroup>
<ItemGroup>
- <ProjectReference Include="..\MediaBrowser.Common.Implementations\MediaBrowser.Common.Implementations.csproj">
- <Project>{c4d2573a-3fd3-441f-81af-174ac4cd4e1d}</Project>
- <Name>MediaBrowser.Common.Implementations</Name>
- </ProjectReference>
<ProjectReference Include="..\MediaBrowser.Common\MediaBrowser.Common.csproj">
<Project>{9142eefa-7570-41e1-bfcc-468bb571af2f}</Project>
<Name>MediaBrowser.Common</Name>
@@ -104,6 +100,10 @@ <Project>{7eeeb4bb-f3e8-48fc-b4c5-70f0fff8329b}</Project>
<Name>MediaBrowser.Model</Name>
</ProjectReference>
+ <ProjectReference Include="..\MediaBrowser.Server.Implementations\MediaBrowser.Server.Implementations.csproj">
+ <Project>{2e781478-814d-4a48-9d80-bff206441a65}</Project>
+ <Name>MediaBrowser.Server.Implementations</Name>
+ </ProjectReference>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Html\index.html" />
diff --git a/Nuget/MediaBrowser.Common.Internal.nuspec b/Nuget/MediaBrowser.Common.Internal.nuspec index 3baa1c2c5..c29c3a260 100644 --- a/Nuget/MediaBrowser.Common.Internal.nuspec +++ b/Nuget/MediaBrowser.Common.Internal.nuspec @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"> +<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd"> <metadata> <id>MediaBrowser.Common.Internal</id> <version>3.0.33</version> @@ -7,23 +7,21 @@ <authors>Luke</authors> <owners>ebr,Luke,scottisafool</owners> <projectUrl>https://github.com/MediaBrowser/MediaBrowser</projectUrl> - <iconUrl>http://www.mb3admin.com/images/mb3icons1-1.png</iconUrl> + <iconUrl>http://www.mb3admin.com/images/mb3icons1-1.png</iconUrl> <requireLicenseAcceptance>false</requireLicenseAcceptance> <description>Contains common components shared by Media Browser Theatre and Media Browser Server. Not intended for plugin developer consumption.</description> <copyright>Copyright © Media Browser 2013</copyright> <dependencies> <dependency id="MediaBrowser.Common" version="3.0.33" /> <dependency id="NLog" version="2.0.0.2000" /> - <dependency id="ServiceStack" version="3.9.38" /> - <dependency id="ServiceStack.Api.Swagger" version="3.9.38" /> - <dependency id="ServiceStack.Logging.NLog" version="1.0.6.0" /> - <dependency id="Rx-Main" version="2.1.30214.0" /> + <dependency id="ServiceStack.Text" version="3.9.38" /> + <dependency id="protobuf-net" version="2.0.0.621" /> </dependencies> </metadata> <files> <file src="dlls\MediaBrowser.Common.Implementations.dll" target="lib\net45\MediaBrowser.Common.Implementations.dll" /> <file src="dlls\MediaBrowser.IsoMounter.dll" target="lib\net45\MediaBrowser.IsoMounter.dll" /> - <file src="dlls\pfmclrapi.dll" target="lib\net45\pfmclrapi.dll" /> <file src="dlls\Mediabrowser.PluginSecurity.dll" target="lib\net45\Mediabrowser.PluginSecurity.dll" /> + <file src="dlls\pfmclrapi.dll" target="lib\net45\pfmclrapi.dll" /> </files> </package>
\ No newline at end of file |
