From 4f67fc4aefc11c1a4293227c70de922dbe03c652 Mon Sep 17 00:00:00 2001 From: LukePulverenti Date: Thu, 7 Mar 2013 00:34:00 -0500 Subject: [PATCH] removed base kernel and ikernel --- MediaBrowser.Api/EnvironmentService.cs | 4 +- MediaBrowser.Api/Images/ImageService.cs | 2 +- .../Javascript/JavascriptApiClientService.cs | 2 +- MediaBrowser.Api/Library/LibraryService.cs | 4 +- .../Library/LibraryStructureService.cs | 4 +- MediaBrowser.Api/LocalizationService.cs | 4 +- MediaBrowser.Api/MediaBrowser.Api.csproj | 8 +- MediaBrowser.Api/PackageService.cs | 2 +- .../Playback/BaseStreamingService.cs | 2 +- MediaBrowser.Api/PluginService.cs | 2 +- .../ScheduledTasks/ScheduledTaskService.cs | 19 +- .../ScheduledTasksWebSocketListener.cs | 2 +- MediaBrowser.Api/SystemService.cs | 10 +- .../UserLibrary/BaseItemsByNameService.cs | 4 +- MediaBrowser.Api/UserLibrary/ItemsService.cs | 5 +- .../UserLibrary/UserLibraryService.cs | 5 +- MediaBrowser.Api/UserService.cs | 2 +- MediaBrowser.Api/WeatherService.cs | 4 +- .../WebSocket/LogFileWebSocketListener.cs | 2 +- .../WebSocket/SystemInfoWebSocketListener.cs | 11 +- .../BaseApplicationHost.cs | 94 +++++++--- .../BaseApplicationPaths.cs | 1 - .../HttpClientManager/HttpClientManager.cs | 2 - ...MediaBrowser.Common.Implementations.csproj | 106 +---------- .../ScheduledTasks/ScheduledTaskWorker.cs | 28 +-- .../ScheduledTasks/TaskManager.cs | 73 ++++---- .../ScheduledTasks/Tasks/SystemUpdateTask.cs | 13 +- .../Security/PluginSecurityManager.cs | 23 +-- .../Updates/ApplicationUpdater.cs | 10 +- .../packages.config | 10 -- MediaBrowser.Common/IApplicationHost.cs | 21 +++ MediaBrowser.Common/Kernel/BaseKernel.cs | 167 ------------------ MediaBrowser.Common/Kernel/IKernel.cs | 74 -------- MediaBrowser.Common/Kernel/KernelContext.cs | 18 -- .../MediaBrowser.Common.csproj | 11 +- .../BasePeriodicWebSocketListener.cs | 5 +- .../{Kernel => Net}/IServerManager.cs | 2 +- .../{Kernel => Net}/IWebSocketListener.cs | 5 +- .../ScheduledTasks/IScheduledTaskWorker.cs | 19 -- .../ScheduledTasks/ITaskManager.cs | 11 +- .../ScheduledTasks/TaskCompletionEventArgs.cs | 12 ++ MediaBrowser.Controller/BaseManager.cs | 50 ------ .../IO/FileSystemManager.cs | 20 +-- .../IServerApplicationHost.cs | 10 ++ .../IServerApplicationPaths.cs | 1 - MediaBrowser.Controller/Kernel.cs | 56 +++--- .../MediaBrowser.Controller.csproj | 2 +- .../Providers/ProviderManager.cs | 15 +- .../BaseApplicationConfiguration.cs | 26 --- .../Configuration/ServerConfiguration.cs | 25 +++ .../HttpServer/BaseRestService.cs | 2 +- .../HttpServer/HttpServer.cs | 4 +- .../HttpServer/NativeWebSocket.cs | 2 +- .../HttpServer/ServerFactory.cs | 4 +- .../HttpServer/StreamWriter.cs | 2 +- .../HttpServer/SwaggerService.cs | 2 +- ...MediaBrowser.Server.Implementations.csproj | 101 +++++++++++ .../README.txt | 0 .../ServerManager/RegisterServer.bat | 0 .../ServerManager/ServerManager.cs | 59 +++---- .../ServerManager/WebSocketConnection.cs | 2 +- .../SQLiteDisplayPreferencesRepository.cs | 1 - .../Sqlite/SQLiteItemRepository.cs | 1 - .../Sqlite/SQLiteUserDataRepository.cs | 1 - .../Sqlite/SQLiteUserRepository.cs | 1 - .../Udp/UdpServer.cs | 2 +- .../Updates/InstallationManager.cs | 14 +- .../WebSocket/AlchemyServer.cs | 2 +- .../WebSocket/AlchemyWebSocket.cs | 2 +- .../packages.config | 12 ++ .../swagger-ui/css/screen.css | 0 .../swagger-ui/images/pet_store_api.png | Bin .../swagger-ui/images/wordnik_api.png | Bin .../swagger-ui/index.html | 0 .../swagger-ui/lib/backbone-min.js | 0 .../lib/handlebars.runtime-1.0.0.beta.6.js | 0 .../swagger-ui/lib/jquery.ba-bbq.min.js | 0 .../swagger-ui/lib/jquery.min.js | 0 .../swagger-ui/lib/jquery.slideto.min.js | 0 .../swagger-ui/lib/jquery.wiggle.min.js | 0 .../swagger-ui/lib/swagger.js | 0 .../swagger-ui/lib/underscore-min.js | 0 .../swagger-ui/swagger-ui.js | 0 .../swagger-ui/swagger-ui.min.js | 0 MediaBrowser.ServerApplication/App.xaml.cs | 13 +- .../ApplicationHost.cs | 89 ++++++---- .../StartupWizard.cs | 6 +- .../WebSocketEvents.cs | 36 +++- .../Api/DashboardInfoWebSocketListener.cs | 14 +- .../Api/DashboardService.cs | 14 +- MediaBrowser.WebDashboard/Html/css/site.css | 2 +- MediaBrowser.WebDashboard/Html/itemList.html | 6 +- .../MediaBrowser.WebDashboard.csproj | 8 +- Nuget/MediaBrowser.Common.Internal.nuspec | 12 +- 94 files changed, 552 insertions(+), 870 deletions(-) rename {MediaBrowser.Common => MediaBrowser.Common.Implementations}/Updates/ApplicationUpdater.cs (82%) delete mode 100644 MediaBrowser.Common/Kernel/BaseKernel.cs delete mode 100644 MediaBrowser.Common/Kernel/IKernel.cs delete mode 100644 MediaBrowser.Common/Kernel/KernelContext.cs rename MediaBrowser.Common/{Kernel => Net}/BasePeriodicWebSocketListener.cs (98%) rename MediaBrowser.Common/{Kernel => Net}/IServerManager.cs (98%) rename MediaBrowser.Common/{Kernel => Net}/IWebSocketListener.cs (80%) create mode 100644 MediaBrowser.Common/ScheduledTasks/TaskCompletionEventArgs.cs delete mode 100644 MediaBrowser.Controller/BaseManager.cs create mode 100644 MediaBrowser.Controller/IServerApplicationHost.cs rename {MediaBrowser.Common.Implementations => MediaBrowser.Server.Implementations}/HttpServer/BaseRestService.cs (99%) rename {MediaBrowser.Common.Implementations => MediaBrowser.Server.Implementations}/HttpServer/HttpServer.cs (99%) rename {MediaBrowser.Common.Implementations => MediaBrowser.Server.Implementations}/HttpServer/NativeWebSocket.cs (98%) rename {MediaBrowser.Common.Implementations => MediaBrowser.Server.Implementations}/HttpServer/ServerFactory.cs (91%) rename {MediaBrowser.Common.Implementations => MediaBrowser.Server.Implementations}/HttpServer/StreamWriter.cs (95%) rename {MediaBrowser.Common.Implementations => MediaBrowser.Server.Implementations}/HttpServer/SwaggerService.cs (95%) rename {MediaBrowser.Common.Implementations => MediaBrowser.Server.Implementations}/README.txt (100%) rename {MediaBrowser.Common.Implementations => MediaBrowser.Server.Implementations}/ServerManager/RegisterServer.bat (100%) rename {MediaBrowser.Common.Implementations => MediaBrowser.Server.Implementations}/ServerManager/ServerManager.cs (91%) rename {MediaBrowser.Common.Implementations => MediaBrowser.Server.Implementations}/ServerManager/WebSocketConnection.cs (99%) rename {MediaBrowser.Common.Implementations => MediaBrowser.Server.Implementations}/Udp/UdpServer.cs (99%) rename {MediaBrowser.Common.Implementations => MediaBrowser.Server.Implementations}/WebSocket/AlchemyServer.cs (98%) rename {MediaBrowser.Common.Implementations => MediaBrowser.Server.Implementations}/WebSocket/AlchemyWebSocket.cs (98%) rename {MediaBrowser.Common.Implementations => MediaBrowser.Server.Implementations}/swagger-ui/css/screen.css (100%) rename {MediaBrowser.Common.Implementations => MediaBrowser.Server.Implementations}/swagger-ui/images/pet_store_api.png (100%) rename {MediaBrowser.Common.Implementations => MediaBrowser.Server.Implementations}/swagger-ui/images/wordnik_api.png (100%) rename {MediaBrowser.Common.Implementations => MediaBrowser.Server.Implementations}/swagger-ui/index.html (100%) rename {MediaBrowser.Common.Implementations => MediaBrowser.Server.Implementations}/swagger-ui/lib/backbone-min.js (100%) rename {MediaBrowser.Common.Implementations => MediaBrowser.Server.Implementations}/swagger-ui/lib/handlebars.runtime-1.0.0.beta.6.js (100%) rename {MediaBrowser.Common.Implementations => MediaBrowser.Server.Implementations}/swagger-ui/lib/jquery.ba-bbq.min.js (100%) rename {MediaBrowser.Common.Implementations => MediaBrowser.Server.Implementations}/swagger-ui/lib/jquery.min.js (100%) rename {MediaBrowser.Common.Implementations => MediaBrowser.Server.Implementations}/swagger-ui/lib/jquery.slideto.min.js (100%) rename {MediaBrowser.Common.Implementations => MediaBrowser.Server.Implementations}/swagger-ui/lib/jquery.wiggle.min.js (100%) rename {MediaBrowser.Common.Implementations => MediaBrowser.Server.Implementations}/swagger-ui/lib/swagger.js (100%) rename {MediaBrowser.Common.Implementations => MediaBrowser.Server.Implementations}/swagger-ui/lib/underscore-min.js (100%) rename {MediaBrowser.Common.Implementations => MediaBrowser.Server.Implementations}/swagger-ui/swagger-ui.js (100%) rename {MediaBrowser.Common.Implementations => MediaBrowser.Server.Implementations}/swagger-ui/swagger-ui.min.js (100%) diff --git a/MediaBrowser.Api/EnvironmentService.cs b/MediaBrowser.Api/EnvironmentService.cs index 56be18d866..6296711ed3 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 1c0e6c68da..d2a612cb9d 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 165574d747..7c4d0d84f6 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 b49cc568fe..39cbe64901 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 df8b2907d8..0ae73ed457 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 18c33a90a4..1493e8e44f 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 c7bba4e9a8..5cedbf85fb 100644 --- a/MediaBrowser.Api/MediaBrowser.Api.csproj +++ b/MediaBrowser.Api/MediaBrowser.Api.csproj @@ -121,10 +121,6 @@ - - {c4d2573a-3fd3-441f-81af-174ac4cd4e1d} - MediaBrowser.Common.Implementations - {9142eefa-7570-41e1-bfcc-468bb571af2f} MediaBrowser.Common @@ -137,6 +133,10 @@ {7eeeb4bb-f3e8-48fc-b4c5-70f0fff8329b} MediaBrowser.Model + + {2e781478-814d-4a48-9d80-bff206441a65} + MediaBrowser.Server.Implementations + diff --git a/MediaBrowser.Api/PackageService.cs b/MediaBrowser.Api/PackageService.cs index 1c0508c6d9..e8ff02539c 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 5107d13c21..796366181e 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 bec6835e0b..847478beb1 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 0c18725faa..5117dc7ac8 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; @@ -84,30 +84,19 @@ namespace MediaBrowser.Api.ScheduledTasks /// The task manager. private ITaskManager TaskManager { get; set; } - /// - /// The _json serializer - /// - private readonly IJsonSerializer _jsonSerializer; - /// /// Initializes a new instance of the class. /// /// The task manager. - /// The json serializer. /// taskManager - 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; } /// @@ -157,7 +146,7 @@ namespace MediaBrowser.Api.ScheduledTasks throw new ResourceNotFoundException("Task not found"); } - task.Execute(); + TaskManager.Execute(task); } /// @@ -174,7 +163,7 @@ namespace MediaBrowser.Api.ScheduledTasks throw new ResourceNotFoundException("Task not found"); } - task.Cancel(); + TaskManager.Cancel(task); } /// diff --git a/MediaBrowser.Api/ScheduledTasks/ScheduledTasksWebSocketListener.cs b/MediaBrowser.Api/ScheduledTasks/ScheduledTasksWebSocketListener.cs index 4ef791e23b..20634301a3 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 96ed70b8f1..3fdf621c0f 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 /// /// The _app host /// - private readonly IApplicationHost _appHost; + private readonly IServerApplicationHost _appHost; /// /// The _configuration manager @@ -80,7 +80,7 @@ namespace MediaBrowser.Api /// The app host. /// The configuration manager. /// jsonSerializer - 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 /// System.Object. 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 e2dd0519ab..9d056c699b 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 b89715d1c1..c2b01f9b0e 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 c40e599989..ca439b346c 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 abf07f9244..d1606f954c 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 d719511826..f2ba68113e 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 2480b2af8b..f11bae5239 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 40c3f2f247..ae8f41c363 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 /// /// The _kernel /// - private readonly IKernel _kernel; + private readonly IServerApplicationHost _appHost; /// /// Initializes a new instance of the class. /// - /// The kernel. /// The logger. - public SystemInfoWebSocketListener(Kernel kernel, ILogger logger) + public SystemInfoWebSocketListener(ILogger logger, IServerApplicationHost appHost) : base(logger) { - _kernel = kernel; + _appHost = appHost; } /// @@ -43,7 +42,7 @@ namespace MediaBrowser.Api.WebSocket /// Task{SystemInfo}. protected override Task 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 77ff4f1885..a5af2ff66a 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; @@ -30,6 +29,22 @@ namespace MediaBrowser.Common.Implementations public abstract class BaseApplicationHost : IApplicationHost where TApplicationPathsType : class, IApplicationPaths, new() { + /// + /// Occurs when [has pending restart changed]. + /// + public event EventHandler HasPendingRestartChanged; + + /// + /// Occurs when [application updated]. + /// + public event EventHandler> ApplicationUpdated; + + /// + /// Gets or sets a value indicating whether this instance has changes that require the entire application to restart. + /// + /// true if this instance has pending application restart; otherwise, false. + public bool HasPendingRestart { get; private set; } + /// /// Gets or sets the logger. /// @@ -132,11 +147,11 @@ namespace MediaBrowser.Common.Implementations /// Gets the kernel. /// /// The kernel. - 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(); } /// @@ -191,7 +202,6 @@ namespace MediaBrowser.Common.Implementations /// The name of the log file prefix. protected abstract string LogFilePrefixName { get; } - protected abstract IKernel GetKernel(); protected abstract IConfigurationManager GetConfigurationManager(); /// @@ -199,10 +209,6 @@ namespace MediaBrowser.Common.Implementations /// protected virtual void FindParts() { - Resolve().Init(GetExports(false)); - Resolve().AddWebSocketListeners(GetExports(false)); - - Resolve().Start(); Resolve().AddTasks(GetExports(false)); Plugins = GetExports(); @@ -239,11 +245,7 @@ namespace MediaBrowser.Common.Implementations RegisterSingleInstance(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(() => new AlchemyServer(Logger)); RegisterSingleInstance(ProtobufSerializer); - RegisterSingleInstance(new UdpServer(Logger), false); HttpClient = new HttpClientManager.HttpClientManager(ApplicationPaths, Logger); RegisterSingleInstance(HttpClient); - RegisterSingleInstance(networkManager); - RegisterSingleInstance(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); }); @@ -450,6 +449,34 @@ namespace MediaBrowser.Common.Implementations Plugins = list; } + /// + /// Performs the pending restart. + /// + /// Task. + public void PerformPendingRestart() + { + if (HasPendingRestart) + { + Logger.Info("Restarting the application"); + + Restart(); + } + else + { + Logger.Info("PerformPendingRestart - not needed"); + } + } + + /// + /// Notifies that the kernel that a change has been made that requires a restart + /// + public void NotifyPendingRestart() + { + HasPendingRestart = true; + + EventHelper.QueueEventIfNotNull(HasPendingRestartChanged, this, EventArgs.Empty, Logger); + } + /// /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. /// @@ -488,7 +515,20 @@ namespace MediaBrowser.Common.Implementations public abstract Task CheckForApplicationUpdate(CancellationToken cancellationToken, IProgress progress); - public abstract Task UpdateApplication(PackageVersionInfo package, CancellationToken cancellationToken, IProgress progress); + /// + /// Updates the application. + /// + /// The package that contains the update + /// The cancellation token. + /// The progress. + /// Task. + public async Task UpdateApplication(PackageVersionInfo package, CancellationToken cancellationToken, IProgress progress) + { + var pkgManager = Resolve(); + await pkgManager.InstallPackage(progress, package, cancellationToken).ConfigureAwait(false); + + EventHelper.QueueEventIfNotNull(ApplicationUpdated, this, new GenericEventArgs { Argument = package.version }, Logger); + } public abstract void Shutdown(); } diff --git a/MediaBrowser.Common.Implementations/BaseApplicationPaths.cs b/MediaBrowser.Common.Implementations/BaseApplicationPaths.cs index d169336162..56e699b358 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 d2af8fa205..d653a5c9b8 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 2f3ebdf190..f73dac71fd 100644 --- a/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj +++ b/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj @@ -35,9 +35,6 @@ Always - - ..\packages\Alchemy.2.2.1\lib\net40\Alchemy.dll - ..\ThirdParty\PluginSecurity\Mediabrowser.PluginSecurity.dll @@ -47,41 +44,6 @@ ..\packages\protobuf-net.2.0.0.621\lib\net40\protobuf-net.dll - - False - ..\packages\ServiceStack.3.9.38\lib\net35\ServiceStack.dll - - - False - ..\packages\ServiceStack.Api.Swagger.3.9.38\lib\net35\ServiceStack.Api.Swagger.dll - - - False - ..\packages\ServiceStack.Common.3.9.38\lib\net35\ServiceStack.Common.dll - - - False - ..\packages\ServiceStack.Common.3.9.38\lib\net35\ServiceStack.Interfaces.dll - - - ..\packages\ServiceStack.Logging.NLog.1.0.6.0\lib\net35\ServiceStack.Logging.NLog.dll - - - False - ..\packages\ServiceStack.OrmLite.SqlServer.3.9.39\lib\ServiceStack.OrmLite.dll - - - False - ..\packages\ServiceStack.OrmLite.SqlServer.3.9.39\lib\ServiceStack.OrmLite.SqlServer.dll - - - False - ..\packages\ServiceStack.Redis.3.9.38\lib\net35\ServiceStack.Redis.dll - - - False - ..\packages\ServiceStack.3.9.38\lib\net35\ServiceStack.ServiceInterface.dll - False ..\packages\ServiceStack.Text.3.9.38\lib\net35\ServiceStack.Text.dll @@ -97,16 +59,6 @@ - - ..\packages\Rx-Core.2.1.30214.0\lib\Net45\System.Reactive.Core.dll - - - ..\packages\Rx-Interfaces.2.1.30214.0\lib\Net45\System.Reactive.Interfaces.dll - - - ..\packages\Rx-Linq.2.1.30214.0\lib\Net45\System.Reactive.Linq.dll - - @@ -117,12 +69,6 @@ - - - - - - @@ -140,12 +86,8 @@ - - - + - - @@ -159,52 +101,6 @@ - - - - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - diff --git a/MediaBrowser.Common.Implementations/ScheduledTasks/ScheduledTaskWorker.cs b/MediaBrowser.Common.Implementations/ScheduledTasks/ScheduledTaskWorker.cs index d5adf32658..f57d48f07a 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; @@ -49,12 +48,6 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks /// The task manager. private ITaskManager TaskManager { get; set; } - /// - /// Gets or sets the server manager. - /// - /// The server manager. - private IServerManager ServerManager { get; set; } - /// /// Initializes a new instance of the class. /// @@ -64,7 +57,7 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks /// The json serializer. /// The logger. /// The server manager. - 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(); 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 /// The start time. /// The end time. /// The status. - /// if set to true [send notification]. - 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); } /// @@ -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 946887303c..61e1f63299 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 /// public class TaskManager : ITaskManager { + public event EventHandler TaskExecuting; + public event EventHandler> TaskCompleted; + /// /// Gets the list of Scheduled Tasks /// @@ -44,26 +48,18 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks /// The logger. private ILogger Logger { get; set; } - /// - /// Gets or sets the server manager. - /// - /// The server manager. - private IServerManager ServerManager { get; set; } - /// /// Initializes a new instance of the class. /// /// The application paths. /// The json serializer. /// The logger. - /// The server manager. /// kernel - 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() 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(); } @@ -101,7 +99,7 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks QueueScheduledTask(scheduledTask); } - + /// /// Queues the scheduled task. /// @@ -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; } @@ -131,31 +129,6 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks } } - /// - /// Called when [task completed]. - /// - /// The task. - 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); - } - } - } - } - /// /// Adds the tasks. /// @@ -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 { Argument = result }, Logger); + } } } diff --git a/MediaBrowser.Common.Implementations/ScheduledTasks/Tasks/SystemUpdateTask.cs b/MediaBrowser.Common.Implementations/ScheduledTasks/Tasks/SystemUpdateTask.cs index 7da1b9c5a5..e74693f938 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; @@ -30,25 +29,17 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks.Tasks /// The logger. private ILogger Logger { get; set; } - /// - /// Gets or sets the kernel. - /// - /// The kernel. - private IKernel Kernel { get; set; } - /// /// Initializes a new instance of the class. /// /// The app host. /// The configuration manager. /// The logger. - /// The kernel. - 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; } /// @@ -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 d1a4940ef4..0404ee7fe8 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; - - /// - /// The _kernel - /// - private readonly IKernel _kernel; + private IApplicationHost _appHost; /// /// Initializes a new instance of the class. /// - /// The kernel. - 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 similarity index 82% rename from MediaBrowser.Common/Updates/ApplicationUpdater.cs rename to MediaBrowser.Common.Implementations/Updates/ApplicationUpdater.cs index a796e1bd2d..3b06f2006d 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 2d6276a8e2..0c064f3e45 100644 --- a/MediaBrowser.Common.Implementations/packages.config +++ b/MediaBrowser.Common.Implementations/packages.config @@ -1,17 +1,7 @@  - - - - - - - - - - \ No newline at end of file diff --git a/MediaBrowser.Common/IApplicationHost.cs b/MediaBrowser.Common/IApplicationHost.cs index 4bd90e531e..8165f77233 100644 --- a/MediaBrowser.Common/IApplicationHost.cs +++ b/MediaBrowser.Common/IApplicationHost.cs @@ -12,6 +12,27 @@ namespace MediaBrowser.Common /// public interface IApplicationHost { + /// + /// Performs the pending restart. + /// + void PerformPendingRestart(); + + /// + /// Gets or sets a value indicating whether this instance has pending kernel reload. + /// + /// true if this instance has pending kernel reload; otherwise, false. + bool HasPendingRestart { get; } + + /// + /// Occurs when [has pending restart changed]. + /// + event EventHandler HasPendingRestartChanged; + + /// + /// Notifies the pending restart. + /// + void NotifyPendingRestart(); + /// /// Restarts this instance. /// diff --git a/MediaBrowser.Common/Kernel/BaseKernel.cs b/MediaBrowser.Common/Kernel/BaseKernel.cs deleted file mode 100644 index cf8133e977..0000000000 --- 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 -{ - /// - /// Represents a shared base kernel for both the Ui and server apps - /// - public abstract class BaseKernel : IKernel - { - /// - /// Occurs when [has pending restart changed]. - /// - public event EventHandler HasPendingRestartChanged; - - #region ApplicationUpdated Event - /// - /// Occurs when [application updated]. - /// - public event EventHandler> ApplicationUpdated; - /// - /// Called when [application updated]. - /// - /// The new version. - public void OnApplicationUpdated(Version newVersion) - { - EventHelper.QueueEventIfNotNull(ApplicationUpdated, this, new GenericEventArgs { Argument = newVersion }, Logger); - - NotifyPendingRestart(); - } - #endregion - - /// - /// Gets or sets a value indicating whether this instance has changes that require the entire application to restart. - /// - /// true if this instance has pending application restart; otherwise, false. - public bool HasPendingRestart { get; private set; } - - /// - /// 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. - /// - /// The UDP server port number. - public abstract int UdpServerPortNumber { get; } - - /// - /// 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}/... - /// - /// The name of the web application. - public string WebApplicationName - { - get { return "mediabrowser"; } - } - - /// - /// Gets the HTTP server URL prefix. - /// - /// The HTTP server URL prefix. - public virtual string HttpServerUrlPrefix - { - get - { - return "http://+:" + _configurationManager.CommonConfiguration.HttpServerPortNumber + "/" + WebApplicationName + "/"; - } - } - - /// - /// Gets the kernel context. Subclasses will have to override. - /// - /// The kernel context. - public abstract KernelContext KernelContext { get; } - - /// - /// Gets the logger. - /// - /// The logger. - protected ILogger Logger { get; private set; } - - /// - /// Gets or sets the application host. - /// - /// The application host. - protected IApplicationHost ApplicationHost { get; private set; } - - private readonly IConfigurationManager _configurationManager; - - /// - /// Initializes a new instance of the class. - /// - /// The app host. - /// The log manager. - protected BaseKernel(IApplicationHost appHost, ILogManager logManager, IConfigurationManager configurationManager) - { - ApplicationHost = appHost; - _configurationManager = configurationManager; - Logger = logManager.GetLogger("Kernel"); - } - - /// - /// Initializes the Kernel - /// - /// Task. - public void Init() - { - ReloadInternal(); - - Logger.Info("Kernel.Init Complete"); - } - - /// - /// Performs initializations that can be reloaded at anytime - /// - /// Task. - protected virtual void ReloadInternal() - { - } - - /// - /// Notifies that the kernel that a change has been made that requires a restart - /// - public void NotifyPendingRestart() - { - HasPendingRestart = true; - - EventHelper.QueueEventIfNotNull(HasPendingRestartChanged, this, EventArgs.Empty, Logger); - } - - /// - /// Performs the pending restart. - /// - /// Task. - public void PerformPendingRestart() - { - if (HasPendingRestart) - { - Logger.Info("Restarting the application"); - - ApplicationHost.Restart(); - } - else - { - Logger.Info("PerformPendingRestart - not needed"); - } - } - - /// - /// Gets the system status. - /// - /// SystemInfo. - public virtual SystemInfo GetSystemInfo() - { - return new SystemInfo - { - HasPendingRestart = HasPendingRestart, - Version = ApplicationHost.ApplicationVersion.ToString(), - IsNetworkDeployed = ApplicationHost.CanSelfUpdate, - WebSocketPortNumber = ApplicationHost.Resolve().WebSocketPortNumber, - SupportsNativeWebSocket = ApplicationHost.Resolve().SupportsNativeWebSocket, - FailedPluginAssemblies = ApplicationHost.FailedAssemblies.ToArray() - }; - } - } -} diff --git a/MediaBrowser.Common/Kernel/IKernel.cs b/MediaBrowser.Common/Kernel/IKernel.cs deleted file mode 100644 index 51677677ac..0000000000 --- a/MediaBrowser.Common/Kernel/IKernel.cs +++ /dev/null @@ -1,74 +0,0 @@ -using MediaBrowser.Model.System; -using System; - -namespace MediaBrowser.Common.Kernel -{ - /// - /// Interface IKernel - /// - public interface IKernel - { - /// - /// Occurs when [has pending restart changed]. - /// - event EventHandler HasPendingRestartChanged; - - /// - /// Gets the kernel context. - /// - /// The kernel context. - KernelContext KernelContext { get; } - - /// - /// Inits this instance. - /// - /// Task. - void Init(); - - /// - /// Gets or sets a value indicating whether this instance has pending kernel reload. - /// - /// true if this instance has pending kernel reload; otherwise, false. - bool HasPendingRestart { get; } - - /// - /// Gets the system status. - /// - /// SystemInfo. - SystemInfo GetSystemInfo(); - - /// - /// Called when [application updated]. - /// - /// The new version. - void OnApplicationUpdated(Version newVersion); - - /// - /// Gets the name of the web application. - /// - /// The name of the web application. - string WebApplicationName { get; } - - /// - /// Performs the pending restart. - /// - void PerformPendingRestart(); - - /// - /// Gets the UDP server port number. - /// - /// The UDP server port number. - int UdpServerPortNumber { get; } - - /// - /// Gets the HTTP server URL prefix. - /// - /// The HTTP server URL prefix. - string HttpServerUrlPrefix { get; } - - /// - /// Notifies the pending restart. - /// - void NotifyPendingRestart(); - } -} diff --git a/MediaBrowser.Common/Kernel/KernelContext.cs b/MediaBrowser.Common/Kernel/KernelContext.cs deleted file mode 100644 index 1f84c02426..0000000000 --- a/MediaBrowser.Common/Kernel/KernelContext.cs +++ /dev/null @@ -1,18 +0,0 @@ - -namespace MediaBrowser.Common.Kernel -{ - /// - /// Enum KernelContext - /// - public enum KernelContext - { - /// - /// The server - /// - Server, - /// - /// The UI - /// - Ui - } -} diff --git a/MediaBrowser.Common/MediaBrowser.Common.csproj b/MediaBrowser.Common/MediaBrowser.Common.csproj index 8b7aae9cb1..578a76a30f 100644 --- a/MediaBrowser.Common/MediaBrowser.Common.csproj +++ b/MediaBrowser.Common/MediaBrowser.Common.csproj @@ -59,12 +59,11 @@ - + - - + + - @@ -94,15 +93,13 @@ - - + - diff --git a/MediaBrowser.Common/Kernel/BasePeriodicWebSocketListener.cs b/MediaBrowser.Common/Net/BasePeriodicWebSocketListener.cs similarity index 98% rename from MediaBrowser.Common/Kernel/BasePeriodicWebSocketListener.cs rename to MediaBrowser.Common/Net/BasePeriodicWebSocketListener.cs index 6a44cf3728..9207ffe1d4 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 { /// /// 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 similarity index 98% rename from MediaBrowser.Common/Kernel/IServerManager.cs rename to MediaBrowser.Common/Net/IServerManager.cs index a8c6a253a9..0f95c775ed 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 similarity index 80% rename from MediaBrowser.Common/Kernel/IWebSocketListener.cs rename to MediaBrowser.Common/Net/IWebSocketListener.cs index b04bb68851..4b6c4111d0 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 { /// ///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 31cb4bcb89..2fa76472d8 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 /// /// The unique id. Guid Id { get; } - - /// - /// Executes the task - /// - /// Task. - /// Cannot execute a Task that is already running - Task Execute(); - - /// - /// Stops the task if it is currently executing - /// - /// Cannot cancel a Task unless it is in the Running state. - void Cancel(); - - /// - /// Cancels if running. - /// - void CancelIfRunning(); } } \ No newline at end of file diff --git a/MediaBrowser.Common/ScheduledTasks/ITaskManager.cs b/MediaBrowser.Common/ScheduledTasks/ITaskManager.cs index d06f1f1946..ec0e7c1c9f 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 /// /// The tasks. void AddTasks(IEnumerable tasks); + + void Cancel(IScheduledTaskWorker task); + Task Execute(IScheduledTaskWorker task); + + event EventHandler TaskExecuting; + event EventHandler> 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 0000000000..8aab6b50d4 --- /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 99395a50e1..0000000000 --- a/MediaBrowser.Controller/BaseManager.cs +++ /dev/null @@ -1,50 +0,0 @@ -using MediaBrowser.Common.Kernel; -using System; - -namespace MediaBrowser.Controller -{ - /// - /// Class BaseManager - /// - /// The type of the T kernel type. - public abstract class BaseManager : IDisposable - where TKernelType : class, IKernel - { - /// - /// The _kernel - /// - protected readonly TKernelType Kernel; - - /// - /// Initializes a new instance of the class. - /// - /// The kernel. - /// kernel - protected BaseManager(TKernelType kernel) - { - if (kernel == null) - { - throw new ArgumentNullException("kernel"); - } - - Kernel = kernel; - } - - /// - /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. - /// - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - /// - /// Releases unmanaged and - optionally - managed resources. - /// - /// true to release both managed and unmanaged resources; false to release only unmanaged resources. - protected virtual void Dispose(bool dispose) - { - } - } -} diff --git a/MediaBrowser.Controller/IO/FileSystemManager.cs b/MediaBrowser.Controller/IO/FileSystemManager.cs index 4afc8265fc..463672ece0 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. /// - public class FileSystemManager : BaseManager + public class FileSystemManager : IDisposable { /// /// Gets or sets the directory watchers. @@ -25,23 +24,15 @@ namespace MediaBrowser.Controller.IO /// The directory watchers. private DirectoryWatchers DirectoryWatchers { get; set; } - /// - /// The _logger - /// - private readonly ILogger _logger; - /// /// Initializes a new instance of the class. /// - /// The kernel. /// The log manager. /// The task manager. /// The library manager. /// The configuration manager. - 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. /// /// true to release both managed and unmanaged resources; false to release only unmanaged resources. - 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 0000000000..d64067f434 --- /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 b30120d835..c9bac4dd2a 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 2cf6fd1888..40c59c8cfd 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 /// /// Class Kernel /// - public class Kernel : BaseKernel, IDisposable + public class Kernel : IDisposable { /// /// Gets the instance. @@ -60,12 +57,25 @@ namespace MediaBrowser.Controller public ProviderManager ProviderManager { get; private set; } /// - /// 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}/... /// - /// The kernel context. - public override KernelContext KernelContext + /// The name of the web application. + public string WebApplicationName { - get { return KernelContext.Server; } + get { return "mediabrowser"; } + } + + /// + /// Gets the HTTP server URL prefix. + /// + /// The HTTP server URL prefix. + public virtual string HttpServerUrlPrefix + { + get + { + return "http://+:" + _configurationManager.Configuration.HttpServerPortNumber + "/" + WebApplicationName + "/"; + } } /// @@ -145,7 +155,7 @@ namespace MediaBrowser.Controller /// Gets the UDP server port number. /// /// The UDP server port number. - 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; } /// /// Creates a kernel based on a Data path, which is akin to our current programdata path @@ -164,10 +175,10 @@ namespace MediaBrowser.Controller /// The configuration manager. /// isoManager 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 /// /// Task. - 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(), ApplicationHost.Resolve(), _configurationManager); + FileSystemManager = new FileSystemManager(_logManager, ApplicationHost.Resolve(), ApplicationHost.Resolve(), _configurationManager); FileSystemManager.StartWatchers(); } - - /// - /// Gets the system info. - /// - /// SystemInfo. - public override SystemInfo GetSystemInfo() - { - var info = base.GetSystemInfo(); - - var installationManager = ApplicationHost.Resolve(); - - 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 018b3960d7..c07713d7df 100644 --- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj +++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj @@ -70,7 +70,6 @@ Properties\SharedVersion.cs - @@ -105,6 +104,7 @@ + diff --git a/MediaBrowser.Controller/Providers/ProviderManager.cs b/MediaBrowser.Controller/Providers/ProviderManager.cs index 16e862fb91..0df5f64d3a 100644 --- a/MediaBrowser.Controller/Providers/ProviderManager.cs +++ b/MediaBrowser.Controller/Providers/ProviderManager.cs @@ -18,7 +18,7 @@ namespace MediaBrowser.Controller.Providers /// /// Class ProviderManager /// - public class ProviderManager : BaseManager + public class ProviderManager : IDisposable { /// /// 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; } + /// /// Initializes a new instance of the class. /// @@ -50,9 +52,9 @@ namespace MediaBrowser.Controller.Providers /// The HTTP client. /// The logger. 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. /// /// true to release both managed and unmanaged resources; false to release only unmanaged resources. - 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 74241ac021..9fc8d824f1 100644 --- a/MediaBrowser.Model/Configuration/BaseApplicationConfiguration.cs +++ b/MediaBrowser.Model/Configuration/BaseApplicationConfiguration.cs @@ -18,20 +18,6 @@ namespace MediaBrowser.Model.Configuration [ProtoMember(1)] public bool EnableDebugLevelLogging { get; set; } - /// - /// Gets or sets a value indicating whether [enable HTTP level logging]. - /// - /// true if [enable HTTP level logging]; otherwise, false. - [ProtoMember(56)] - public bool EnableHttpLevelLogging { get; set; } - - /// - /// Gets or sets the HTTP server port number. - /// - /// The HTTP server port number. - [ProtoMember(2)] - public int HttpServerPortNumber { get; set; } - /// /// Enable automatically and silently updating of the application /// @@ -59,13 +45,6 @@ namespace MediaBrowser.Model.Configuration [ProtoMember(58)] public bool RunAtStartup { get; set; } - /// - /// Gets or sets the legacy web socket port number. - /// - /// The legacy web socket port number. - [ProtoMember(59)] - public int LegacyWebSocketPortNumber { get; set; } - /// /// Gets or sets a value indicating whether this instance is first run. /// @@ -78,14 +57,9 @@ namespace MediaBrowser.Model.Configuration /// 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 ff7f5221ba..0ddafe19a5 100644 --- a/MediaBrowser.Model/Configuration/ServerConfiguration.cs +++ b/MediaBrowser.Model/Configuration/ServerConfiguration.cs @@ -12,6 +12,27 @@ namespace MediaBrowser.Model.Configuration [ProtoContract] public class ServerConfiguration : BaseApplicationConfiguration { + /// + /// Gets or sets a value indicating whether [enable HTTP level logging]. + /// + /// true if [enable HTTP level logging]; otherwise, false. + [ProtoMember(56)] + public bool EnableHttpLevelLogging { get; set; } + + /// + /// Gets or sets the HTTP server port number. + /// + /// The HTTP server port number. + [ProtoMember(2)] + public int HttpServerPortNumber { get; set; } + + /// + /// Gets or sets the legacy web socket port number. + /// + /// The legacy web socket port number. + [ProtoMember(59)] + public int LegacyWebSocketPortNumber { get; set; } + /// /// Gets or sets a value indicating whether [enable internet providers]. /// @@ -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 similarity index 99% rename from MediaBrowser.Common.Implementations/HttpServer/BaseRestService.cs rename to MediaBrowser.Server.Implementations/HttpServer/BaseRestService.cs index 382183b580..b847084379 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 { /// /// Class BaseRestService diff --git a/MediaBrowser.Common.Implementations/HttpServer/HttpServer.cs b/MediaBrowser.Server.Implementations/HttpServer/HttpServer.cs similarity index 99% rename from MediaBrowser.Common.Implementations/HttpServer/HttpServer.cs rename to MediaBrowser.Server.Implementations/HttpServer/HttpServer.cs index 785ca56c66..ee5009e21a 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 { /// /// Class HttpServer diff --git a/MediaBrowser.Common.Implementations/HttpServer/NativeWebSocket.cs b/MediaBrowser.Server.Implementations/HttpServer/NativeWebSocket.cs similarity index 98% rename from MediaBrowser.Common.Implementations/HttpServer/NativeWebSocket.cs rename to MediaBrowser.Server.Implementations/HttpServer/NativeWebSocket.cs index 97bab96f85..9f5d14eaf9 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 { /// /// Class NativeWebSocket diff --git a/MediaBrowser.Common.Implementations/HttpServer/ServerFactory.cs b/MediaBrowser.Server.Implementations/HttpServer/ServerFactory.cs similarity index 91% rename from MediaBrowser.Common.Implementations/HttpServer/ServerFactory.cs rename to MediaBrowser.Server.Implementations/HttpServer/ServerFactory.cs index 743bd60c4c..75e077c38f 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 { /// /// Class ServerFactory diff --git a/MediaBrowser.Common.Implementations/HttpServer/StreamWriter.cs b/MediaBrowser.Server.Implementations/HttpServer/StreamWriter.cs similarity index 95% rename from MediaBrowser.Common.Implementations/HttpServer/StreamWriter.cs rename to MediaBrowser.Server.Implementations/HttpServer/StreamWriter.cs index c92bfe0b96..c4524280dd 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 { /// /// Class StreamWriter diff --git a/MediaBrowser.Common.Implementations/HttpServer/SwaggerService.cs b/MediaBrowser.Server.Implementations/HttpServer/SwaggerService.cs similarity index 95% rename from MediaBrowser.Common.Implementations/HttpServer/SwaggerService.cs rename to MediaBrowser.Server.Implementations/HttpServer/SwaggerService.cs index a4808834df..18ab40d935 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 { /// /// Class GetDashboardResource diff --git a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj index 45aa3e5309..e56c79dedd 100644 --- a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj +++ b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj @@ -32,6 +32,9 @@ 4 + + ..\packages\Alchemy.2.2.1\lib\net40\Alchemy.dll + False ..\packages\MediaBrowser.BdInfo.1.0.0.2\lib\net45\BdInfo.dll @@ -39,6 +42,39 @@ ..\packages\morelinq.1.0.15631-beta\lib\net35\MoreLinq.dll + + ..\packages\NLog.2.0.0.2000\lib\net40\NLog.dll + + + ..\packages\ServiceStack.3.9.38\lib\net35\ServiceStack.dll + + + ..\packages\ServiceStack.Api.Swagger.3.9.38\lib\net35\ServiceStack.Api.Swagger.dll + + + ..\packages\ServiceStack.Common.3.9.38\lib\net35\ServiceStack.Common.dll + + + ..\packages\ServiceStack.Common.3.9.38\lib\net35\ServiceStack.Interfaces.dll + + + ..\packages\ServiceStack.Logging.NLog.1.0.6.0\lib\net35\ServiceStack.Logging.NLog.dll + + + ..\packages\ServiceStack.OrmLite.SqlServer.3.9.39\lib\ServiceStack.OrmLite.dll + + + ..\packages\ServiceStack.OrmLite.SqlServer.3.9.39\lib\ServiceStack.OrmLite.SqlServer.dll + + + ..\packages\ServiceStack.Redis.3.9.38\lib\net35\ServiceStack.Redis.dll + + + ..\packages\ServiceStack.3.9.38\lib\net35\ServiceStack.ServiceInterface.dll + + + ..\packages\ServiceStack.Text.3.9.38\lib\net35\ServiceStack.Text.dll + @@ -47,6 +83,16 @@ ..\packages\System.Data.SQLite.1.0.84.0\lib\net45\System.Data.SQLite.Linq.dll + + ..\packages\Rx-Core.2.1.30214.0\lib\Net45\System.Reactive.Core.dll + + + ..\packages\Rx-Interfaces.2.1.30214.0\lib\Net45\System.Reactive.Interfaces.dll + + + ..\packages\Rx-Linq.2.1.30214.0\lib\Net45\System.Reactive.Linq.dll + + @@ -59,6 +105,12 @@ + + + + + + @@ -82,13 +134,18 @@ + + + + + @@ -110,6 +167,49 @@ + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + Always @@ -119,6 +219,7 @@ + diff --git a/MediaBrowser.Common.Implementations/README.txt b/MediaBrowser.Server.Implementations/README.txt similarity index 100% rename from MediaBrowser.Common.Implementations/README.txt rename to MediaBrowser.Server.Implementations/README.txt diff --git a/MediaBrowser.Common.Implementations/ServerManager/RegisterServer.bat b/MediaBrowser.Server.Implementations/ServerManager/RegisterServer.bat similarity index 100% rename from MediaBrowser.Common.Implementations/ServerManager/RegisterServer.bat rename to MediaBrowser.Server.Implementations/ServerManager/RegisterServer.bat diff --git a/MediaBrowser.Common.Implementations/ServerManager/ServerManager.cs b/MediaBrowser.Server.Implementations/ServerManager/ServerManager.cs similarity index 91% rename from MediaBrowser.Common.Implementations/ServerManager/ServerManager.cs rename to MediaBrowser.Server.Implementations/ServerManager/ServerManager.cs index d18971f72e..e4cb83e96d 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 { /// /// Manages the Http Server, Udp Server and WebSocket connections @@ -73,16 +74,11 @@ namespace MediaBrowser.Common.Implementations.ServerManager /// private readonly IApplicationHost _applicationHost; - /// - /// The _kernel - /// - private readonly IKernel _kernel; - /// /// Gets or sets the configuration manager. /// /// The configuration manager. - private IConfigurationManager ConfigurationManager { get; set; } + private IServerConfigurationManager ConfigurationManager { get; set; } /// /// Gets a value indicating whether [supports web socket]. @@ -99,7 +95,7 @@ namespace MediaBrowser.Common.Implementations.ServerManager /// The web socket port number. public int WebSocketPortNumber { - get { return SupportsNativeWebSocket ? ConfigurationManager.CommonConfiguration.HttpServerPortNumber : ConfigurationManager.CommonConfiguration.LegacyWebSocketPortNumber; } + get { return SupportsNativeWebSocket ? ConfigurationManager.Configuration.HttpServerPortNumber : ConfigurationManager.Configuration.LegacyWebSocketPortNumber; } } /// @@ -108,26 +104,23 @@ namespace MediaBrowser.Common.Implementations.ServerManager /// The web socket listeners. private readonly List _webSocketListeners = new List(); + private Kernel _kernel; + /// /// Initializes a new instance of the class. /// /// The application host. - /// The kernel. /// The network manager. /// The json serializer. /// The logger. /// The configuration manager. /// applicationHost - 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; } /// @@ -175,17 +168,11 @@ namespace MediaBrowser.Common.Implementations.ServerManager /// private void ReloadExternalWebSocketServer() { - // Avoid windows firewall prompts in the ui - if (_kernel.KernelContext != KernelContext.Server) - { - return; - } - DisposeExternalWebSocketServer(); ExternalWebSocketServer = _applicationHost.Resolve(); - 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(); - 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 /// The instance containing the event data. 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 /// 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 similarity index 99% rename from MediaBrowser.Common.Implementations/ServerManager/WebSocketConnection.cs rename to MediaBrowser.Server.Implementations/ServerManager/WebSocketConnection.cs index f826b02cc1..d92c607732 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 { /// /// Class WebSocketConnection diff --git a/MediaBrowser.Server.Implementations/Sqlite/SQLiteDisplayPreferencesRepository.cs b/MediaBrowser.Server.Implementations/Sqlite/SQLiteDisplayPreferencesRepository.cs index d6a0858afd..ddf44d4071 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 87cce1785d..6a9a9f6f5d 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 64ba4d1e2c..dafdce798f 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 89d2900dd2..43dffc5964 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 similarity index 99% rename from MediaBrowser.Common.Implementations/Udp/UdpServer.cs rename to MediaBrowser.Server.Implementations/Udp/UdpServer.cs index e0435ab3cb..c6869c12d7 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 { /// /// Provides a Udp Server diff --git a/MediaBrowser.Server.Implementations/Updates/InstallationManager.cs b/MediaBrowser.Server.Implementations/Updates/InstallationManager.cs index e17ed03016..bdbf3896ff 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> { Argument = new Tuple(plugin, newVersion) }, _logger); - Kernel.NotifyPendingRestart(); + ApplicationHost.NotifyPendingRestart(); } #endregion @@ -91,7 +89,7 @@ namespace MediaBrowser.Server.Implementations.Updates EventHelper.QueueEventIfNotNull(PluginInstalled, this, new GenericEventArgs { Argument = package }, _logger); - Kernel.NotifyPendingRestart(); + ApplicationHost.NotifyPendingRestart(); } #endregion @@ -123,19 +121,16 @@ namespace MediaBrowser.Server.Implementations.Updates /// The application host. protected IApplicationHost ApplicationHost { get; private set; } - private IKernel Kernel { get; set; } - /// /// Initializes a new instance of the class. /// - /// The kernel. /// The HTTP client. /// The package manager. /// The json serializer. /// The logger. /// The app host. /// zipClient - 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; } /// @@ -454,7 +448,7 @@ namespace MediaBrowser.Server.Implementations.Updates OnPluginUninstalled(plugin); - Kernel.NotifyPendingRestart(); + ApplicationHost.NotifyPendingRestart(); } /// diff --git a/MediaBrowser.Common.Implementations/WebSocket/AlchemyServer.cs b/MediaBrowser.Server.Implementations/WebSocket/AlchemyServer.cs similarity index 98% rename from MediaBrowser.Common.Implementations/WebSocket/AlchemyServer.cs rename to MediaBrowser.Server.Implementations/WebSocket/AlchemyServer.cs index 236bd27b7b..37490c3d5b 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 { /// /// Class AlchemyServer diff --git a/MediaBrowser.Common.Implementations/WebSocket/AlchemyWebSocket.cs b/MediaBrowser.Server.Implementations/WebSocket/AlchemyWebSocket.cs similarity index 98% rename from MediaBrowser.Common.Implementations/WebSocket/AlchemyWebSocket.cs rename to MediaBrowser.Server.Implementations/WebSocket/AlchemyWebSocket.cs index 1ecc38f2c2..13a9ce0505 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 { /// /// Class AlchemyWebSocket diff --git a/MediaBrowser.Server.Implementations/packages.config b/MediaBrowser.Server.Implementations/packages.config index fb84d9aa7c..002d5974e3 100644 --- a/MediaBrowser.Server.Implementations/packages.config +++ b/MediaBrowser.Server.Implementations/packages.config @@ -1,6 +1,18 @@  + + + + + + + + + + + + \ 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 similarity index 100% rename from MediaBrowser.Common.Implementations/swagger-ui/css/screen.css rename to 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 similarity index 100% rename from MediaBrowser.Common.Implementations/swagger-ui/images/pet_store_api.png rename to 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 similarity index 100% rename from MediaBrowser.Common.Implementations/swagger-ui/images/wordnik_api.png rename to 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 similarity index 100% rename from MediaBrowser.Common.Implementations/swagger-ui/index.html rename to 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 similarity index 100% rename from MediaBrowser.Common.Implementations/swagger-ui/lib/backbone-min.js rename to 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 similarity index 100% rename from MediaBrowser.Common.Implementations/swagger-ui/lib/handlebars.runtime-1.0.0.beta.6.js rename to 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 similarity index 100% rename from MediaBrowser.Common.Implementations/swagger-ui/lib/jquery.ba-bbq.min.js rename to 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 similarity index 100% rename from MediaBrowser.Common.Implementations/swagger-ui/lib/jquery.min.js rename to 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 similarity index 100% rename from MediaBrowser.Common.Implementations/swagger-ui/lib/jquery.slideto.min.js rename to 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 similarity index 100% rename from MediaBrowser.Common.Implementations/swagger-ui/lib/jquery.wiggle.min.js rename to 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 similarity index 100% rename from MediaBrowser.Common.Implementations/swagger-ui/lib/swagger.js rename to 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 similarity index 100% rename from MediaBrowser.Common.Implementations/swagger-ui/lib/underscore-min.js rename to 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 similarity index 100% rename from MediaBrowser.Common.Implementations/swagger-ui/swagger-ui.js rename to 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 similarity index 100% rename from MediaBrowser.Common.Implementations/swagger-ui/swagger-ui.min.js rename to MediaBrowser.Server.Implementations/swagger-ui/swagger-ui.min.js diff --git a/MediaBrowser.ServerApplication/App.xaml.cs b/MediaBrowser.ServerApplication/App.xaml.cs index 470b7fc558..a3e273438d 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. /// /// The page. - 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 d22c522e76..df3765818e 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 /// /// Class CompositionRoot /// - public class ApplicationHost : BaseApplicationHost + public class ApplicationHost : BaseApplicationHost, IServerApplicationHost { /// /// Gets the server kernel. /// /// The server kernel. - protected Kernel ServerKernel - { - get { return (Kernel)Kernel; } - } + protected Kernel ServerKernel { get; set; } /// /// Gets the server configuration manager. @@ -61,15 +60,6 @@ namespace MediaBrowser.ServerApplication get { return (IServerConfigurationManager)ConfigurationManager; } } - /// - /// Gets the kernel. - /// - /// IKernel. - protected override IKernel GetKernel() - { - return new Kernel(this, XmlSerializer, LogManager, ServerConfigurationManager); - } - /// /// Gets the name of the log file prefix. /// @@ -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); + } + /// /// Registers resources that classes will depend on /// protected override async Task RegisterResources() { + ServerKernel = new Kernel(this, XmlSerializer, LogManager, ServerConfigurationManager); + await base.RegisterResources().ConfigureAwait(false); + RegisterSingleInstance(this); RegisterSingleInstance(ApplicationPaths); - + RegisterSingleInstance(ServerKernel); RegisterSingleInstance(ServerConfigurationManager); + RegisterSingleInstance(() => new AlchemyServer(Logger)); + RegisterSingleInstance(new UdpServer(Logger), false); + RegisterSingleInstance(new PismoIsoManager(Logger)); RegisterSingleInstance(new BdInfoExaminer()); RegisterSingleInstance(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(userManager); RegisterSingleInstance(new LibraryManager(ServerKernel, Logger, TaskManager, userManager, ServerConfigurationManager)); - RegisterSingleInstance(new InstallationManager(Kernel, HttpClient, PackageManager, JsonSerializer, Logger, this)); + InstallationManager = new InstallationManager(HttpClient, PackageManager, JsonSerializer, Logger, this); + RegisterSingleInstance(InstallationManager); } /// @@ -121,6 +131,11 @@ namespace MediaBrowser.ServerApplication { base.FindParts(); + Resolve().Init(GetExports(false)); + Resolve().AddWebSocketListeners(GetExports(false)); + + Resolve().Start(); + Resolve().AddParts(GetExports(), GetExports(), GetExports(), GetExports()); } @@ -157,19 +172,6 @@ namespace MediaBrowser.ServerApplication new CheckForUpdateResult { AvailableVersion = ApplicationVersion, IsUpdateAvailable = false }; } - /// - /// Updates the application. - /// - /// The package that contains the update - /// The cancellation token. - /// The progress. - /// Task. - public override Task UpdateApplication(PackageVersionInfo package, CancellationToken cancellationToken, IProgress progress) - { - var pkgManager = Resolve(); - return pkgManager.InstallPackage(progress, package, cancellationToken); - } - /// /// Gets the composable part assemblies. /// @@ -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; @@ -210,6 +212,25 @@ namespace MediaBrowser.ServerApplication yield return GetType().Assembly; } + /// + /// Gets the system status. + /// + /// SystemInfo. + 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() + }; + } + /// /// Shuts down. /// diff --git a/MediaBrowser.ServerApplication/StartupWizard.cs b/MediaBrowser.ServerApplication/StartupWizard.cs index 57a90ea814..f7946c7112 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 /// private readonly IUserManager _userManager; - private readonly IConfigurationManager _configurationManager; + private readonly IServerConfigurationManager _configurationManager; /// /// Initializes a new instance of the class. /// /// The app host. /// The user manager. - 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 caa4ca2abc..43972bafc2 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 /// /// The _kernel /// - private readonly IKernel _kernel; + private readonly IServerApplicationHost _appHost; + + private readonly ITaskManager _taskManager; /// /// Initializes a new instance of the class. @@ -51,14 +56,15 @@ namespace MediaBrowser.ServerApplication /// The server manager. /// The logger. /// The user manager. - 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 e) + { + _serverManager.SendWebSocketMessage("ScheduledTaskEndExecute", e.Argument); + } + + void _taskManager_TaskExecuting(object sender, EventArgs e) + { + var task = (IScheduledTask) sender; + _serverManager.SendWebSocketMessage("ScheduledTaskBeginExecute", task.Name); } /// @@ -144,9 +164,7 @@ namespace MediaBrowser.ServerApplication /// The instance containing the event data. void kernel_HasPendingRestartChanged(object sender, EventArgs e) { - var kernel = (IKernel)sender; - - _serverManager.SendWebSocketMessage("HasPendingRestartChanged", kernel.GetSystemInfo()); + _serverManager.SendWebSocketMessage("HasPendingRestartChanged", _appHost.GetSystemInfo()); } /// @@ -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 93b23b9439..cdcdb49dc4 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"; } } - /// - /// The _kernel - /// - private readonly Kernel _kernel; + private readonly IServerApplicationHost _appHost; /// /// Gets or sets the task manager. @@ -42,14 +39,13 @@ namespace MediaBrowser.WebDashboard.Api /// /// Initializes a new instance of the class. /// - /// The kernel. /// The logger. /// The task manager. /// The user manager. - 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 /// Task{IEnumerable{TaskInfo}}. protected override Task 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 0c63e00b21..136a9170ea 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 /// private readonly IUserManager _userManager; + private readonly IServerApplicationHost _appHost; + /// /// Initializes a new instance of the class. /// /// The task manager. /// The user manager. - public DashboardService(ITaskManager taskManager, IUserManager userManager) + public DashboardService(ITaskManager taskManager, IUserManager userManager, IServerApplicationHost appHost) { _taskManager = taskManager; _userManager = userManager; + _appHost = appHost; } /// @@ -107,18 +110,17 @@ namespace MediaBrowser.WebDashboard.Api /// System.Object. public object Get(GetDashboardInfo request) { - return GetDashboardInfo(Kernel.Instance, Logger, _taskManager, _userManager); + return GetDashboardInfo(_appHost, Logger, _taskManager, _userManager); } /// /// Gets the dashboard info. /// - /// The kernel. /// The logger. /// The task manager. /// The user manager. /// DashboardInfo. - 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 7fb09381f9..6b7081b90d 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 728f38a28a..4be44b8215 100644 --- a/MediaBrowser.WebDashboard/Html/itemList.html +++ b/MediaBrowser.WebDashboard/Html/itemList.html @@ -5,10 +5,10 @@
-
- +

diff --git a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj index 7132cd7920..e57d7ad2fd 100644 --- a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj +++ b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj @@ -88,10 +88,6 @@ - - {c4d2573a-3fd3-441f-81af-174ac4cd4e1d} - MediaBrowser.Common.Implementations - {9142eefa-7570-41e1-bfcc-468bb571af2f} MediaBrowser.Common @@ -104,6 +100,10 @@ {7eeeb4bb-f3e8-48fc-b4c5-70f0fff8329b} MediaBrowser.Model + + {2e781478-814d-4a48-9d80-bff206441a65} + MediaBrowser.Server.Implementations + diff --git a/Nuget/MediaBrowser.Common.Internal.nuspec b/Nuget/MediaBrowser.Common.Internal.nuspec index 3baa1c2c56..c29c3a2605 100644 --- a/Nuget/MediaBrowser.Common.Internal.nuspec +++ b/Nuget/MediaBrowser.Common.Internal.nuspec @@ -1,5 +1,5 @@  - + MediaBrowser.Common.Internal 3.0.33 @@ -7,23 +7,21 @@ Luke ebr,Luke,scottisafool https://github.com/MediaBrowser/MediaBrowser - http://www.mb3admin.com/images/mb3icons1-1.png + http://www.mb3admin.com/images/mb3icons1-1.png false Contains common components shared by Media Browser Theatre and Media Browser Server. Not intended for plugin developer consumption. Copyright © Media Browser 2013 - - - - + + - + \ No newline at end of file