removed base kernel and ikernel

This commit is contained in:
LukePulverenti 2013-03-07 00:34:00 -05:00
parent 60545c433b
commit 4f67fc4aef
94 changed files with 552 additions and 870 deletions

View File

@ -1,8 +1,8 @@
using MediaBrowser.Common.Implementations.HttpServer; using MediaBrowser.Common.Net;
using MediaBrowser.Common.Net;
using MediaBrowser.Controller.IO; using MediaBrowser.Controller.IO;
using MediaBrowser.Model.IO; using MediaBrowser.Model.IO;
using MediaBrowser.Model.Net; using MediaBrowser.Model.Net;
using MediaBrowser.Server.Implementations.HttpServer;
using ServiceStack.ServiceHost; using ServiceStack.ServiceHost;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;

View File

@ -1,11 +1,11 @@
using MediaBrowser.Common.Extensions; using MediaBrowser.Common.Extensions;
using MediaBrowser.Common.IO; using MediaBrowser.Common.IO;
using MediaBrowser.Common.Implementations.HttpServer;
using MediaBrowser.Common.Net; using MediaBrowser.Common.Net;
using MediaBrowser.Controller; using MediaBrowser.Controller;
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Library;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using MediaBrowser.Server.Implementations.HttpServer;
using ServiceStack.ServiceHost; using ServiceStack.ServiceHost;
using ServiceStack.Text.Controller; using ServiceStack.Text.Controller;
using System; using System;

View File

@ -1,6 +1,6 @@
using MediaBrowser.Common.Extensions; using MediaBrowser.Common.Extensions;
using MediaBrowser.Common.Implementations.HttpServer;
using MediaBrowser.Common.Net; using MediaBrowser.Common.Net;
using MediaBrowser.Server.Implementations.HttpServer;
using ServiceStack.ServiceHost; using ServiceStack.ServiceHost;
using System; using System;
using System.IO; using System.IO;

View File

@ -1,10 +1,8 @@
using MediaBrowser.Common; using MediaBrowser.Common;
using MediaBrowser.Common.Implementations.HttpServer;
using MediaBrowser.Common.Kernel;
using MediaBrowser.Controller;
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Library;
using MediaBrowser.Model.Dto; using MediaBrowser.Model.Dto;
using MediaBrowser.Server.Implementations.HttpServer;
using ServiceStack.ServiceHost; using ServiceStack.ServiceHost;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;

View File

@ -1,7 +1,7 @@
using MediaBrowser.Common.Implementations.HttpServer; using MediaBrowser.Controller;
using MediaBrowser.Controller;
using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Library;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using MediaBrowser.Server.Implementations.HttpServer;
using ServiceStack.ServiceHost; using ServiceStack.ServiceHost;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;

View File

@ -1,7 +1,7 @@
using MediaBrowser.Common.Implementations.HttpServer; using MediaBrowser.Controller.Localization;
using MediaBrowser.Controller.Localization;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Globalization; using MediaBrowser.Model.Globalization;
using MediaBrowser.Server.Implementations.HttpServer;
using MoreLinq; using MoreLinq;
using ServiceStack.ServiceHost; using ServiceStack.ServiceHost;
using System.Collections.Generic; using System.Collections.Generic;

View File

@ -121,10 +121,6 @@
<Compile Include="WebSocket\SystemInfoWebSocketListener.cs" /> <Compile Include="WebSocket\SystemInfoWebSocketListener.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\MediaBrowser.Common.Implementations\MediaBrowser.Common.Implementations.csproj">
<Project>{c4d2573a-3fd3-441f-81af-174ac4cd4e1d}</Project>
<Name>MediaBrowser.Common.Implementations</Name>
</ProjectReference>
<ProjectReference Include="..\MediaBrowser.Common\MediaBrowser.Common.csproj"> <ProjectReference Include="..\MediaBrowser.Common\MediaBrowser.Common.csproj">
<Project>{9142eefa-7570-41e1-bfcc-468bb571af2f}</Project> <Project>{9142eefa-7570-41e1-bfcc-468bb571af2f}</Project>
<Name>MediaBrowser.Common</Name> <Name>MediaBrowser.Common</Name>
@ -137,6 +133,10 @@
<Project>{7eeeb4bb-f3e8-48fc-b4c5-70f0fff8329b}</Project> <Project>{7eeeb4bb-f3e8-48fc-b4c5-70f0fff8329b}</Project>
<Name>MediaBrowser.Model</Name> <Name>MediaBrowser.Model</Name>
</ProjectReference> </ProjectReference>
<ProjectReference Include="..\MediaBrowser.Server.Implementations\MediaBrowser.Server.Implementations.csproj">
<Project>{2e781478-814d-4a48-9d80-bff206441a65}</Project>
<Name>MediaBrowser.Server.Implementations</Name>
</ProjectReference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="packages.config" /> <None Include="packages.config" />

View File

@ -1,8 +1,8 @@
using MediaBrowser.Common; using MediaBrowser.Common;
using MediaBrowser.Common.Extensions; using MediaBrowser.Common.Extensions;
using MediaBrowser.Common.Implementations.HttpServer;
using MediaBrowser.Controller.Updates; using MediaBrowser.Controller.Updates;
using MediaBrowser.Model.Updates; using MediaBrowser.Model.Updates;
using MediaBrowser.Server.Implementations.HttpServer;
using ServiceStack.ServiceHost; using ServiceStack.ServiceHost;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;

View File

@ -1,5 +1,4 @@
using MediaBrowser.Common.Extensions; using MediaBrowser.Common.Extensions;
using MediaBrowser.Common.Implementations.HttpServer;
using MediaBrowser.Common.IO; using MediaBrowser.Common.IO;
using MediaBrowser.Controller; using MediaBrowser.Controller;
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
@ -15,6 +14,7 @@ using System.IO;
using System.Linq; using System.Linq;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using MediaBrowser.Server.Implementations.HttpServer;
namespace MediaBrowser.Api.Playback namespace MediaBrowser.Api.Playback
{ {

View File

@ -1,11 +1,11 @@
using MediaBrowser.Common; using MediaBrowser.Common;
using MediaBrowser.Common.Extensions; using MediaBrowser.Common.Extensions;
using MediaBrowser.Common.Implementations.HttpServer;
using MediaBrowser.Common.Security; using MediaBrowser.Common.Security;
using MediaBrowser.Controller.Updates; using MediaBrowser.Controller.Updates;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Plugins; using MediaBrowser.Model.Plugins;
using MediaBrowser.Model.Serialization; using MediaBrowser.Model.Serialization;
using MediaBrowser.Server.Implementations.HttpServer;
using ServiceStack.ServiceHost; using ServiceStack.ServiceHost;
using ServiceStack.Text.Controller; using ServiceStack.Text.Controller;
using System; using System;

View File

@ -1,8 +1,8 @@
using MediaBrowser.Common.Extensions; using MediaBrowser.Common.Extensions;
using MediaBrowser.Common.Implementations.HttpServer;
using MediaBrowser.Common.ScheduledTasks; using MediaBrowser.Common.ScheduledTasks;
using MediaBrowser.Model.Serialization; using MediaBrowser.Model.Serialization;
using MediaBrowser.Model.Tasks; using MediaBrowser.Model.Tasks;
using MediaBrowser.Server.Implementations.HttpServer;
using ServiceStack.ServiceHost; using ServiceStack.ServiceHost;
using ServiceStack.Text.Controller; using ServiceStack.Text.Controller;
using System; using System;
@ -84,30 +84,19 @@ namespace MediaBrowser.Api.ScheduledTasks
/// <value>The task manager.</value> /// <value>The task manager.</value>
private ITaskManager TaskManager { get; set; } private ITaskManager TaskManager { get; set; }
/// <summary>
/// The _json serializer
/// </summary>
private readonly IJsonSerializer _jsonSerializer;
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="ScheduledTaskService" /> class. /// Initializes a new instance of the <see cref="ScheduledTaskService" /> class.
/// </summary> /// </summary>
/// <param name="taskManager">The task manager.</param> /// <param name="taskManager">The task manager.</param>
/// <param name="jsonSerializer">The json serializer.</param>
/// <exception cref="System.ArgumentNullException">taskManager</exception> /// <exception cref="System.ArgumentNullException">taskManager</exception>
public ScheduledTaskService(ITaskManager taskManager, IJsonSerializer jsonSerializer) public ScheduledTaskService(ITaskManager taskManager)
{ {
if (taskManager == null) if (taskManager == null)
{ {
throw new ArgumentNullException("taskManager"); throw new ArgumentNullException("taskManager");
} }
if (jsonSerializer == null)
{
throw new ArgumentNullException("jsonSerializer");
}
TaskManager = taskManager; TaskManager = taskManager;
_jsonSerializer = jsonSerializer;
} }
/// <summary> /// <summary>
@ -157,7 +146,7 @@ namespace MediaBrowser.Api.ScheduledTasks
throw new ResourceNotFoundException("Task not found"); throw new ResourceNotFoundException("Task not found");
} }
task.Execute(); TaskManager.Execute(task);
} }
/// <summary> /// <summary>
@ -174,7 +163,7 @@ namespace MediaBrowser.Api.ScheduledTasks
throw new ResourceNotFoundException("Task not found"); throw new ResourceNotFoundException("Task not found");
} }
task.Cancel(); TaskManager.Cancel(task);
} }
/// <summary> /// <summary>

View File

@ -1,4 +1,4 @@
using MediaBrowser.Common.Kernel; using MediaBrowser.Common.Net;
using MediaBrowser.Common.ScheduledTasks; using MediaBrowser.Common.ScheduledTasks;
using MediaBrowser.Model.Logging; using MediaBrowser.Model.Logging;
using MediaBrowser.Model.Tasks; using MediaBrowser.Model.Tasks;

View File

@ -1,11 +1,11 @@
using MediaBrowser.Common; using MediaBrowser.Common;
using MediaBrowser.Common.Extensions; using MediaBrowser.Common.Extensions;
using MediaBrowser.Common.Implementations.HttpServer;
using MediaBrowser.Controller; using MediaBrowser.Controller;
using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Configuration;
using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.Serialization; using MediaBrowser.Model.Serialization;
using MediaBrowser.Model.System; using MediaBrowser.Model.System;
using MediaBrowser.Server.Implementations.HttpServer;
using ServiceStack.ServiceHost; using ServiceStack.ServiceHost;
using System; using System;
using System.IO; using System.IO;
@ -66,7 +66,7 @@ namespace MediaBrowser.Api
/// <summary> /// <summary>
/// The _app host /// The _app host
/// </summary> /// </summary>
private readonly IApplicationHost _appHost; private readonly IServerApplicationHost _appHost;
/// <summary> /// <summary>
/// The _configuration manager /// The _configuration manager
@ -80,7 +80,7 @@ namespace MediaBrowser.Api
/// <param name="appHost">The app host.</param> /// <param name="appHost">The app host.</param>
/// <param name="configurationManager">The configuration manager.</param> /// <param name="configurationManager">The configuration manager.</param>
/// <exception cref="System.ArgumentNullException">jsonSerializer</exception> /// <exception cref="System.ArgumentNullException">jsonSerializer</exception>
public SystemService(IJsonSerializer jsonSerializer, IApplicationHost appHost, IServerConfigurationManager configurationManager) public SystemService(IJsonSerializer jsonSerializer, IServerApplicationHost appHost, IServerConfigurationManager configurationManager)
: base() : base()
{ {
if (jsonSerializer == null) if (jsonSerializer == null)
@ -104,7 +104,7 @@ namespace MediaBrowser.Api
/// <returns>System.Object.</returns> /// <returns>System.Object.</returns>
public object Get(GetSystemInfo request) public object Get(GetSystemInfo request)
{ {
var result = Kernel.Instance.GetSystemInfo(); var result = _appHost.GetSystemInfo();
return ToOptimizedResult(result); return ToOptimizedResult(result);
} }
@ -132,7 +132,7 @@ namespace MediaBrowser.Api
Task.Run(async () => Task.Run(async () =>
{ {
await Task.Delay(100); await Task.Delay(100);
Kernel.Instance.PerformPendingRestart(); _appHost.PerformPendingRestart();
}); });
} }

View File

@ -1,8 +1,8 @@
using MediaBrowser.Common.Implementations.HttpServer; using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Library;
using MediaBrowser.Model.Dto; using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using MediaBrowser.Server.Implementations.HttpServer;
using ServiceStack.ServiceHost; using ServiceStack.ServiceHost;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;

View File

@ -1,10 +1,9 @@
using MediaBrowser.Common.Implementations.HttpServer; using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Library;
using MediaBrowser.Model.Dto; using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using MediaBrowser.Server.Implementations.HttpServer;
using ServiceStack.ServiceHost; using ServiceStack.ServiceHost;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;

View File

@ -1,12 +1,11 @@
using MediaBrowser.Common.Implementations.HttpServer; using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Library;
using MediaBrowser.Model.Connectivity; using MediaBrowser.Model.Connectivity;
using MediaBrowser.Model.Dto; using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Serialization; using MediaBrowser.Model.Serialization;
using MediaBrowser.Server.Implementations.HttpServer;
using ServiceStack.ServiceHost; using ServiceStack.ServiceHost;
using ServiceStack.Text.Controller; using ServiceStack.Text.Controller;
using System; using System;

View File

@ -1,8 +1,8 @@
using MediaBrowser.Common.Extensions; using MediaBrowser.Common.Extensions;
using MediaBrowser.Common.Implementations.HttpServer;
using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Library;
using MediaBrowser.Model.Dto; using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Serialization; using MediaBrowser.Model.Serialization;
using MediaBrowser.Server.Implementations.HttpServer;
using ServiceStack.ServiceHost; using ServiceStack.ServiceHost;
using ServiceStack.Text.Controller; using ServiceStack.Text.Controller;
using System; using System;

View File

@ -1,6 +1,6 @@
using MediaBrowser.Common.Implementations.HttpServer; using MediaBrowser.Controller;
using MediaBrowser.Controller;
using MediaBrowser.Model.Weather; using MediaBrowser.Model.Weather;
using MediaBrowser.Server.Implementations.HttpServer;
using ServiceStack.ServiceHost; using ServiceStack.ServiceHost;
using System.Linq; using System.Linq;
using System.Threading; using System.Threading;

View File

@ -1,5 +1,5 @@
using MediaBrowser.Common.IO; using MediaBrowser.Common.IO;
using MediaBrowser.Common.Kernel; using MediaBrowser.Common.Net;
using MediaBrowser.Model.Logging; using MediaBrowser.Model.Logging;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;

View File

@ -1,4 +1,4 @@
using MediaBrowser.Common.Kernel; using MediaBrowser.Common.Net;
using MediaBrowser.Controller; using MediaBrowser.Controller;
using MediaBrowser.Model.Logging; using MediaBrowser.Model.Logging;
using MediaBrowser.Model.System; using MediaBrowser.Model.System;
@ -23,17 +23,16 @@ namespace MediaBrowser.Api.WebSocket
/// <summary> /// <summary>
/// The _kernel /// The _kernel
/// </summary> /// </summary>
private readonly IKernel _kernel; private readonly IServerApplicationHost _appHost;
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="SystemInfoWebSocketListener" /> class. /// Initializes a new instance of the <see cref="SystemInfoWebSocketListener" /> class.
/// </summary> /// </summary>
/// <param name="kernel">The kernel.</param>
/// <param name="logger">The logger.</param> /// <param name="logger">The logger.</param>
public SystemInfoWebSocketListener(Kernel kernel, ILogger logger) public SystemInfoWebSocketListener(ILogger logger, IServerApplicationHost appHost)
: base(logger) : base(logger)
{ {
_kernel = kernel; _appHost = appHost;
} }
/// <summary> /// <summary>
@ -43,7 +42,7 @@ namespace MediaBrowser.Api.WebSocket
/// <returns>Task{SystemInfo}.</returns> /// <returns>Task{SystemInfo}.</returns>
protected override Task<SystemInfo> GetDataToSend(object state) protected override Task<SystemInfo> GetDataToSend(object state)
{ {
return Task.FromResult(_kernel.GetSystemInfo()); return Task.FromResult(_appHost.GetSystemInfo());
} }
} }
} }

View File

@ -1,13 +1,11 @@
using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Configuration;
using MediaBrowser.Common.Events;
using MediaBrowser.Common.Implementations.Logging; using MediaBrowser.Common.Implementations.Logging;
using MediaBrowser.Common.Implementations.NetworkManagement; using MediaBrowser.Common.Implementations.NetworkManagement;
using MediaBrowser.Common.Implementations.ScheduledTasks; using MediaBrowser.Common.Implementations.ScheduledTasks;
using MediaBrowser.Common.Implementations.Security; using MediaBrowser.Common.Implementations.Security;
using MediaBrowser.Common.Implementations.Serialization; using MediaBrowser.Common.Implementations.Serialization;
using MediaBrowser.Common.Implementations.Udp;
using MediaBrowser.Common.Implementations.Updates; using MediaBrowser.Common.Implementations.Updates;
using MediaBrowser.Common.Implementations.WebSocket;
using MediaBrowser.Common.Kernel;
using MediaBrowser.Common.Net; using MediaBrowser.Common.Net;
using MediaBrowser.Common.Plugins; using MediaBrowser.Common.Plugins;
using MediaBrowser.Common.ScheduledTasks; using MediaBrowser.Common.ScheduledTasks;
@ -15,6 +13,7 @@ using MediaBrowser.Common.Security;
using MediaBrowser.Common.Updates; using MediaBrowser.Common.Updates;
using MediaBrowser.Model.Logging; using MediaBrowser.Model.Logging;
using MediaBrowser.Model.Serialization; using MediaBrowser.Model.Serialization;
using MediaBrowser.Model.System;
using MediaBrowser.Model.Updates; using MediaBrowser.Model.Updates;
using SimpleInjector; using SimpleInjector;
using System; using System;
@ -30,6 +29,22 @@ namespace MediaBrowser.Common.Implementations
public abstract class BaseApplicationHost<TApplicationPathsType> : IApplicationHost public abstract class BaseApplicationHost<TApplicationPathsType> : IApplicationHost
where TApplicationPathsType : class, IApplicationPaths, new() where TApplicationPathsType : class, IApplicationPaths, new()
{ {
/// <summary>
/// Occurs when [has pending restart changed].
/// </summary>
public event EventHandler HasPendingRestartChanged;
/// <summary>
/// Occurs when [application updated].
/// </summary>
public event EventHandler<GenericEventArgs<Version>> ApplicationUpdated;
/// <summary>
/// Gets or sets a value indicating whether this instance has changes that require the entire application to restart.
/// </summary>
/// <value><c>true</c> if this instance has pending application restart; otherwise, <c>false</c>.</value>
public bool HasPendingRestart { get; private set; }
/// <summary> /// <summary>
/// Gets or sets the logger. /// Gets or sets the logger.
/// </summary> /// </summary>
@ -132,11 +147,11 @@ namespace MediaBrowser.Common.Implementations
/// Gets the kernel. /// Gets the kernel.
/// </summary> /// </summary>
/// <value>The kernel.</value> /// <value>The kernel.</value>
protected IKernel Kernel { get; private set; }
protected ITaskManager TaskManager { get; private set; } protected ITaskManager TaskManager { get; private set; }
protected ISecurityManager SecurityManager { get; private set; } protected ISecurityManager SecurityManager { get; private set; }
protected IPackageManager PackageManager { get; private set; } protected IPackageManager PackageManager { get; private set; }
protected IHttpClient HttpClient { get; private set; } protected IHttpClient HttpClient { get; private set; }
protected INetworkManager NetworkManager { get; private set; }
protected IConfigurationManager ConfigurationManager { get; private set; } protected IConfigurationManager ConfigurationManager { get; private set; }
@ -168,15 +183,11 @@ namespace MediaBrowser.Common.Implementations
Logger.Info("Version {0} initializing", ApplicationVersion); Logger.Info("Version {0} initializing", ApplicationVersion);
Kernel = GetKernel();
await RegisterResources().ConfigureAwait(false); await RegisterResources().ConfigureAwait(false);
FindParts(); FindParts();
Task.Run(() => ConfigureAutoRunAtStartup()); Task.Run(() => ConfigureAutoRunAtStartup());
Kernel.Init();
} }
/// <summary> /// <summary>
@ -191,7 +202,6 @@ namespace MediaBrowser.Common.Implementations
/// <value>The name of the log file prefix.</value> /// <value>The name of the log file prefix.</value>
protected abstract string LogFilePrefixName { get; } protected abstract string LogFilePrefixName { get; }
protected abstract IKernel GetKernel();
protected abstract IConfigurationManager GetConfigurationManager(); protected abstract IConfigurationManager GetConfigurationManager();
/// <summary> /// <summary>
@ -199,10 +209,6 @@ namespace MediaBrowser.Common.Implementations
/// </summary> /// </summary>
protected virtual void FindParts() protected virtual void FindParts()
{ {
Resolve<IHttpServer>().Init(GetExports<IRestfulService>(false));
Resolve<IServerManager>().AddWebSocketListeners(GetExports<IWebSocketListener>(false));
Resolve<IServerManager>().Start();
Resolve<ITaskManager>().AddTasks(GetExports<IScheduledTask>(false)); Resolve<ITaskManager>().AddTasks(GetExports<IScheduledTask>(false));
Plugins = GetExports<IPlugin>(); Plugins = GetExports<IPlugin>();
@ -239,11 +245,7 @@ namespace MediaBrowser.Common.Implementations
RegisterSingleInstance<IApplicationPaths>(ApplicationPaths); RegisterSingleInstance<IApplicationPaths>(ApplicationPaths);
var networkManager = new NetworkManager(); TaskManager = new TaskManager(ApplicationPaths, JsonSerializer, Logger);
var serverManager = new ServerManager.ServerManager(this, Kernel, networkManager, JsonSerializer, Logger, ConfigurationManager);
TaskManager = new TaskManager(ApplicationPaths, JsonSerializer, Logger, serverManager);
RegisterSingleInstance(JsonSerializer); RegisterSingleInstance(JsonSerializer);
RegisterSingleInstance(XmlSerializer); RegisterSingleInstance(XmlSerializer);
@ -251,25 +253,22 @@ namespace MediaBrowser.Common.Implementations
RegisterSingleInstance(LogManager); RegisterSingleInstance(LogManager);
RegisterSingleInstance(Logger); RegisterSingleInstance(Logger);
RegisterSingleInstance(Kernel);
RegisterSingleInstance(TaskManager); RegisterSingleInstance(TaskManager);
RegisterSingleInstance<IWebSocketServer>(() => new AlchemyServer(Logger));
RegisterSingleInstance(ProtobufSerializer); RegisterSingleInstance(ProtobufSerializer);
RegisterSingleInstance<IUdpServer>(new UdpServer(Logger), false);
HttpClient = new HttpClientManager.HttpClientManager(ApplicationPaths, Logger); HttpClient = new HttpClientManager.HttpClientManager(ApplicationPaths, Logger);
RegisterSingleInstance(HttpClient); RegisterSingleInstance(HttpClient);
RegisterSingleInstance<INetworkManager>(networkManager); NetworkManager = new NetworkManager();
RegisterSingleInstance<IServerManager>(serverManager);
SecurityManager = new PluginSecurityManager(Kernel, HttpClient, JsonSerializer, ApplicationPaths); RegisterSingleInstance(NetworkManager);
SecurityManager = new PluginSecurityManager(this, HttpClient, JsonSerializer, ApplicationPaths);
RegisterSingleInstance(SecurityManager); RegisterSingleInstance(SecurityManager);
PackageManager = new PackageManager(SecurityManager, networkManager, HttpClient, ApplicationPaths, JsonSerializer, Logger); PackageManager = new PackageManager(SecurityManager, NetworkManager, HttpClient, ApplicationPaths, JsonSerializer, Logger);
RegisterSingleInstance(PackageManager); RegisterSingleInstance(PackageManager);
}); });
@ -450,6 +449,34 @@ namespace MediaBrowser.Common.Implementations
Plugins = list; Plugins = list;
} }
/// <summary>
/// Performs the pending restart.
/// </summary>
/// <returns>Task.</returns>
public void PerformPendingRestart()
{
if (HasPendingRestart)
{
Logger.Info("Restarting the application");
Restart();
}
else
{
Logger.Info("PerformPendingRestart - not needed");
}
}
/// <summary>
/// Notifies that the kernel that a change has been made that requires a restart
/// </summary>
public void NotifyPendingRestart()
{
HasPendingRestart = true;
EventHelper.QueueEventIfNotNull(HasPendingRestartChanged, this, EventArgs.Empty, Logger);
}
/// <summary> /// <summary>
/// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
/// </summary> /// </summary>
@ -488,7 +515,20 @@ namespace MediaBrowser.Common.Implementations
public abstract Task<CheckForUpdateResult> CheckForApplicationUpdate(CancellationToken cancellationToken, IProgress<double> progress); public abstract Task<CheckForUpdateResult> CheckForApplicationUpdate(CancellationToken cancellationToken, IProgress<double> progress);
public abstract Task UpdateApplication(PackageVersionInfo package, CancellationToken cancellationToken, IProgress<double> progress); /// <summary>
/// Updates the application.
/// </summary>
/// <param name="package">The package that contains the update</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <param name="progress">The progress.</param>
/// <returns>Task.</returns>
public async Task UpdateApplication(PackageVersionInfo package, CancellationToken cancellationToken, IProgress<double> progress)
{
var pkgManager = Resolve<IPackageManager>();
await pkgManager.InstallPackage(progress, package, cancellationToken).ConfigureAwait(false);
EventHelper.QueueEventIfNotNull(ApplicationUpdated, this, new GenericEventArgs<Version> { Argument = package.version }, Logger);
}
public abstract void Shutdown(); public abstract void Shutdown();
} }

View File

@ -1,5 +1,4 @@
using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Configuration;
using MediaBrowser.Common.Kernel;
using System; using System;
using System.Configuration; using System.Configuration;
using System.IO; using System.IO;

View File

@ -1,6 +1,5 @@
using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Configuration;
using MediaBrowser.Common.IO; using MediaBrowser.Common.IO;
using MediaBrowser.Common.Kernel;
using MediaBrowser.Common.Net; using MediaBrowser.Common.Net;
using MediaBrowser.Model.Logging; using MediaBrowser.Model.Logging;
using MediaBrowser.Model.Net; using MediaBrowser.Model.Net;
@ -9,7 +8,6 @@ using System.Collections.Concurrent;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Net;
using System.Net.Cache; using System.Net.Cache;
using System.Net.Http; using System.Net.Http;
using System.Text; using System.Text;

View File

@ -35,9 +35,6 @@
<RunPostBuildEvent>Always</RunPostBuildEvent> <RunPostBuildEvent>Always</RunPostBuildEvent>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="Alchemy">
<HintPath>..\packages\Alchemy.2.2.1\lib\net40\Alchemy.dll</HintPath>
</Reference>
<Reference Include="Mediabrowser.PluginSecurity"> <Reference Include="Mediabrowser.PluginSecurity">
<HintPath>..\ThirdParty\PluginSecurity\Mediabrowser.PluginSecurity.dll</HintPath> <HintPath>..\ThirdParty\PluginSecurity\Mediabrowser.PluginSecurity.dll</HintPath>
</Reference> </Reference>
@ -47,41 +44,6 @@
<Reference Include="protobuf-net"> <Reference Include="protobuf-net">
<HintPath>..\packages\protobuf-net.2.0.0.621\lib\net40\protobuf-net.dll</HintPath> <HintPath>..\packages\protobuf-net.2.0.0.621\lib\net40\protobuf-net.dll</HintPath>
</Reference> </Reference>
<Reference Include="ServiceStack, Version=3.9.38.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\ServiceStack.3.9.38\lib\net35\ServiceStack.dll</HintPath>
</Reference>
<Reference Include="ServiceStack.Api.Swagger, Version=3.9.38.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\ServiceStack.Api.Swagger.3.9.38\lib\net35\ServiceStack.Api.Swagger.dll</HintPath>
</Reference>
<Reference Include="ServiceStack.Common, Version=3.9.38.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\ServiceStack.Common.3.9.38\lib\net35\ServiceStack.Common.dll</HintPath>
</Reference>
<Reference Include="ServiceStack.Interfaces, Version=3.9.38.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\ServiceStack.Common.3.9.38\lib\net35\ServiceStack.Interfaces.dll</HintPath>
</Reference>
<Reference Include="ServiceStack.Logging.NLog">
<HintPath>..\packages\ServiceStack.Logging.NLog.1.0.6.0\lib\net35\ServiceStack.Logging.NLog.dll</HintPath>
</Reference>
<Reference Include="ServiceStack.OrmLite, Version=3.9.39.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\ServiceStack.OrmLite.SqlServer.3.9.39\lib\ServiceStack.OrmLite.dll</HintPath>
</Reference>
<Reference Include="ServiceStack.OrmLite.SqlServer, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\ServiceStack.OrmLite.SqlServer.3.9.39\lib\ServiceStack.OrmLite.SqlServer.dll</HintPath>
</Reference>
<Reference Include="ServiceStack.Redis, Version=3.9.38.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\ServiceStack.Redis.3.9.38\lib\net35\ServiceStack.Redis.dll</HintPath>
</Reference>
<Reference Include="ServiceStack.ServiceInterface, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\ServiceStack.3.9.38\lib\net35\ServiceStack.ServiceInterface.dll</HintPath>
</Reference>
<Reference Include="ServiceStack.Text, Version=3.9.38.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="ServiceStack.Text, Version=3.9.38.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\ServiceStack.Text.3.9.38\lib\net35\ServiceStack.Text.dll</HintPath> <HintPath>..\packages\ServiceStack.Text.3.9.38\lib\net35\ServiceStack.Text.dll</HintPath>
@ -97,16 +59,6 @@
<Reference Include="System.Net" /> <Reference Include="System.Net" />
<Reference Include="System.Net.Http" /> <Reference Include="System.Net.Http" />
<Reference Include="System.Net.Http.WebRequest" /> <Reference Include="System.Net.Http.WebRequest" />
<Reference Include="System.Reactive.Core">
<HintPath>..\packages\Rx-Core.2.1.30214.0\lib\Net45\System.Reactive.Core.dll</HintPath>
</Reference>
<Reference Include="System.Reactive.Interfaces">
<HintPath>..\packages\Rx-Interfaces.2.1.30214.0\lib\Net45\System.Reactive.Interfaces.dll</HintPath>
</Reference>
<Reference Include="System.Reactive.Linq">
<HintPath>..\packages\Rx-Linq.2.1.30214.0\lib\Net45\System.Reactive.Linq.dll</HintPath>
</Reference>
<Reference Include="System.Web" />
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@ -117,12 +69,6 @@
<Compile Include="BaseApplicationPaths.cs" /> <Compile Include="BaseApplicationPaths.cs" />
<Compile Include="Configuration\BaseConfigurationManager.cs" /> <Compile Include="Configuration\BaseConfigurationManager.cs" />
<Compile Include="HttpClientManager\HttpClientManager.cs" /> <Compile Include="HttpClientManager\HttpClientManager.cs" />
<Compile Include="HttpServer\BaseRestService.cs" />
<Compile Include="HttpServer\HttpServer.cs" />
<Compile Include="HttpServer\NativeWebSocket.cs" />
<Compile Include="HttpServer\ServerFactory.cs" />
<Compile Include="HttpServer\StreamWriter.cs" />
<Compile Include="HttpServer\SwaggerService.cs" />
<Compile Include="Logging\LogHelper.cs" /> <Compile Include="Logging\LogHelper.cs" />
<Compile Include="Logging\NLogger.cs" /> <Compile Include="Logging\NLogger.cs" />
<Compile Include="Logging\NlogManager.cs" /> <Compile Include="Logging\NlogManager.cs" />
@ -140,12 +86,8 @@
<Compile Include="Serialization\JsonSerializer.cs" /> <Compile Include="Serialization\JsonSerializer.cs" />
<Compile Include="Serialization\ProtobufSerializer.cs" /> <Compile Include="Serialization\ProtobufSerializer.cs" />
<Compile Include="Serialization\XmlSerializer.cs" /> <Compile Include="Serialization\XmlSerializer.cs" />
<Compile Include="ServerManager\ServerManager.cs" /> <Compile Include="Updates\ApplicationUpdater.cs" />
<Compile Include="ServerManager\WebSocketConnection.cs" />
<Compile Include="Udp\UdpServer.cs" />
<Compile Include="Updates\PackageManager.cs" /> <Compile Include="Updates\PackageManager.cs" />
<Compile Include="WebSocket\AlchemyServer.cs" />
<Compile Include="WebSocket\AlchemyWebSocket.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\MediaBrowser.Common\MediaBrowser.Common.csproj"> <ProjectReference Include="..\MediaBrowser.Common\MediaBrowser.Common.csproj">
@ -159,52 +101,6 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="packages.config" /> <None Include="packages.config" />
<EmbeddedResource Include="ServerManager\RegisterServer.bat" />
</ItemGroup>
<ItemGroup>
<Content Include="README.txt" />
<Content Include="swagger-ui\css\screen.css">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="swagger-ui\images\pet_store_api.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="swagger-ui\images\wordnik_api.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="swagger-ui\index.html">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="swagger-ui\lib\backbone-min.js">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="swagger-ui\lib\handlebars.runtime-1.0.0.beta.6.js">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="swagger-ui\lib\jquery.ba-bbq.min.js">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="swagger-ui\lib\jquery.min.js">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="swagger-ui\lib\jquery.slideto.min.js">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="swagger-ui\lib\jquery.wiggle.min.js">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="swagger-ui\lib\swagger.js">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="swagger-ui\lib\underscore-min.js">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="swagger-ui\swagger-ui.js">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="swagger-ui\swagger-ui.min.js">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup> </ItemGroup>
<ItemGroup /> <ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

View File

@ -1,6 +1,5 @@
using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Configuration;
using MediaBrowser.Common.Extensions; using MediaBrowser.Common.Extensions;
using MediaBrowser.Common.Kernel;
using MediaBrowser.Common.ScheduledTasks; using MediaBrowser.Common.ScheduledTasks;
using MediaBrowser.Model.Logging; using MediaBrowser.Model.Logging;
using MediaBrowser.Model.Serialization; using MediaBrowser.Model.Serialization;
@ -49,12 +48,6 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks
/// <value>The task manager.</value> /// <value>The task manager.</value>
private ITaskManager TaskManager { get; set; } private ITaskManager TaskManager { get; set; }
/// <summary>
/// Gets or sets the server manager.
/// </summary>
/// <value>The server manager.</value>
private IServerManager ServerManager { get; set; }
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="ScheduledTaskWorker" /> class. /// Initializes a new instance of the <see cref="ScheduledTaskWorker" /> class.
/// </summary> /// </summary>
@ -64,7 +57,7 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks
/// <param name="jsonSerializer">The json serializer.</param> /// <param name="jsonSerializer">The json serializer.</param>
/// <param name="logger">The logger.</param> /// <param name="logger">The logger.</param>
/// <param name="serverManager">The server manager.</param> /// <param name="serverManager">The server manager.</param>
public ScheduledTaskWorker(IScheduledTask scheduledTask, IApplicationPaths applicationPaths, ITaskManager taskManager, IJsonSerializer jsonSerializer, ILogger logger, IServerManager serverManager) public ScheduledTaskWorker(IScheduledTask scheduledTask, IApplicationPaths applicationPaths, ITaskManager taskManager, IJsonSerializer jsonSerializer, ILogger logger)
{ {
if (scheduledTask == null) if (scheduledTask == null)
{ {
@ -86,17 +79,12 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks
{ {
throw new ArgumentNullException("logger"); throw new ArgumentNullException("logger");
} }
if (serverManager == null)
{
throw new ArgumentNullException("serverManager");
}
ScheduledTask = scheduledTask; ScheduledTask = scheduledTask;
ApplicationPaths = applicationPaths; ApplicationPaths = applicationPaths;
TaskManager = taskManager; TaskManager = taskManager;
JsonSerializer = jsonSerializer; JsonSerializer = jsonSerializer;
Logger = logger; Logger = logger;
ServerManager = serverManager;
ReloadTriggerEvents(true); ReloadTriggerEvents(true);
} }
@ -331,6 +319,8 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks
Logger.Info("Executing {0}", Name); Logger.Info("Executing {0}", Name);
((TaskManager)TaskManager).OnTaskExecuting(ScheduledTask);
var progress = new Progress<double>(); var progress = new Progress<double>();
progress.ProgressChanged += progress_ProgressChanged; progress.ProgressChanged += progress_ProgressChanged;
@ -338,8 +328,6 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks
TaskCompletionStatus status; TaskCompletionStatus status;
CurrentExecutionStartTime = DateTime.UtcNow; CurrentExecutionStartTime = DateTime.UtcNow;
ServerManager.SendWebSocketMessage("ScheduledTaskBeginExecute", Name);
try try
{ {
await ExecuteTask(CurrentCancellationTokenSource.Token, progress).ConfigureAwait(false); await ExecuteTask(CurrentCancellationTokenSource.Token, progress).ConfigureAwait(false);
@ -517,8 +505,7 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks
/// <param name="startTime">The start time.</param> /// <param name="startTime">The start time.</param>
/// <param name="endTime">The end time.</param> /// <param name="endTime">The end time.</param>
/// <param name="status">The status.</param> /// <param name="status">The status.</param>
/// <param name="sendNotification">if set to <c>true</c> [send notification].</param> private void OnTaskCompleted(DateTime startTime, DateTime endTime, TaskCompletionStatus status)
private void OnTaskCompleted(DateTime startTime, DateTime endTime, TaskCompletionStatus status, bool sendNotification = true)
{ {
var elapsedTime = endTime - startTime; var elapsedTime = endTime - startTime;
@ -537,10 +524,7 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks
LastExecutionResult = result; LastExecutionResult = result;
if (sendNotification) ((TaskManager) TaskManager).OnTaskCompleted(ScheduledTask, result);
{
ServerManager.SendWebSocketMessage("ScheduledTaskEndExecute", result);
}
} }
/// <summary> /// <summary>
@ -564,7 +548,7 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks
if (State == TaskState.Running) if (State == TaskState.Running)
{ {
OnTaskCompleted(CurrentExecutionStartTime, DateTime.UtcNow, TaskCompletionStatus.Aborted, false); OnTaskCompleted(CurrentExecutionStartTime, DateTime.UtcNow, TaskCompletionStatus.Aborted);
} }
if (CurrentCancellationTokenSource != null) if (CurrentCancellationTokenSource != null)

View File

@ -1,5 +1,6 @@
using MediaBrowser.Common.Configuration; using System.Threading.Tasks;
using MediaBrowser.Common.Kernel; using MediaBrowser.Common.Configuration;
using MediaBrowser.Common.Events;
using MediaBrowser.Common.ScheduledTasks; using MediaBrowser.Common.ScheduledTasks;
using MediaBrowser.Model.Logging; using MediaBrowser.Model.Logging;
using MediaBrowser.Model.Serialization; using MediaBrowser.Model.Serialization;
@ -15,6 +16,9 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks
/// </summary> /// </summary>
public class TaskManager : ITaskManager public class TaskManager : ITaskManager
{ {
public event EventHandler<EventArgs> TaskExecuting;
public event EventHandler<GenericEventArgs<TaskResult>> TaskCompleted;
/// <summary> /// <summary>
/// Gets the list of Scheduled Tasks /// Gets the list of Scheduled Tasks
/// </summary> /// </summary>
@ -44,26 +48,18 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks
/// <value>The logger.</value> /// <value>The logger.</value>
private ILogger Logger { get; set; } private ILogger Logger { get; set; }
/// <summary>
/// Gets or sets the server manager.
/// </summary>
/// <value>The server manager.</value>
private IServerManager ServerManager { get; set; }
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="TaskManager" /> class. /// Initializes a new instance of the <see cref="TaskManager" /> class.
/// </summary> /// </summary>
/// <param name="applicationPaths">The application paths.</param> /// <param name="applicationPaths">The application paths.</param>
/// <param name="jsonSerializer">The json serializer.</param> /// <param name="jsonSerializer">The json serializer.</param>
/// <param name="logger">The logger.</param> /// <param name="logger">The logger.</param>
/// <param name="serverManager">The server manager.</param>
/// <exception cref="System.ArgumentException">kernel</exception> /// <exception cref="System.ArgumentException">kernel</exception>
public TaskManager(IApplicationPaths applicationPaths, IJsonSerializer jsonSerializer, ILogger logger, IServerManager serverManager) public TaskManager(IApplicationPaths applicationPaths, IJsonSerializer jsonSerializer, ILogger logger)
{ {
ApplicationPaths = applicationPaths; ApplicationPaths = applicationPaths;
JsonSerializer = jsonSerializer; JsonSerializer = jsonSerializer;
Logger = logger; Logger = logger;
ServerManager = serverManager;
ScheduledTasks = new IScheduledTaskWorker[] { }; ScheduledTasks = new IScheduledTaskWorker[] { };
} }
@ -75,7 +71,9 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks
public void CancelIfRunningAndQueue<T>() public void CancelIfRunningAndQueue<T>()
where T : IScheduledTask where T : IScheduledTask
{ {
ScheduledTasks.First(t => t.ScheduledTask.GetType() == typeof(T)).CancelIfRunning(); var task = ScheduledTasks.First(t => t.ScheduledTask.GetType() == typeof(T));
((ScheduledTaskWorker)task).CancelIfRunning();
QueueScheduledTask<T>(); QueueScheduledTask<T>();
} }
@ -115,7 +113,7 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks
// If it's idle just execute immediately // If it's idle just execute immediately
if (task.State == TaskState.Idle) if (task.State == TaskState.Idle)
{ {
task.Execute(); ((ScheduledTaskWorker)task).Execute();
return; return;
} }
@ -131,31 +129,6 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks
} }
} }
/// <summary>
/// Called when [task completed].
/// </summary>
/// <param name="task">The task.</param>
public void OnTaskCompleted(IScheduledTask task)
{
// Execute queued tasks
lock (_taskQueue)
{
var copy = _taskQueue.ToList();
foreach (var type in copy)
{
var scheduledTask = ScheduledTasks.First(t => t.GetType() == type);
if (scheduledTask.State == TaskState.Idle)
{
scheduledTask.Execute();
_taskQueue.Remove(type);
}
}
}
}
/// <summary> /// <summary>
/// Adds the tasks. /// Adds the tasks.
/// </summary> /// </summary>
@ -164,7 +137,7 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks
{ {
var myTasks = ScheduledTasks.ToList(); 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(); ScheduledTasks = myTasks.ToArray();
} }
@ -189,5 +162,25 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks
task.Dispose(); task.Dispose();
} }
} }
public void Cancel(IScheduledTaskWorker task)
{
((ScheduledTaskWorker)task).Cancel();
}
public Task Execute(IScheduledTaskWorker task)
{
return ((ScheduledTaskWorker)task).Execute();
}
internal void OnTaskExecuting(IScheduledTask task)
{
EventHelper.QueueEventIfNotNull(TaskExecuting, task, EventArgs.Empty, Logger);
}
internal void OnTaskCompleted(IScheduledTask task, TaskResult result)
{
EventHelper.QueueEventIfNotNull(TaskExecuting, task, new GenericEventArgs<TaskResult> { Argument = result }, Logger);
}
} }
} }

View File

@ -1,5 +1,4 @@
using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Configuration;
using MediaBrowser.Common.Kernel;
using MediaBrowser.Common.ScheduledTasks; using MediaBrowser.Common.ScheduledTasks;
using MediaBrowser.Model.Logging; using MediaBrowser.Model.Logging;
using System; using System;
@ -30,25 +29,17 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks.Tasks
/// <value>The logger.</value> /// <value>The logger.</value>
private ILogger Logger { get; set; } private ILogger Logger { get; set; }
/// <summary>
/// Gets or sets the kernel.
/// </summary>
/// <value>The kernel.</value>
private IKernel Kernel { get; set; }
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="SystemUpdateTask" /> class. /// Initializes a new instance of the <see cref="SystemUpdateTask" /> class.
/// </summary> /// </summary>
/// <param name="appHost">The app host.</param> /// <param name="appHost">The app host.</param>
/// <param name="configurationManager">The configuration manager.</param> /// <param name="configurationManager">The configuration manager.</param>
/// <param name="logger">The logger.</param> /// <param name="logger">The logger.</param>
/// <param name="kernel">The kernel.</param> public SystemUpdateTask(IApplicationHost appHost, IConfigurationManager configurationManager, ILogger logger)
public SystemUpdateTask(IApplicationHost appHost, IConfigurationManager configurationManager, ILogger logger, IKernel kernel)
{ {
_appHost = appHost; _appHost = appHost;
ConfigurationManager = configurationManager; ConfigurationManager = configurationManager;
Logger = logger; Logger = logger;
Kernel = kernel;
} }
/// <summary> /// <summary>
@ -110,8 +101,6 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks.Tasks
// Release the event handler // Release the event handler
innerProgress.ProgressChanged -= innerProgressHandler; innerProgress.ProgressChanged -= innerProgressHandler;
Kernel.OnApplicationUpdated(updateInfo.AvailableVersion);
} }
else else
{ {

View File

@ -3,7 +3,6 @@ using MediaBrowser.Common.Security;
using MediaBrowser.Model.Serialization; using MediaBrowser.Model.Serialization;
using Mediabrowser.Model.Entities; using Mediabrowser.Model.Entities;
using Mediabrowser.PluginSecurity; using Mediabrowser.PluginSecurity;
using MediaBrowser.Common.Kernel;
using MediaBrowser.Common.Net; using MediaBrowser.Common.Net;
using System; using System;
using System.Threading; using System.Threading;
@ -44,29 +43,19 @@ namespace MediaBrowser.Common.Implementations.Security
private IHttpClient _httpClient; private IHttpClient _httpClient;
private IJsonSerializer _jsonSerializer; private IJsonSerializer _jsonSerializer;
private IApplicationHost _appHost;
/// <summary>
/// The _kernel
/// </summary>
private readonly IKernel _kernel;
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="PluginSecurityManager" /> class. /// Initializes a new instance of the <see cref="PluginSecurityManager" /> class.
/// </summary> /// </summary>
/// <param name="kernel">The kernel.</param> public PluginSecurityManager(IApplicationHost appHost, IHttpClient httpClient, IJsonSerializer jsonSerializer, IApplicationPaths appPaths)
public PluginSecurityManager(IKernel kernel, IHttpClient httpClient, IJsonSerializer jsonSerializer, IApplicationPaths appPaths)
{ {
if (kernel == null)
{
throw new ArgumentNullException("kernel");
}
if (httpClient == null) if (httpClient == null)
{ {
throw new ArgumentNullException("httpClient"); throw new ArgumentNullException("httpClient");
} }
_kernel = kernel; _appHost = appHost;
_httpClient = httpClient; _httpClient = httpClient;
_jsonSerializer = jsonSerializer; _jsonSerializer = jsonSerializer;
MBRegistration.Init(appPaths); MBRegistration.Init(appPaths);
@ -98,7 +87,7 @@ namespace MediaBrowser.Common.Implementations.Security
// Clear this so it will re-evaluate // Clear this so it will re-evaluate
ResetSupporterInfo(); ResetSupporterInfo();
// And we'll need to restart to re-evaluate the status of plug-ins // 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; MBRegistration.LegacyKey = value;
// And we'll need to restart to re-evaluate the status of plug-ins // And we'll need to restart to re-evaluate the status of plug-ins
_kernel.NotifyPendingRestart(); _appHost.NotifyPendingRestart();
} }
} }

View File

@ -1,14 +1,8 @@
using System; using MediaBrowser.Common.Configuration;
using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO; using System.IO;
using MediaBrowser.Common.Configuration;
using MediaBrowser.Common.Kernel;
namespace MediaBrowser.Common.Updates namespace MediaBrowser.Common.Implementations.Updates
{ {
public enum MBApplication public enum MBApplication
{ {

View File

@ -1,17 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="Alchemy" version="2.2.1" targetFramework="net45" />
<package id="NLog" version="2.0.0.2000" targetFramework="net45" /> <package id="NLog" version="2.0.0.2000" targetFramework="net45" />
<package id="protobuf-net" version="2.0.0.621" targetFramework="net45" /> <package id="protobuf-net" version="2.0.0.621" targetFramework="net45" />
<package id="Rx-Core" version="2.1.30214.0" targetFramework="net45" />
<package id="Rx-Interfaces" version="2.1.30214.0" targetFramework="net45" />
<package id="Rx-Linq" version="2.1.30214.0" targetFramework="net45" />
<package id="ServiceStack" version="3.9.38" targetFramework="net45" />
<package id="ServiceStack.Api.Swagger" version="3.9.38" targetFramework="net45" />
<package id="ServiceStack.Common" version="3.9.38" targetFramework="net45" />
<package id="ServiceStack.Logging.NLog" version="1.0.6.0" targetFramework="net45" />
<package id="ServiceStack.OrmLite.SqlServer" version="3.9.39" targetFramework="net45" />
<package id="ServiceStack.Redis" version="3.9.38" targetFramework="net45" />
<package id="ServiceStack.Text" version="3.9.38" targetFramework="net45" /> <package id="ServiceStack.Text" version="3.9.38" targetFramework="net45" />
<package id="SimpleInjector" version="2.0.0-beta5" targetFramework="net45" /> <package id="SimpleInjector" version="2.0.0-beta5" targetFramework="net45" />
</packages> </packages>

View File

@ -12,6 +12,27 @@ namespace MediaBrowser.Common
/// </summary> /// </summary>
public interface IApplicationHost public interface IApplicationHost
{ {
/// <summary>
/// Performs the pending restart.
/// </summary>
void PerformPendingRestart();
/// <summary>
/// Gets or sets a value indicating whether this instance has pending kernel reload.
/// </summary>
/// <value><c>true</c> if this instance has pending kernel reload; otherwise, <c>false</c>.</value>
bool HasPendingRestart { get; }
/// <summary>
/// Occurs when [has pending restart changed].
/// </summary>
event EventHandler HasPendingRestartChanged;
/// <summary>
/// Notifies the pending restart.
/// </summary>
void NotifyPendingRestart();
/// <summary> /// <summary>
/// Restarts this instance. /// Restarts this instance.
/// </summary> /// </summary>

View File

@ -1,167 +0,0 @@
using MediaBrowser.Common.Configuration;
using MediaBrowser.Common.Events;
using MediaBrowser.Model.Logging;
using MediaBrowser.Model.System;
using System;
namespace MediaBrowser.Common.Kernel
{
/// <summary>
/// Represents a shared base kernel for both the Ui and server apps
/// </summary>
public abstract class BaseKernel : IKernel
{
/// <summary>
/// Occurs when [has pending restart changed].
/// </summary>
public event EventHandler HasPendingRestartChanged;
#region ApplicationUpdated Event
/// <summary>
/// Occurs when [application updated].
/// </summary>
public event EventHandler<GenericEventArgs<Version>> ApplicationUpdated;
/// <summary>
/// Called when [application updated].
/// </summary>
/// <param name="newVersion">The new version.</param>
public void OnApplicationUpdated(Version newVersion)
{
EventHelper.QueueEventIfNotNull(ApplicationUpdated, this, new GenericEventArgs<Version> { Argument = newVersion }, Logger);
NotifyPendingRestart();
}
#endregion
/// <summary>
/// Gets or sets a value indicating whether this instance has changes that require the entire application to restart.
/// </summary>
/// <value><c>true</c> if this instance has pending application restart; otherwise, <c>false</c>.</value>
public bool HasPendingRestart { get; private set; }
/// <summary>
/// Gets the UDP server port number.
/// This can't be configurable because then the user would have to configure their client to discover the server.
/// </summary>
/// <value>The UDP server port number.</value>
public abstract int UdpServerPortNumber { get; }
/// <summary>
/// Gets the name of the web application that can be used for url building.
/// All api urls will be of the form {protocol}://{host}:{port}/{appname}/...
/// </summary>
/// <value>The name of the web application.</value>
public string WebApplicationName
{
get { return "mediabrowser"; }
}
/// <summary>
/// Gets the HTTP server URL prefix.
/// </summary>
/// <value>The HTTP server URL prefix.</value>
public virtual string HttpServerUrlPrefix
{
get
{
return "http://+:" + _configurationManager.CommonConfiguration.HttpServerPortNumber + "/" + WebApplicationName + "/";
}
}
/// <summary>
/// Gets the kernel context. Subclasses will have to override.
/// </summary>
/// <value>The kernel context.</value>
public abstract KernelContext KernelContext { get; }
/// <summary>
/// Gets the logger.
/// </summary>
/// <value>The logger.</value>
protected ILogger Logger { get; private set; }
/// <summary>
/// Gets or sets the application host.
/// </summary>
/// <value>The application host.</value>
protected IApplicationHost ApplicationHost { get; private set; }
private readonly IConfigurationManager _configurationManager;
/// <summary>
/// Initializes a new instance of the <see cref="BaseKernel" /> class.
/// </summary>
/// <param name="appHost">The app host.</param>
/// <param name="logManager">The log manager.</param>
protected BaseKernel(IApplicationHost appHost, ILogManager logManager, IConfigurationManager configurationManager)
{
ApplicationHost = appHost;
_configurationManager = configurationManager;
Logger = logManager.GetLogger("Kernel");
}
/// <summary>
/// Initializes the Kernel
/// </summary>
/// <returns>Task.</returns>
public void Init()
{
ReloadInternal();
Logger.Info("Kernel.Init Complete");
}
/// <summary>
/// Performs initializations that can be reloaded at anytime
/// </summary>
/// <returns>Task.</returns>
protected virtual void ReloadInternal()
{
}
/// <summary>
/// Notifies that the kernel that a change has been made that requires a restart
/// </summary>
public void NotifyPendingRestart()
{
HasPendingRestart = true;
EventHelper.QueueEventIfNotNull(HasPendingRestartChanged, this, EventArgs.Empty, Logger);
}
/// <summary>
/// Performs the pending restart.
/// </summary>
/// <returns>Task.</returns>
public void PerformPendingRestart()
{
if (HasPendingRestart)
{
Logger.Info("Restarting the application");
ApplicationHost.Restart();
}
else
{
Logger.Info("PerformPendingRestart - not needed");
}
}
/// <summary>
/// Gets the system status.
/// </summary>
/// <returns>SystemInfo.</returns>
public virtual SystemInfo GetSystemInfo()
{
return new SystemInfo
{
HasPendingRestart = HasPendingRestart,
Version = ApplicationHost.ApplicationVersion.ToString(),
IsNetworkDeployed = ApplicationHost.CanSelfUpdate,
WebSocketPortNumber = ApplicationHost.Resolve<IServerManager>().WebSocketPortNumber,
SupportsNativeWebSocket = ApplicationHost.Resolve<IServerManager>().SupportsNativeWebSocket,
FailedPluginAssemblies = ApplicationHost.FailedAssemblies.ToArray()
};
}
}
}

View File

@ -1,74 +0,0 @@
using MediaBrowser.Model.System;
using System;
namespace MediaBrowser.Common.Kernel
{
/// <summary>
/// Interface IKernel
/// </summary>
public interface IKernel
{
/// <summary>
/// Occurs when [has pending restart changed].
/// </summary>
event EventHandler HasPendingRestartChanged;
/// <summary>
/// Gets the kernel context.
/// </summary>
/// <value>The kernel context.</value>
KernelContext KernelContext { get; }
/// <summary>
/// Inits this instance.
/// </summary>
/// <returns>Task.</returns>
void Init();
/// <summary>
/// Gets or sets a value indicating whether this instance has pending kernel reload.
/// </summary>
/// <value><c>true</c> if this instance has pending kernel reload; otherwise, <c>false</c>.</value>
bool HasPendingRestart { get; }
/// <summary>
/// Gets the system status.
/// </summary>
/// <returns>SystemInfo.</returns>
SystemInfo GetSystemInfo();
/// <summary>
/// Called when [application updated].
/// </summary>
/// <param name="newVersion">The new version.</param>
void OnApplicationUpdated(Version newVersion);
/// <summary>
/// Gets the name of the web application.
/// </summary>
/// <value>The name of the web application.</value>
string WebApplicationName { get; }
/// <summary>
/// Performs the pending restart.
/// </summary>
void PerformPendingRestart();
/// <summary>
/// Gets the UDP server port number.
/// </summary>
/// <value>The UDP server port number.</value>
int UdpServerPortNumber { get; }
/// <summary>
/// Gets the HTTP server URL prefix.
/// </summary>
/// <value>The HTTP server URL prefix.</value>
string HttpServerUrlPrefix { get; }
/// <summary>
/// Notifies the pending restart.
/// </summary>
void NotifyPendingRestart();
}
}

View File

@ -1,18 +0,0 @@

namespace MediaBrowser.Common.Kernel
{
/// <summary>
/// Enum KernelContext
/// </summary>
public enum KernelContext
{
/// <summary>
/// The server
/// </summary>
Server,
/// <summary>
/// The UI
/// </summary>
Ui
}
}

View File

@ -59,12 +59,11 @@
<Compile Include="IO\IIsoMount.cs" /> <Compile Include="IO\IIsoMount.cs" />
<Compile Include="IO\ProgressStream.cs" /> <Compile Include="IO\ProgressStream.cs" />
<Compile Include="IO\StreamDefaults.cs" /> <Compile Include="IO\StreamDefaults.cs" />
<Compile Include="Kernel\BasePeriodicWebSocketListener.cs" /> <Compile Include="Net\BasePeriodicWebSocketListener.cs" />
<Compile Include="Configuration\IApplicationPaths.cs" /> <Compile Include="Configuration\IApplicationPaths.cs" />
<Compile Include="Kernel\IServerManager.cs" /> <Compile Include="Net\IServerManager.cs" />
<Compile Include="Kernel\IWebSocketListener.cs" /> <Compile Include="Net\IWebSocketListener.cs" />
<Compile Include="IApplicationHost.cs" /> <Compile Include="IApplicationHost.cs" />
<Compile Include="Kernel\IKernel.cs" />
<Compile Include="Net\IHttpClient.cs" /> <Compile Include="Net\IHttpClient.cs" />
<Compile Include="Net\IHttpServer.cs" /> <Compile Include="Net\IHttpServer.cs" />
<Compile Include="Net\INetworkManager.cs" /> <Compile Include="Net\INetworkManager.cs" />
@ -94,15 +93,13 @@
<Compile Include="ScheduledTasks\ScheduledTaskHelpers.cs" /> <Compile Include="ScheduledTasks\ScheduledTaskHelpers.cs" />
<Compile Include="ScheduledTasks\StartupTrigger.cs" /> <Compile Include="ScheduledTasks\StartupTrigger.cs" />
<Compile Include="ScheduledTasks\SystemEventTrigger.cs" /> <Compile Include="ScheduledTasks\SystemEventTrigger.cs" />
<Compile Include="Kernel\BaseKernel.cs" />
<Compile Include="Kernel\KernelContext.cs" />
<Compile Include="Plugins\BasePlugin.cs" /> <Compile Include="Plugins\BasePlugin.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="ScheduledTasks\DailyTrigger.cs" /> <Compile Include="ScheduledTasks\DailyTrigger.cs" />
<Compile Include="ScheduledTasks\IntervalTrigger.cs" /> <Compile Include="ScheduledTasks\IntervalTrigger.cs" />
<Compile Include="ScheduledTasks\TaskCompletionEventArgs.cs" />
<Compile Include="ScheduledTasks\WeeklyTrigger.cs" /> <Compile Include="ScheduledTasks\WeeklyTrigger.cs" />
<Compile Include="Security\ISecurityManager.cs" /> <Compile Include="Security\ISecurityManager.cs" />
<Compile Include="Updates\ApplicationUpdater.cs" />
<Compile Include="Updates\IPackageManager.cs" /> <Compile Include="Updates\IPackageManager.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@ -1,12 +1,11 @@
using MediaBrowser.Common.Net; using MediaBrowser.Model.Logging;
using MediaBrowser.Model.Logging;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace MediaBrowser.Common.Kernel namespace MediaBrowser.Common.Net
{ {
/// <summary> /// <summary>
/// Starts sending data over a web socket periodically when a message is received, and then stops when a corresponding stop message is received /// Starts sending data over a web socket periodically when a message is received, and then stops when a corresponding stop message is received

View File

@ -3,7 +3,7 @@ using System.Collections.Generic;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace MediaBrowser.Common.Kernel namespace MediaBrowser.Common.Net
{ {
public interface IServerManager : IDisposable public interface IServerManager : IDisposable
{ {

View File

@ -1,7 +1,6 @@
using MediaBrowser.Common.Net; using System.Threading.Tasks;
using System.Threading.Tasks;
namespace MediaBrowser.Common.Kernel namespace MediaBrowser.Common.Net
{ {
/// <summary> /// <summary>
///This is an interface for listening to messages coming through a web socket connection ///This is an interface for listening to messages coming through a web socket connection

View File

@ -1,7 +1,6 @@
using MediaBrowser.Model.Tasks; using MediaBrowser.Model.Tasks;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading.Tasks;
namespace MediaBrowser.Common.ScheduledTasks namespace MediaBrowser.Common.ScheduledTasks
{ {
@ -64,23 +63,5 @@ namespace MediaBrowser.Common.ScheduledTasks
/// </summary> /// </summary>
/// <value>The unique id.</value> /// <value>The unique id.</value>
Guid Id { get; } Guid Id { get; }
/// <summary>
/// Executes the task
/// </summary>
/// <returns>Task.</returns>
/// <exception cref="System.InvalidOperationException">Cannot execute a Task that is already running</exception>
Task Execute();
/// <summary>
/// Stops the task if it is currently executing
/// </summary>
/// <exception cref="System.InvalidOperationException">Cannot cancel a Task unless it is in the Running state.</exception>
void Cancel();
/// <summary>
/// Cancels if running.
/// </summary>
void CancelIfRunning();
} }
} }

View File

@ -1,5 +1,8 @@
using System; using MediaBrowser.Common.Events;
using MediaBrowser.Model.Tasks;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading.Tasks;
namespace MediaBrowser.Common.ScheduledTasks namespace MediaBrowser.Common.ScheduledTasks
{ {
@ -36,5 +39,11 @@ namespace MediaBrowser.Common.ScheduledTasks
/// </summary> /// </summary>
/// <param name="tasks">The tasks.</param> /// <param name="tasks">The tasks.</param>
void AddTasks(IEnumerable<IScheduledTask> tasks); void AddTasks(IEnumerable<IScheduledTask> tasks);
void Cancel(IScheduledTaskWorker task);
Task Execute(IScheduledTaskWorker task);
event EventHandler<EventArgs> TaskExecuting;
event EventHandler<GenericEventArgs<TaskResult>> TaskCompleted;
} }
} }

View File

@ -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; }
}
}

View File

@ -1,50 +0,0 @@
using MediaBrowser.Common.Kernel;
using System;
namespace MediaBrowser.Controller
{
/// <summary>
/// Class BaseManager
/// </summary>
/// <typeparam name="TKernelType">The type of the T kernel type.</typeparam>
public abstract class BaseManager<TKernelType> : IDisposable
where TKernelType : class, IKernel
{
/// <summary>
/// The _kernel
/// </summary>
protected readonly TKernelType Kernel;
/// <summary>
/// Initializes a new instance of the <see cref="BaseManager" /> class.
/// </summary>
/// <param name="kernel">The kernel.</param>
/// <exception cref="System.ArgumentNullException">kernel</exception>
protected BaseManager(TKernelType kernel)
{
if (kernel == null)
{
throw new ArgumentNullException("kernel");
}
Kernel = kernel;
}
/// <summary>
/// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
/// </summary>
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
/// <summary>
/// Releases unmanaged and - optionally - managed resources.
/// </summary>
/// <param name="dispose"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
protected virtual void Dispose(bool dispose)
{
}
}
}

View File

@ -1,5 +1,4 @@
using MediaBrowser.Common.IO; using MediaBrowser.Common.IO;
using MediaBrowser.Common.Kernel;
using MediaBrowser.Common.ScheduledTasks; using MediaBrowser.Common.ScheduledTasks;
using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities; 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 /// 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. /// this class to do so. This way we can have the watchers correctly respond to only external changes.
/// </summary> /// </summary>
public class FileSystemManager : BaseManager<Kernel> public class FileSystemManager : IDisposable
{ {
/// <summary> /// <summary>
/// Gets or sets the directory watchers. /// Gets or sets the directory watchers.
@ -25,23 +24,15 @@ namespace MediaBrowser.Controller.IO
/// <value>The directory watchers.</value> /// <value>The directory watchers.</value>
private DirectoryWatchers DirectoryWatchers { get; set; } private DirectoryWatchers DirectoryWatchers { get; set; }
/// <summary>
/// The _logger
/// </summary>
private readonly ILogger _logger;
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="FileSystemManager" /> class. /// Initializes a new instance of the <see cref="FileSystemManager" /> class.
/// </summary> /// </summary>
/// <param name="kernel">The kernel.</param>
/// <param name="logManager">The log manager.</param> /// <param name="logManager">The log manager.</param>
/// <param name="taskManager">The task manager.</param> /// <param name="taskManager">The task manager.</param>
/// <param name="libraryManager">The library manager.</param> /// <param name="libraryManager">The library manager.</param>
/// <param name="configurationManager">The configuration manager.</param> /// <param name="configurationManager">The configuration manager.</param>
public FileSystemManager(Kernel kernel, ILogManager logManager, ITaskManager taskManager, ILibraryManager libraryManager, IServerConfigurationManager configurationManager) public FileSystemManager(ILogManager logManager, ITaskManager taskManager, ILibraryManager libraryManager, IServerConfigurationManager configurationManager)
: base(kernel)
{ {
_logger = logManager.GetLogger("FileSystemManager");
DirectoryWatchers = new DirectoryWatchers(logManager, taskManager, libraryManager, configurationManager); DirectoryWatchers = new DirectoryWatchers(logManager, taskManager, libraryManager, configurationManager);
} }
@ -113,14 +104,17 @@ namespace MediaBrowser.Controller.IO
/// Releases unmanaged and - optionally - managed resources. /// Releases unmanaged and - optionally - managed resources.
/// </summary> /// </summary>
/// <param name="dispose"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param> /// <param name="dispose"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
protected override void Dispose(bool dispose) protected virtual void Dispose(bool dispose)
{ {
if (dispose) if (dispose)
{ {
DirectoryWatchers.Dispose(); DirectoryWatchers.Dispose();
} }
}
base.Dispose(dispose); public void Dispose()
{
Dispose(true);
} }
} }
} }

View File

@ -0,0 +1,10 @@
using MediaBrowser.Common;
using MediaBrowser.Model.System;
namespace MediaBrowser.Controller
{
public interface IServerApplicationHost : IApplicationHost
{
SystemInfo GetSystemInfo();
}
}

View File

@ -1,5 +1,4 @@
using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Configuration;
using MediaBrowser.Common.Kernel;
namespace MediaBrowser.Controller namespace MediaBrowser.Controller
{ {

View File

@ -1,5 +1,4 @@
using MediaBrowser.Common; using MediaBrowser.Common;
using MediaBrowser.Common.Kernel;
using MediaBrowser.Common.ScheduledTasks; using MediaBrowser.Common.ScheduledTasks;
using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Drawing; using MediaBrowser.Controller.Drawing;
@ -11,11 +10,9 @@ using MediaBrowser.Controller.MediaInfo;
using MediaBrowser.Controller.Persistence; using MediaBrowser.Controller.Persistence;
using MediaBrowser.Controller.Plugins; using MediaBrowser.Controller.Plugins;
using MediaBrowser.Controller.Providers; using MediaBrowser.Controller.Providers;
using MediaBrowser.Controller.Updates;
using MediaBrowser.Controller.Weather; using MediaBrowser.Controller.Weather;
using MediaBrowser.Model.Logging; using MediaBrowser.Model.Logging;
using MediaBrowser.Model.Serialization; using MediaBrowser.Model.Serialization;
using MediaBrowser.Model.System;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@ -27,7 +24,7 @@ namespace MediaBrowser.Controller
/// <summary> /// <summary>
/// Class Kernel /// Class Kernel
/// </summary> /// </summary>
public class Kernel : BaseKernel, IDisposable public class Kernel : IDisposable
{ {
/// <summary> /// <summary>
/// Gets the instance. /// Gets the instance.
@ -60,12 +57,25 @@ namespace MediaBrowser.Controller
public ProviderManager ProviderManager { get; private set; } public ProviderManager ProviderManager { get; private set; }
/// <summary> /// <summary>
/// Gets the kernel context. /// Gets the name of the web application that can be used for url building.
/// All api urls will be of the form {protocol}://{host}:{port}/{appname}/...
/// </summary> /// </summary>
/// <value>The kernel context.</value> /// <value>The name of the web application.</value>
public override KernelContext KernelContext public string WebApplicationName
{ {
get { return KernelContext.Server; } get { return "mediabrowser"; }
}
/// <summary>
/// Gets the HTTP server URL prefix.
/// </summary>
/// <value>The HTTP server URL prefix.</value>
public virtual string HttpServerUrlPrefix
{
get
{
return "http://+:" + _configurationManager.Configuration.HttpServerPortNumber + "/" + WebApplicationName + "/";
}
} }
/// <summary> /// <summary>
@ -145,7 +155,7 @@ namespace MediaBrowser.Controller
/// Gets the UDP server port number. /// Gets the UDP server port number.
/// </summary> /// </summary>
/// <value>The UDP server port number.</value> /// <value>The UDP server port number.</value>
public override int UdpServerPortNumber public int UdpServerPortNumber
{ {
get { return 7359; } get { return 7359; }
} }
@ -154,6 +164,7 @@ namespace MediaBrowser.Controller
private readonly IServerConfigurationManager _configurationManager; private readonly IServerConfigurationManager _configurationManager;
private readonly ILogManager _logManager; private readonly ILogManager _logManager;
private IApplicationHost ApplicationHost { get; set; }
/// <summary> /// <summary>
/// Creates a kernel based on a Data path, which is akin to our current programdata path /// Creates a kernel based on a Data path, which is akin to our current programdata path
@ -164,10 +175,10 @@ namespace MediaBrowser.Controller
/// <param name="configurationManager">The configuration manager.</param> /// <param name="configurationManager">The configuration manager.</param>
/// <exception cref="System.ArgumentNullException">isoManager</exception> /// <exception cref="System.ArgumentNullException">isoManager</exception>
public Kernel(IApplicationHost appHost, IXmlSerializer xmlSerializer, ILogManager logManager, IServerConfigurationManager configurationManager) public Kernel(IApplicationHost appHost, IXmlSerializer xmlSerializer, ILogManager logManager, IServerConfigurationManager configurationManager)
: base(appHost, logManager, configurationManager)
{ {
Instance = this; Instance = this;
ApplicationHost = appHost;
_configurationManager = configurationManager; _configurationManager = configurationManager;
_xmlSerializer = xmlSerializer; _xmlSerializer = xmlSerializer;
_logManager = logManager; _logManager = logManager;
@ -207,10 +218,8 @@ namespace MediaBrowser.Controller
/// Performs initializations that can be reloaded at anytime /// Performs initializations that can be reloaded at anytime
/// </summary> /// </summary>
/// <returns>Task.</returns> /// <returns>Task.</returns>
protected override async void ReloadInternal() public async Task Init()
{ {
base.ReloadInternal();
FindParts(); FindParts();
await LoadRepositories().ConfigureAwait(false); await LoadRepositories().ConfigureAwait(false);
@ -306,27 +315,8 @@ namespace MediaBrowser.Controller
{ {
DisposeFileSystemManager(); DisposeFileSystemManager();
FileSystemManager = new FileSystemManager(this, _logManager, ApplicationHost.Resolve<ITaskManager>(), ApplicationHost.Resolve<ILibraryManager>(), _configurationManager); FileSystemManager = new FileSystemManager(_logManager, ApplicationHost.Resolve<ITaskManager>(), ApplicationHost.Resolve<ILibraryManager>(), _configurationManager);
FileSystemManager.StartWatchers(); FileSystemManager.StartWatchers();
} }
/// <summary>
/// Gets the system info.
/// </summary>
/// <returns>SystemInfo.</returns>
public override SystemInfo GetSystemInfo()
{
var info = base.GetSystemInfo();
var installationManager = ApplicationHost.Resolve<IInstallationManager>();
if (installationManager != null)
{
info.InProgressInstallations = installationManager.CurrentInstallations.Select(i => i.Item1).ToArray();
info.CompletedInstallations = installationManager.CompletedInstallations.ToArray();
}
return info;
}
} }
} }

View File

@ -70,7 +70,6 @@
<Compile Include="..\SharedVersion.cs"> <Compile Include="..\SharedVersion.cs">
<Link>Properties\SharedVersion.cs</Link> <Link>Properties\SharedVersion.cs</Link>
</Compile> </Compile>
<Compile Include="BaseManager.cs" />
<Compile Include="Configuration\IServerConfigurationManager.cs" /> <Compile Include="Configuration\IServerConfigurationManager.cs" />
<Compile Include="Drawing\ImageExtensions.cs" /> <Compile Include="Drawing\ImageExtensions.cs" />
<Compile Include="Drawing\ImageHeader.cs" /> <Compile Include="Drawing\ImageHeader.cs" />
@ -105,6 +104,7 @@
<Compile Include="IO\FileSystem.cs" /> <Compile Include="IO\FileSystem.cs" />
<Compile Include="IO\FileSystemManager.cs" /> <Compile Include="IO\FileSystemManager.cs" />
<Compile Include="IO\NativeMethods.cs" /> <Compile Include="IO\NativeMethods.cs" />
<Compile Include="IServerApplicationHost.cs" />
<Compile Include="IServerApplicationPaths.cs" /> <Compile Include="IServerApplicationPaths.cs" />
<Compile Include="Library\ChildrenChangedEventArgs.cs" /> <Compile Include="Library\ChildrenChangedEventArgs.cs" />
<Compile Include="Library\DtoBuilder.cs" /> <Compile Include="Library\DtoBuilder.cs" />

View File

@ -18,7 +18,7 @@ namespace MediaBrowser.Controller.Providers
/// <summary> /// <summary>
/// Class ProviderManager /// Class ProviderManager
/// </summary> /// </summary>
public class ProviderManager : BaseManager<Kernel> public class ProviderManager : IDisposable
{ {
/// <summary> /// <summary>
/// The remote image cache /// The remote image cache
@ -43,6 +43,8 @@ namespace MediaBrowser.Controller.Providers
private IServerConfigurationManager ConfigurationManager { get; set; } private IServerConfigurationManager ConfigurationManager { get; set; }
private Kernel Kernel { get; set; }
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="ProviderManager" /> class. /// Initializes a new instance of the <see cref="ProviderManager" /> class.
/// </summary> /// </summary>
@ -50,9 +52,9 @@ namespace MediaBrowser.Controller.Providers
/// <param name="httpClient">The HTTP client.</param> /// <param name="httpClient">The HTTP client.</param>
/// <param name="logger">The logger.</param> /// <param name="logger">The logger.</param>
public ProviderManager(Kernel kernel, IHttpClient httpClient, ILogger logger, IServerConfigurationManager configurationManager) public ProviderManager(Kernel kernel, IHttpClient httpClient, ILogger logger, IServerConfigurationManager configurationManager)
: base(kernel)
{ {
_logger = logger; _logger = logger;
Kernel = kernel;
_httpClient = httpClient; _httpClient = httpClient;
ConfigurationManager = configurationManager; ConfigurationManager = configurationManager;
_remoteImageCache = new FileSystemRepository(ImagesDataPath); _remoteImageCache = new FileSystemRepository(ImagesDataPath);
@ -354,14 +356,17 @@ namespace MediaBrowser.Controller.Providers
/// Releases unmanaged and - optionally - managed resources. /// Releases unmanaged and - optionally - managed resources.
/// </summary> /// </summary>
/// <param name="dispose"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param> /// <param name="dispose"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
protected override void Dispose(bool dispose) protected virtual void Dispose(bool dispose)
{ {
if (dispose) if (dispose)
{ {
_remoteImageCache.Dispose(); _remoteImageCache.Dispose();
} }
}
base.Dispose(dispose); public void Dispose()
{
Dispose(true);
} }
} }
} }

View File

@ -18,20 +18,6 @@ namespace MediaBrowser.Model.Configuration
[ProtoMember(1)] [ProtoMember(1)]
public bool EnableDebugLevelLogging { get; set; } public bool EnableDebugLevelLogging { get; set; }
/// <summary>
/// Gets or sets a value indicating whether [enable HTTP level logging].
/// </summary>
/// <value><c>true</c> if [enable HTTP level logging]; otherwise, <c>false</c>.</value>
[ProtoMember(56)]
public bool EnableHttpLevelLogging { get; set; }
/// <summary>
/// Gets or sets the HTTP server port number.
/// </summary>
/// <value>The HTTP server port number.</value>
[ProtoMember(2)]
public int HttpServerPortNumber { get; set; }
/// <summary> /// <summary>
/// Enable automatically and silently updating of the application /// Enable automatically and silently updating of the application
/// </summary> /// </summary>
@ -59,13 +45,6 @@ namespace MediaBrowser.Model.Configuration
[ProtoMember(58)] [ProtoMember(58)]
public bool RunAtStartup { get; set; } public bool RunAtStartup { get; set; }
/// <summary>
/// Gets or sets the legacy web socket port number.
/// </summary>
/// <value>The legacy web socket port number.</value>
[ProtoMember(59)]
public int LegacyWebSocketPortNumber { get; set; }
/// <summary> /// <summary>
/// Gets or sets a value indicating whether this instance is first run. /// Gets or sets a value indicating whether this instance is first run.
/// </summary> /// </summary>
@ -78,14 +57,9 @@ namespace MediaBrowser.Model.Configuration
/// </summary> /// </summary>
public BaseApplicationConfiguration() public BaseApplicationConfiguration()
{ {
HttpServerPortNumber = 8096;
LegacyWebSocketPortNumber = 8945;
EnableAutoUpdate = true; EnableAutoUpdate = true;
LogFileRetentionDays = 14; LogFileRetentionDays = 14;
EnableHttpLevelLogging = true;
#if (DEBUG) #if (DEBUG)
EnableDebugLevelLogging = true; EnableDebugLevelLogging = true;
#endif #endif

View File

@ -12,6 +12,27 @@ namespace MediaBrowser.Model.Configuration
[ProtoContract] [ProtoContract]
public class ServerConfiguration : BaseApplicationConfiguration public class ServerConfiguration : BaseApplicationConfiguration
{ {
/// <summary>
/// Gets or sets a value indicating whether [enable HTTP level logging].
/// </summary>
/// <value><c>true</c> if [enable HTTP level logging]; otherwise, <c>false</c>.</value>
[ProtoMember(56)]
public bool EnableHttpLevelLogging { get; set; }
/// <summary>
/// Gets or sets the HTTP server port number.
/// </summary>
/// <value>The HTTP server port number.</value>
[ProtoMember(2)]
public int HttpServerPortNumber { get; set; }
/// <summary>
/// Gets or sets the legacy web socket port number.
/// </summary>
/// <value>The legacy web socket port number.</value>
[ProtoMember(59)]
public int LegacyWebSocketPortNumber { get; set; }
/// <summary> /// <summary>
/// Gets or sets a value indicating whether [enable internet providers]. /// Gets or sets a value indicating whether [enable internet providers].
/// </summary> /// </summary>
@ -255,6 +276,10 @@ namespace MediaBrowser.Model.Configuration
public ServerConfiguration() public ServerConfiguration()
: base() : base()
{ {
HttpServerPortNumber = 8096;
LegacyWebSocketPortNumber = 8945;
EnableHttpLevelLogging = true;
#if (DEBUG) #if (DEBUG)
EnableDeveloperTools = true; EnableDeveloperTools = true;
#endif #endif

View File

@ -14,7 +14,7 @@ using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using MimeTypes = MediaBrowser.Common.Net.MimeTypes; using MimeTypes = MediaBrowser.Common.Net.MimeTypes;
namespace MediaBrowser.Common.Implementations.HttpServer namespace MediaBrowser.Server.Implementations.HttpServer
{ {
/// <summary> /// <summary>
/// Class BaseRestService /// Class BaseRestService

View File

@ -1,6 +1,6 @@
using Funq; using Funq;
using MediaBrowser.Common;
using MediaBrowser.Common.Extensions; using MediaBrowser.Common.Extensions;
using MediaBrowser.Common.Kernel;
using MediaBrowser.Common.Net; using MediaBrowser.Common.Net;
using MediaBrowser.Model.Logging; using MediaBrowser.Model.Logging;
using MediaBrowser.Model.Serialization; using MediaBrowser.Model.Serialization;
@ -26,7 +26,7 @@ using System.Reflection;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace MediaBrowser.Common.Implementations.HttpServer namespace MediaBrowser.Server.Implementations.HttpServer
{ {
/// <summary> /// <summary>
/// Class HttpServer /// Class HttpServer

View File

@ -7,7 +7,7 @@ using System.Threading.Tasks;
using WebSocketMessageType = MediaBrowser.Common.Net.WebSocketMessageType; using WebSocketMessageType = MediaBrowser.Common.Net.WebSocketMessageType;
using WebSocketState = MediaBrowser.Common.Net.WebSocketState; using WebSocketState = MediaBrowser.Common.Net.WebSocketState;
namespace MediaBrowser.Common.Implementations.HttpServer namespace MediaBrowser.Server.Implementations.HttpServer
{ {
/// <summary> /// <summary>
/// Class NativeWebSocket /// Class NativeWebSocket

View File

@ -1,9 +1,9 @@
using MediaBrowser.Common.Kernel; using MediaBrowser.Common;
using MediaBrowser.Common.Net; using MediaBrowser.Common.Net;
using MediaBrowser.Model.Logging; using MediaBrowser.Model.Logging;
using MediaBrowser.Model.Serialization; using MediaBrowser.Model.Serialization;
namespace MediaBrowser.Common.Implementations.HttpServer namespace MediaBrowser.Server.Implementations.HttpServer
{ {
/// <summary> /// <summary>
/// Class ServerFactory /// Class ServerFactory

View File

@ -2,7 +2,7 @@
using System.IO; using System.IO;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace MediaBrowser.Common.Implementations.HttpServer namespace MediaBrowser.Server.Implementations.HttpServer
{ {
/// <summary> /// <summary>
/// Class StreamWriter /// Class StreamWriter

View File

@ -2,7 +2,7 @@
using System.Diagnostics; using System.Diagnostics;
using System.IO; using System.IO;
namespace MediaBrowser.Common.Implementations.HttpServer namespace MediaBrowser.Server.Implementations.HttpServer
{ {
/// <summary> /// <summary>
/// Class GetDashboardResource /// Class GetDashboardResource

View File

@ -32,6 +32,9 @@
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="Alchemy">
<HintPath>..\packages\Alchemy.2.2.1\lib\net40\Alchemy.dll</HintPath>
</Reference>
<Reference Include="BdInfo, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="BdInfo, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\MediaBrowser.BdInfo.1.0.0.2\lib\net45\BdInfo.dll</HintPath> <HintPath>..\packages\MediaBrowser.BdInfo.1.0.0.2\lib\net45\BdInfo.dll</HintPath>
@ -39,6 +42,39 @@
<Reference Include="MoreLinq"> <Reference Include="MoreLinq">
<HintPath>..\packages\morelinq.1.0.15631-beta\lib\net35\MoreLinq.dll</HintPath> <HintPath>..\packages\morelinq.1.0.15631-beta\lib\net35\MoreLinq.dll</HintPath>
</Reference> </Reference>
<Reference Include="NLog">
<HintPath>..\packages\NLog.2.0.0.2000\lib\net40\NLog.dll</HintPath>
</Reference>
<Reference Include="ServiceStack">
<HintPath>..\packages\ServiceStack.3.9.38\lib\net35\ServiceStack.dll</HintPath>
</Reference>
<Reference Include="ServiceStack.Api.Swagger">
<HintPath>..\packages\ServiceStack.Api.Swagger.3.9.38\lib\net35\ServiceStack.Api.Swagger.dll</HintPath>
</Reference>
<Reference Include="ServiceStack.Common">
<HintPath>..\packages\ServiceStack.Common.3.9.38\lib\net35\ServiceStack.Common.dll</HintPath>
</Reference>
<Reference Include="ServiceStack.Interfaces">
<HintPath>..\packages\ServiceStack.Common.3.9.38\lib\net35\ServiceStack.Interfaces.dll</HintPath>
</Reference>
<Reference Include="ServiceStack.Logging.NLog">
<HintPath>..\packages\ServiceStack.Logging.NLog.1.0.6.0\lib\net35\ServiceStack.Logging.NLog.dll</HintPath>
</Reference>
<Reference Include="ServiceStack.OrmLite">
<HintPath>..\packages\ServiceStack.OrmLite.SqlServer.3.9.39\lib\ServiceStack.OrmLite.dll</HintPath>
</Reference>
<Reference Include="ServiceStack.OrmLite.SqlServer">
<HintPath>..\packages\ServiceStack.OrmLite.SqlServer.3.9.39\lib\ServiceStack.OrmLite.SqlServer.dll</HintPath>
</Reference>
<Reference Include="ServiceStack.Redis">
<HintPath>..\packages\ServiceStack.Redis.3.9.38\lib\net35\ServiceStack.Redis.dll</HintPath>
</Reference>
<Reference Include="ServiceStack.ServiceInterface">
<HintPath>..\packages\ServiceStack.3.9.38\lib\net35\ServiceStack.ServiceInterface.dll</HintPath>
</Reference>
<Reference Include="ServiceStack.Text">
<HintPath>..\packages\ServiceStack.Text.3.9.38\lib\net35\ServiceStack.Text.dll</HintPath>
</Reference>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Core" /> <Reference Include="System.Core" />
<Reference Include="System.Data.SQLite"> <Reference Include="System.Data.SQLite">
@ -47,6 +83,16 @@
<Reference Include="System.Data.SQLite.Linq"> <Reference Include="System.Data.SQLite.Linq">
<HintPath>..\packages\System.Data.SQLite.1.0.84.0\lib\net45\System.Data.SQLite.Linq.dll</HintPath> <HintPath>..\packages\System.Data.SQLite.1.0.84.0\lib\net45\System.Data.SQLite.Linq.dll</HintPath>
</Reference> </Reference>
<Reference Include="System.Reactive.Core">
<HintPath>..\packages\Rx-Core.2.1.30214.0\lib\Net45\System.Reactive.Core.dll</HintPath>
</Reference>
<Reference Include="System.Reactive.Interfaces">
<HintPath>..\packages\Rx-Interfaces.2.1.30214.0\lib\Net45\System.Reactive.Interfaces.dll</HintPath>
</Reference>
<Reference Include="System.Reactive.Linq">
<HintPath>..\packages\Rx-Linq.2.1.30214.0\lib\Net45\System.Reactive.Linq.dll</HintPath>
</Reference>
<Reference Include="System.Web" />
<Reference Include="System.Xml.Linq" /> <Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" /> <Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" /> <Reference Include="Microsoft.CSharp" />
@ -59,6 +105,12 @@
</Compile> </Compile>
<Compile Include="BdInfo\BdInfoExaminer.cs" /> <Compile Include="BdInfo\BdInfoExaminer.cs" />
<Compile Include="Configuration\ServerConfigurationManager.cs" /> <Compile Include="Configuration\ServerConfigurationManager.cs" />
<Compile Include="HttpServer\BaseRestService.cs" />
<Compile Include="HttpServer\HttpServer.cs" />
<Compile Include="HttpServer\NativeWebSocket.cs" />
<Compile Include="HttpServer\ServerFactory.cs" />
<Compile Include="HttpServer\StreamWriter.cs" />
<Compile Include="HttpServer\SwaggerService.cs" />
<Compile Include="Library\CoreResolutionIgnoreRule.cs" /> <Compile Include="Library\CoreResolutionIgnoreRule.cs" />
<Compile Include="Library\LibraryManager.cs" /> <Compile Include="Library\LibraryManager.cs" />
<Compile Include="Library\ResolverHelper.cs" /> <Compile Include="Library\ResolverHelper.cs" />
@ -82,13 +134,18 @@
<Compile Include="ScheduledTasks\ImageCleanupTask.cs" /> <Compile Include="ScheduledTasks\ImageCleanupTask.cs" />
<Compile Include="ScheduledTasks\PluginUpdateTask.cs" /> <Compile Include="ScheduledTasks\PluginUpdateTask.cs" />
<Compile Include="ServerApplicationPaths.cs" /> <Compile Include="ServerApplicationPaths.cs" />
<Compile Include="ServerManager\ServerManager.cs" />
<Compile Include="ServerManager\WebSocketConnection.cs" />
<Compile Include="Sqlite\SQLiteDisplayPreferencesRepository.cs" /> <Compile Include="Sqlite\SQLiteDisplayPreferencesRepository.cs" />
<Compile Include="Sqlite\SQLiteExtensions.cs" /> <Compile Include="Sqlite\SQLiteExtensions.cs" />
<Compile Include="Sqlite\SQLiteItemRepository.cs" /> <Compile Include="Sqlite\SQLiteItemRepository.cs" />
<Compile Include="Sqlite\SQLiteRepository.cs" /> <Compile Include="Sqlite\SQLiteRepository.cs" />
<Compile Include="Sqlite\SQLiteUserDataRepository.cs" /> <Compile Include="Sqlite\SQLiteUserDataRepository.cs" />
<Compile Include="Sqlite\SQLiteUserRepository.cs" /> <Compile Include="Sqlite\SQLiteUserRepository.cs" />
<Compile Include="Udp\UdpServer.cs" />
<Compile Include="Updates\InstallationManager.cs" /> <Compile Include="Updates\InstallationManager.cs" />
<Compile Include="WebSocket\AlchemyServer.cs" />
<Compile Include="WebSocket\AlchemyWebSocket.cs" />
<Compile Include="WorldWeatherOnline\WeatherProvider.cs" /> <Compile Include="WorldWeatherOnline\WeatherProvider.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@ -110,6 +167,49 @@
</ProjectReference> </ProjectReference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Content Include="README.txt" />
<Content Include="swagger-ui\css\screen.css">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="swagger-ui\images\pet_store_api.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="swagger-ui\images\wordnik_api.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="swagger-ui\index.html">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="swagger-ui\lib\backbone-min.js">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="swagger-ui\lib\handlebars.runtime-1.0.0.beta.6.js">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="swagger-ui\lib\jquery.ba-bbq.min.js">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="swagger-ui\lib\jquery.min.js">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="swagger-ui\lib\jquery.slideto.min.js">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="swagger-ui\lib\jquery.wiggle.min.js">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="swagger-ui\lib\swagger.js">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="swagger-ui\lib\underscore-min.js">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="swagger-ui\swagger-ui.js">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="swagger-ui\swagger-ui.min.js">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="x64\SQLite.Interop.dll"> <Content Include="x64\SQLite.Interop.dll">
<CopyToOutputDirectory>Always</CopyToOutputDirectory> <CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content> </Content>
@ -119,6 +219,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="packages.config" /> <None Include="packages.config" />
<EmbeddedResource Include="ServerManager\RegisterServer.bat" />
</ItemGroup> </ItemGroup>
<ItemGroup /> <ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

View File

@ -1,6 +1,7 @@
using MediaBrowser.Common.Configuration; using MediaBrowser.Common;
using MediaBrowser.Common.Kernel;
using MediaBrowser.Common.Net; using MediaBrowser.Common.Net;
using MediaBrowser.Controller;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Model.Logging; using MediaBrowser.Model.Logging;
using MediaBrowser.Model.Serialization; using MediaBrowser.Model.Serialization;
using System; using System;
@ -15,7 +16,7 @@ using System.Text;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace MediaBrowser.Common.Implementations.ServerManager namespace MediaBrowser.Server.Implementations.ServerManager
{ {
/// <summary> /// <summary>
/// Manages the Http Server, Udp Server and WebSocket connections /// Manages the Http Server, Udp Server and WebSocket connections
@ -73,16 +74,11 @@ namespace MediaBrowser.Common.Implementations.ServerManager
/// </summary> /// </summary>
private readonly IApplicationHost _applicationHost; private readonly IApplicationHost _applicationHost;
/// <summary>
/// The _kernel
/// </summary>
private readonly IKernel _kernel;
/// <summary> /// <summary>
/// Gets or sets the configuration manager. /// Gets or sets the configuration manager.
/// </summary> /// </summary>
/// <value>The configuration manager.</value> /// <value>The configuration manager.</value>
private IConfigurationManager ConfigurationManager { get; set; } private IServerConfigurationManager ConfigurationManager { get; set; }
/// <summary> /// <summary>
/// Gets a value indicating whether [supports web socket]. /// Gets a value indicating whether [supports web socket].
@ -99,7 +95,7 @@ namespace MediaBrowser.Common.Implementations.ServerManager
/// <value>The web socket port number.</value> /// <value>The web socket port number.</value>
public int WebSocketPortNumber public int WebSocketPortNumber
{ {
get { return SupportsNativeWebSocket ? ConfigurationManager.CommonConfiguration.HttpServerPortNumber : ConfigurationManager.CommonConfiguration.LegacyWebSocketPortNumber; } get { return SupportsNativeWebSocket ? ConfigurationManager.Configuration.HttpServerPortNumber : ConfigurationManager.Configuration.LegacyWebSocketPortNumber; }
} }
/// <summary> /// <summary>
@ -108,26 +104,23 @@ namespace MediaBrowser.Common.Implementations.ServerManager
/// <value>The web socket listeners.</value> /// <value>The web socket listeners.</value>
private readonly List<IWebSocketListener> _webSocketListeners = new List<IWebSocketListener>(); private readonly List<IWebSocketListener> _webSocketListeners = new List<IWebSocketListener>();
private Kernel _kernel;
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="ServerManager" /> class. /// Initializes a new instance of the <see cref="ServerManager" /> class.
/// </summary> /// </summary>
/// <param name="applicationHost">The application host.</param> /// <param name="applicationHost">The application host.</param>
/// <param name="kernel">The kernel.</param>
/// <param name="networkManager">The network manager.</param> /// <param name="networkManager">The network manager.</param>
/// <param name="jsonSerializer">The json serializer.</param> /// <param name="jsonSerializer">The json serializer.</param>
/// <param name="logger">The logger.</param> /// <param name="logger">The logger.</param>
/// <param name="configurationManager">The configuration manager.</param> /// <param name="configurationManager">The configuration manager.</param>
/// <exception cref="System.ArgumentNullException">applicationHost</exception> /// <exception cref="System.ArgumentNullException">applicationHost</exception>
public ServerManager(IApplicationHost applicationHost, IKernel kernel, INetworkManager networkManager, IJsonSerializer jsonSerializer, ILogger logger, IConfigurationManager configurationManager) public ServerManager(IApplicationHost applicationHost, INetworkManager networkManager, IJsonSerializer jsonSerializer, ILogger logger, IServerConfigurationManager configurationManager, Kernel kernel)
{ {
if (applicationHost == null) if (applicationHost == null)
{ {
throw new ArgumentNullException("applicationHost"); throw new ArgumentNullException("applicationHost");
} }
if (kernel == null)
{
throw new ArgumentNullException("kernel");
}
if (networkManager == null) if (networkManager == null)
{ {
throw new ArgumentNullException("networkManager"); throw new ArgumentNullException("networkManager");
@ -143,10 +136,10 @@ namespace MediaBrowser.Common.Implementations.ServerManager
_logger = logger; _logger = logger;
_jsonSerializer = jsonSerializer; _jsonSerializer = jsonSerializer;
_kernel = kernel;
_applicationHost = applicationHost; _applicationHost = applicationHost;
_networkManager = networkManager; _networkManager = networkManager;
ConfigurationManager = configurationManager; ConfigurationManager = configurationManager;
_kernel = kernel;
} }
/// <summary> /// <summary>
@ -175,17 +168,11 @@ namespace MediaBrowser.Common.Implementations.ServerManager
/// </summary> /// </summary>
private void ReloadExternalWebSocketServer() private void ReloadExternalWebSocketServer()
{ {
// Avoid windows firewall prompts in the ui
if (_kernel.KernelContext != KernelContext.Server)
{
return;
}
DisposeExternalWebSocketServer(); DisposeExternalWebSocketServer();
ExternalWebSocketServer = _applicationHost.Resolve<IWebSocketServer>(); ExternalWebSocketServer = _applicationHost.Resolve<IWebSocketServer>();
ExternalWebSocketServer.Start(ConfigurationManager.CommonConfiguration.LegacyWebSocketPortNumber); ExternalWebSocketServer.Start(ConfigurationManager.Configuration.LegacyWebSocketPortNumber);
ExternalWebSocketServer.WebSocketConnected += HttpServer_WebSocketConnected; ExternalWebSocketServer.WebSocketConnected += HttpServer_WebSocketConnected;
} }
@ -208,7 +195,7 @@ namespace MediaBrowser.Common.Implementations.ServerManager
try try
{ {
HttpServer = _applicationHost.Resolve<IHttpServer>(); HttpServer = _applicationHost.Resolve<IHttpServer>();
HttpServer.EnableHttpRequestLogging = ConfigurationManager.CommonConfiguration.EnableHttpLevelLogging; HttpServer.EnableHttpRequestLogging = ConfigurationManager.Configuration.EnableHttpLevelLogging;
HttpServer.Start(_kernel.HttpServerUrlPrefix); HttpServer.Start(_kernel.HttpServerUrlPrefix);
} }
catch (HttpListenerException ex) catch (HttpListenerException ex)
@ -275,12 +262,6 @@ namespace MediaBrowser.Common.Implementations.ServerManager
return; return;
} }
// Avoid windows firewall prompts in the ui
if (_kernel.KernelContext != KernelContext.Server)
{
return;
}
DisposeUdpServer(); DisposeUdpServer();
try try
@ -305,7 +286,9 @@ namespace MediaBrowser.Common.Implementations.ServerManager
/// <param name="e">The <see cref="UdpMessageReceivedEventArgs" /> instance containing the event data.</param> /// <param name="e">The <see cref="UdpMessageReceivedEventArgs" /> instance containing the event data.</param>
async void UdpServer_MessageReceived(object sender, UdpMessageReceivedEventArgs e) 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); var expectedMessageBytes = Encoding.UTF8.GetBytes(expectedMessage);
if (expectedMessageBytes.SequenceEqual(e.Bytes)) if (expectedMessageBytes.SequenceEqual(e.Bytes))
@ -313,7 +296,7 @@ namespace MediaBrowser.Common.Implementations.ServerManager
_logger.Info("Received UDP server request from " + e.RemoteEndPoint); _logger.Info("Received UDP server request from " + e.RemoteEndPoint);
// Send a response back with our ip address and port // 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); 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"); var tmpFile = Path.Combine(ConfigurationManager.CommonApplicationPaths.TempDirectory, Guid.NewGuid() + ".bat");
// Extract the bat file // 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)) using (var fileStream = File.Create(tmpFile))
{ {
@ -459,10 +442,10 @@ namespace MediaBrowser.Common.Implementations.ServerManager
{ {
FileName = tmpFile, 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.HttpServerUrlPrefix,
_kernel.UdpServerPortNumber, _kernel.UdpServerPortNumber,
ConfigurationManager.CommonConfiguration.LegacyWebSocketPortNumber), ConfigurationManager.Configuration.LegacyWebSocketPortNumber),
CreateNoWindow = true, CreateNoWindow = true,
WindowStyle = ProcessWindowStyle.Hidden, WindowStyle = ProcessWindowStyle.Hidden,
@ -517,14 +500,14 @@ namespace MediaBrowser.Common.Implementations.ServerManager
/// <exception cref="System.NotImplementedException"></exception> /// <exception cref="System.NotImplementedException"></exception>
void _kernel_ConfigurationUpdated(object sender, EventArgs e) 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)) if (!string.Equals(HttpServer.UrlPrefix, _kernel.HttpServerUrlPrefix, StringComparison.OrdinalIgnoreCase))
{ {
ReloadHttpServer(); ReloadHttpServer();
} }
if (!SupportsNativeWebSocket && ExternalWebSocketServer != null && ExternalWebSocketServer.Port != ConfigurationManager.CommonConfiguration.LegacyWebSocketPortNumber) if (!SupportsNativeWebSocket && ExternalWebSocketServer != null && ExternalWebSocketServer.Port != ConfigurationManager.Configuration.LegacyWebSocketPortNumber)
{ {
ReloadExternalWebSocketServer(); ReloadExternalWebSocketServer();
} }

View File

@ -6,7 +6,7 @@ using System.IO;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace MediaBrowser.Common.Implementations.ServerManager namespace MediaBrowser.Server.Implementations.ServerManager
{ {
/// <summary> /// <summary>
/// Class WebSocketConnection /// Class WebSocketConnection

View File

@ -1,5 +1,4 @@
using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Configuration;
using MediaBrowser.Common.Kernel;
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Persistence; using MediaBrowser.Controller.Persistence;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;

View File

@ -1,5 +1,4 @@
using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Configuration;
using MediaBrowser.Common.Kernel;
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Persistence; using MediaBrowser.Controller.Persistence;
using MediaBrowser.Model.Logging; using MediaBrowser.Model.Logging;

View File

@ -1,5 +1,4 @@
using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Configuration;
using MediaBrowser.Common.Kernel;
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Persistence; using MediaBrowser.Controller.Persistence;
using MediaBrowser.Model.Logging; using MediaBrowser.Model.Logging;

View File

@ -1,5 +1,4 @@
using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Configuration;
using MediaBrowser.Common.Kernel;
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Persistence; using MediaBrowser.Controller.Persistence;
using MediaBrowser.Model.Logging; using MediaBrowser.Model.Logging;

View File

@ -8,7 +8,7 @@ using System.Reactive.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace MediaBrowser.Common.Implementations.Udp namespace MediaBrowser.Server.Implementations.Udp
{ {
/// <summary> /// <summary>
/// Provides a Udp Server /// Provides a Udp Server

View File

@ -1,11 +1,9 @@
using MediaBrowser.Common; using MediaBrowser.Common;
using MediaBrowser.Common.Events; using MediaBrowser.Common.Events;
using MediaBrowser.Common.Kernel;
using MediaBrowser.Common.Net; using MediaBrowser.Common.Net;
using MediaBrowser.Common.Plugins; using MediaBrowser.Common.Plugins;
using MediaBrowser.Common.Progress; using MediaBrowser.Common.Progress;
using MediaBrowser.Common.Updates; using MediaBrowser.Common.Updates;
using MediaBrowser.Controller;
using MediaBrowser.Controller.Updates; using MediaBrowser.Controller.Updates;
using MediaBrowser.Model.Logging; using MediaBrowser.Model.Logging;
using MediaBrowser.Model.Serialization; using MediaBrowser.Model.Serialization;
@ -72,7 +70,7 @@ namespace MediaBrowser.Server.Implementations.Updates
EventHelper.QueueEventIfNotNull(PluginUpdated, this, new GenericEventArgs<Tuple<IPlugin, PackageVersionInfo>> { Argument = new Tuple<IPlugin, PackageVersionInfo>(plugin, newVersion) }, _logger); EventHelper.QueueEventIfNotNull(PluginUpdated, this, new GenericEventArgs<Tuple<IPlugin, PackageVersionInfo>> { Argument = new Tuple<IPlugin, PackageVersionInfo>(plugin, newVersion) }, _logger);
Kernel.NotifyPendingRestart(); ApplicationHost.NotifyPendingRestart();
} }
#endregion #endregion
@ -91,7 +89,7 @@ namespace MediaBrowser.Server.Implementations.Updates
EventHelper.QueueEventIfNotNull(PluginInstalled, this, new GenericEventArgs<PackageVersionInfo> { Argument = package }, _logger); EventHelper.QueueEventIfNotNull(PluginInstalled, this, new GenericEventArgs<PackageVersionInfo> { Argument = package }, _logger);
Kernel.NotifyPendingRestart(); ApplicationHost.NotifyPendingRestart();
} }
#endregion #endregion
@ -123,19 +121,16 @@ namespace MediaBrowser.Server.Implementations.Updates
/// <value>The application host.</value> /// <value>The application host.</value>
protected IApplicationHost ApplicationHost { get; private set; } protected IApplicationHost ApplicationHost { get; private set; }
private IKernel Kernel { get; set; }
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="InstallationManager" /> class. /// Initializes a new instance of the <see cref="InstallationManager" /> class.
/// </summary> /// </summary>
/// <param name="kernel">The kernel.</param>
/// <param name="httpClient">The HTTP client.</param> /// <param name="httpClient">The HTTP client.</param>
/// <param name="packageManager">The package manager.</param> /// <param name="packageManager">The package manager.</param>
/// <param name="jsonSerializer">The json serializer.</param> /// <param name="jsonSerializer">The json serializer.</param>
/// <param name="logger">The logger.</param> /// <param name="logger">The logger.</param>
/// <param name="appHost">The app host.</param> /// <param name="appHost">The app host.</param>
/// <exception cref="System.ArgumentNullException">zipClient</exception> /// <exception cref="System.ArgumentNullException">zipClient</exception>
public InstallationManager(IKernel kernel, IHttpClient httpClient, IPackageManager packageManager, IJsonSerializer jsonSerializer, ILogger logger, IApplicationHost appHost) public InstallationManager(IHttpClient httpClient, IPackageManager packageManager, IJsonSerializer jsonSerializer, ILogger logger, IApplicationHost appHost)
{ {
if (packageManager == null) if (packageManager == null)
{ {
@ -161,7 +156,6 @@ namespace MediaBrowser.Server.Implementations.Updates
ApplicationHost = appHost; ApplicationHost = appHost;
_packageManager = packageManager; _packageManager = packageManager;
_logger = logger; _logger = logger;
Kernel = kernel;
} }
/// <summary> /// <summary>
@ -454,7 +448,7 @@ namespace MediaBrowser.Server.Implementations.Updates
OnPluginUninstalled(plugin); OnPluginUninstalled(plugin);
Kernel.NotifyPendingRestart(); ApplicationHost.NotifyPendingRestart();
} }
/// <summary> /// <summary>

View File

@ -5,7 +5,7 @@ using MediaBrowser.Model.Logging;
using System; using System;
using System.Net; using System.Net;
namespace MediaBrowser.Common.Implementations.WebSocket namespace MediaBrowser.Server.Implementations.WebSocket
{ {
/// <summary> /// <summary>
/// Class AlchemyServer /// Class AlchemyServer

View File

@ -6,7 +6,7 @@ using System.Text;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace MediaBrowser.Common.Implementations.WebSocket namespace MediaBrowser.Server.Implementations.WebSocket
{ {
/// <summary> /// <summary>
/// Class AlchemyWebSocket /// Class AlchemyWebSocket

View File

@ -1,6 +1,18 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="Alchemy" version="2.2.1" targetFramework="net45" />
<package id="MediaBrowser.BdInfo" version="1.0.0.2" targetFramework="net45" /> <package id="MediaBrowser.BdInfo" version="1.0.0.2" targetFramework="net45" />
<package id="morelinq" version="1.0.15631-beta" targetFramework="net45" /> <package id="morelinq" version="1.0.15631-beta" targetFramework="net45" />
<package id="NLog" version="2.0.0.2000" targetFramework="net45" />
<package id="Rx-Core" version="2.1.30214.0" targetFramework="net45" />
<package id="Rx-Interfaces" version="2.1.30214.0" targetFramework="net45" />
<package id="Rx-Linq" version="2.1.30214.0" targetFramework="net45" />
<package id="ServiceStack" version="3.9.38" targetFramework="net45" />
<package id="ServiceStack.Api.Swagger" version="3.9.38" targetFramework="net45" />
<package id="ServiceStack.Common" version="3.9.38" targetFramework="net45" />
<package id="ServiceStack.Logging.NLog" version="1.0.6.0" targetFramework="net45" />
<package id="ServiceStack.OrmLite.SqlServer" version="3.9.39" targetFramework="net45" />
<package id="ServiceStack.Redis" version="3.9.38" targetFramework="net45" />
<package id="ServiceStack.Text" version="3.9.38" targetFramework="net45" />
<package id="System.Data.SQLite" version="1.0.84.0" targetFramework="net45" /> <package id="System.Data.SQLite" version="1.0.84.0" targetFramework="net45" />
</packages> </packages>

View File

@ -1,18 +1,17 @@
using System.IO; using MediaBrowser.Common.Configuration;
using MediaBrowser.Common.Configuration;
using MediaBrowser.Common.Constants; using MediaBrowser.Common.Constants;
using MediaBrowser.Common.Kernel; using MediaBrowser.Common.Implementations.Updates;
using MediaBrowser.Common.Updates;
using MediaBrowser.Controller; using MediaBrowser.Controller;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
using MediaBrowser.Model.Logging; using MediaBrowser.Model.Logging;
using MediaBrowser.Server.Implementations; using MediaBrowser.Server.Implementations;
using Microsoft.Win32; using Microsoft.Win32;
using System; using System;
using System.Diagnostics; using System.Diagnostics;
using System.IO;
using System.Net.Cache; using System.Net.Cache;
using System.Threading; using System.Threading;
using System.Threading.Tasks;
using System.Windows; using System.Windows;
using System.Windows.Controls; using System.Windows.Controls;
using System.Windows.Media; using System.Windows.Media;
@ -209,9 +208,9 @@ namespace MediaBrowser.ServerApplication
/// Opens the dashboard page. /// Opens the dashboard page.
/// </summary> /// </summary>
/// <param name="page">The page.</param> /// <param name="page">The page.</param>
public static void OpenDashboardPage(string page, User loggedInUser, IConfigurationManager configurationManager) public static void OpenDashboardPage(string page, User loggedInUser, IServerConfigurationManager configurationManager)
{ {
var url = "http://localhost:" + configurationManager.CommonConfiguration.HttpServerPortNumber + "/" + var url = "http://localhost:" + configurationManager.Configuration.HttpServerPortNumber + "/" +
Kernel.Instance.WebApplicationName + "/dashboard/" + page; Kernel.Instance.WebApplicationName + "/dashboard/" + page;
if (loggedInUser != null) if (loggedInUser != null)

View File

@ -2,12 +2,11 @@
using MediaBrowser.Common; using MediaBrowser.Common;
using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Configuration;
using MediaBrowser.Common.Constants; using MediaBrowser.Common.Constants;
using MediaBrowser.Common.Events;
using MediaBrowser.Common.Implementations; using MediaBrowser.Common.Implementations;
using MediaBrowser.Common.Implementations.HttpServer;
using MediaBrowser.Common.Implementations.Logging;
using MediaBrowser.Common.Implementations.ScheduledTasks; using MediaBrowser.Common.Implementations.ScheduledTasks;
using MediaBrowser.Common.IO; using MediaBrowser.Common.IO;
using MediaBrowser.Common.Kernel; using MediaBrowser.Common.Net;
using MediaBrowser.Common.Updates; using MediaBrowser.Common.Updates;
using MediaBrowser.Controller; using MediaBrowser.Controller;
using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Configuration;
@ -17,15 +16,18 @@ using MediaBrowser.Controller.Resolvers;
using MediaBrowser.Controller.Updates; using MediaBrowser.Controller.Updates;
using MediaBrowser.IsoMounter; using MediaBrowser.IsoMounter;
using MediaBrowser.Model.IO; using MediaBrowser.Model.IO;
using MediaBrowser.Model.Logging;
using MediaBrowser.Model.MediaInfo; using MediaBrowser.Model.MediaInfo;
using MediaBrowser.Model.System; using MediaBrowser.Model.System;
using MediaBrowser.Model.Updates; using MediaBrowser.Model.Updates;
using MediaBrowser.Server.Implementations; using MediaBrowser.Server.Implementations;
using MediaBrowser.Server.Implementations.BdInfo; using MediaBrowser.Server.Implementations.BdInfo;
using MediaBrowser.Server.Implementations.Configuration; using MediaBrowser.Server.Implementations.Configuration;
using MediaBrowser.Server.Implementations.HttpServer;
using MediaBrowser.Server.Implementations.Library; using MediaBrowser.Server.Implementations.Library;
using MediaBrowser.Server.Implementations.ServerManager;
using MediaBrowser.Server.Implementations.Udp;
using MediaBrowser.Server.Implementations.Updates; using MediaBrowser.Server.Implementations.Updates;
using MediaBrowser.Server.Implementations.WebSocket;
using MediaBrowser.ServerApplication.Implementations; using MediaBrowser.ServerApplication.Implementations;
using MediaBrowser.WebDashboard.Api; using MediaBrowser.WebDashboard.Api;
using System; using System;
@ -41,16 +43,13 @@ namespace MediaBrowser.ServerApplication
/// <summary> /// <summary>
/// Class CompositionRoot /// Class CompositionRoot
/// </summary> /// </summary>
public class ApplicationHost : BaseApplicationHost<ServerApplicationPaths> public class ApplicationHost : BaseApplicationHost<ServerApplicationPaths>, IServerApplicationHost
{ {
/// <summary> /// <summary>
/// Gets the server kernel. /// Gets the server kernel.
/// </summary> /// </summary>
/// <value>The server kernel.</value> /// <value>The server kernel.</value>
protected Kernel ServerKernel protected Kernel ServerKernel { get; set; }
{
get { return (Kernel)Kernel; }
}
/// <summary> /// <summary>
/// Gets the server configuration manager. /// Gets the server configuration manager.
@ -61,15 +60,6 @@ namespace MediaBrowser.ServerApplication
get { return (IServerConfigurationManager)ConfigurationManager; } get { return (IServerConfigurationManager)ConfigurationManager; }
} }
/// <summary>
/// Gets the kernel.
/// </summary>
/// <returns>IKernel.</returns>
protected override IKernel GetKernel()
{
return new Kernel(this, XmlSerializer, LogManager, ServerConfigurationManager);
}
/// <summary> /// <summary>
/// Gets the name of the log file prefix. /// Gets the name of the log file prefix.
/// </summary> /// </summary>
@ -88,30 +78,50 @@ namespace MediaBrowser.ServerApplication
return new ServerConfigurationManager(ApplicationPaths, LogManager, XmlSerializer); return new ServerConfigurationManager(ApplicationPaths, LogManager, XmlSerializer);
} }
private IInstallationManager InstallationManager { get; set; }
private IServerManager ServerManager { get; set; }
public override async Task Init()
{
await base.Init().ConfigureAwait(false);
await ServerKernel.Init().ConfigureAwait(false);
}
/// <summary> /// <summary>
/// Registers resources that classes will depend on /// Registers resources that classes will depend on
/// </summary> /// </summary>
protected override async Task RegisterResources() protected override async Task RegisterResources()
{ {
ServerKernel = new Kernel(this, XmlSerializer, LogManager, ServerConfigurationManager);
await base.RegisterResources().ConfigureAwait(false); await base.RegisterResources().ConfigureAwait(false);
RegisterSingleInstance<IServerApplicationHost>(this);
RegisterSingleInstance<IServerApplicationPaths>(ApplicationPaths); RegisterSingleInstance<IServerApplicationPaths>(ApplicationPaths);
RegisterSingleInstance(ServerKernel); RegisterSingleInstance(ServerKernel);
RegisterSingleInstance(ServerConfigurationManager); RegisterSingleInstance(ServerConfigurationManager);
RegisterSingleInstance<IWebSocketServer>(() => new AlchemyServer(Logger));
RegisterSingleInstance<IUdpServer>(new UdpServer(Logger), false);
RegisterSingleInstance<IIsoManager>(new PismoIsoManager(Logger)); RegisterSingleInstance<IIsoManager>(new PismoIsoManager(Logger));
RegisterSingleInstance<IBlurayExaminer>(new BdInfoExaminer()); RegisterSingleInstance<IBlurayExaminer>(new BdInfoExaminer());
RegisterSingleInstance<IZipClient>(new DotNetZipClient()); RegisterSingleInstance<IZipClient>(new DotNetZipClient());
RegisterSingleInstance(ServerFactory.CreateServer(this, ProtobufSerializer, Logger, "Media Browser", "index.html"), false); 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); var userManager = new UserManager(ServerKernel, Logger, ServerConfigurationManager);
RegisterSingleInstance<IUserManager>(userManager); RegisterSingleInstance<IUserManager>(userManager);
RegisterSingleInstance<ILibraryManager>(new LibraryManager(ServerKernel, Logger, TaskManager, userManager, ServerConfigurationManager)); RegisterSingleInstance<ILibraryManager>(new LibraryManager(ServerKernel, Logger, TaskManager, userManager, ServerConfigurationManager));
RegisterSingleInstance<IInstallationManager>(new InstallationManager(Kernel, HttpClient, PackageManager, JsonSerializer, Logger, this)); InstallationManager = new InstallationManager(HttpClient, PackageManager, JsonSerializer, Logger, this);
RegisterSingleInstance(InstallationManager);
} }
/// <summary> /// <summary>
@ -121,6 +131,11 @@ namespace MediaBrowser.ServerApplication
{ {
base.FindParts(); base.FindParts();
Resolve<IHttpServer>().Init(GetExports<IRestfulService>(false));
Resolve<IServerManager>().AddWebSocketListeners(GetExports<IWebSocketListener>(false));
Resolve<IServerManager>().Start();
Resolve<ILibraryManager>().AddParts(GetExports<IResolverIgnoreRule>(), GetExports<IVirtualFolderCreator>(), GetExports<IItemResolver>(), GetExports<IIntroProvider>()); Resolve<ILibraryManager>().AddParts(GetExports<IResolverIgnoreRule>(), GetExports<IVirtualFolderCreator>(), GetExports<IItemResolver>(), GetExports<IIntroProvider>());
} }
@ -157,19 +172,6 @@ namespace MediaBrowser.ServerApplication
new CheckForUpdateResult { AvailableVersion = ApplicationVersion, IsUpdateAvailable = false }; new CheckForUpdateResult { AvailableVersion = ApplicationVersion, IsUpdateAvailable = false };
} }
/// <summary>
/// Updates the application.
/// </summary>
/// <param name="package">The package that contains the update</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <param name="progress">The progress.</param>
/// <returns>Task.</returns>
public override Task UpdateApplication(PackageVersionInfo package, CancellationToken cancellationToken, IProgress<double> progress)
{
var pkgManager = Resolve<IPackageManager>();
return pkgManager.InstallPackage(progress, package, cancellationToken);
}
/// <summary> /// <summary>
/// Gets the composable part assemblies. /// Gets the composable part assemblies.
/// </summary> /// </summary>
@ -195,7 +197,7 @@ namespace MediaBrowser.ServerApplication
yield return typeof(SystemInfo).Assembly; yield return typeof(SystemInfo).Assembly;
// Include composable parts in the Common 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 // Include composable parts in the Controller assembly
yield return typeof(Kernel).Assembly; yield return typeof(Kernel).Assembly;
@ -210,6 +212,25 @@ namespace MediaBrowser.ServerApplication
yield return GetType().Assembly; yield return GetType().Assembly;
} }
/// <summary>
/// Gets the system status.
/// </summary>
/// <returns>SystemInfo.</returns>
public virtual SystemInfo GetSystemInfo()
{
return new SystemInfo
{
HasPendingRestart = HasPendingRestart,
Version = ApplicationVersion.ToString(),
IsNetworkDeployed = CanSelfUpdate,
WebSocketPortNumber = ServerManager.WebSocketPortNumber,
SupportsNativeWebSocket = ServerManager.SupportsNativeWebSocket,
FailedPluginAssemblies = FailedAssemblies.ToArray(),
InProgressInstallations = InstallationManager.CurrentInstallations.Select(i => i.Item1).ToArray(),
CompletedInstallations = InstallationManager.CompletedInstallations.ToArray()
};
}
/// <summary> /// <summary>
/// Shuts down. /// Shuts down.
/// </summary> /// </summary>

View File

@ -1,5 +1,5 @@
using MediaBrowser.Common; using MediaBrowser.Common;
using MediaBrowser.Common.Configuration; using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Plugins; using MediaBrowser.Controller.Plugins;
using System.Linq; using System.Linq;
@ -20,14 +20,14 @@ namespace MediaBrowser.ServerApplication
/// </summary> /// </summary>
private readonly IUserManager _userManager; private readonly IUserManager _userManager;
private readonly IConfigurationManager _configurationManager; private readonly IServerConfigurationManager _configurationManager;
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="StartupWizard" /> class. /// Initializes a new instance of the <see cref="StartupWizard" /> class.
/// </summary> /// </summary>
/// <param name="appHost">The app host.</param> /// <param name="appHost">The app host.</param>
/// <param name="userManager">The user manager.</param> /// <param name="userManager">The user manager.</param>
public StartupWizard(IApplicationHost appHost, IUserManager userManager, IConfigurationManager configurationManager) public StartupWizard(IApplicationHost appHost, IUserManager userManager, IServerConfigurationManager configurationManager)
{ {
_appHost = appHost; _appHost = appHost;
_userManager = userManager; _userManager = userManager;

View File

@ -1,11 +1,14 @@
using MediaBrowser.Common.Events; using MediaBrowser.Common.Events;
using MediaBrowser.Common.Kernel; using MediaBrowser.Common.Net;
using MediaBrowser.Common.Plugins; using MediaBrowser.Common.Plugins;
using MediaBrowser.Common.ScheduledTasks;
using MediaBrowser.Controller;
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Plugins; using MediaBrowser.Controller.Plugins;
using MediaBrowser.Controller.Updates; using MediaBrowser.Controller.Updates;
using MediaBrowser.Model.Logging; using MediaBrowser.Model.Logging;
using MediaBrowser.Model.Tasks;
using MediaBrowser.Model.Updates; using MediaBrowser.Model.Updates;
using System; using System;
@ -43,7 +46,9 @@ namespace MediaBrowser.ServerApplication
/// <summary> /// <summary>
/// The _kernel /// The _kernel
/// </summary> /// </summary>
private readonly IKernel _kernel; private readonly IServerApplicationHost _appHost;
private readonly ITaskManager _taskManager;
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="WebSocketEvents" /> class. /// Initializes a new instance of the <see cref="WebSocketEvents" /> class.
@ -51,14 +56,15 @@ namespace MediaBrowser.ServerApplication
/// <param name="serverManager">The server manager.</param> /// <param name="serverManager">The server manager.</param>
/// <param name="logger">The logger.</param> /// <param name="logger">The logger.</param>
/// <param name="userManager">The user manager.</param> /// <param name="userManager">The user manager.</param>
public WebSocketEvents(IServerManager serverManager, IKernel kernel, ILogger logger, IUserManager userManager, ILibraryManager libraryManager, IInstallationManager installationManager) public WebSocketEvents(IServerManager serverManager, IServerApplicationHost appHost, ILogger logger, IUserManager userManager, ILibraryManager libraryManager, IInstallationManager installationManager, ITaskManager taskManager)
{ {
_serverManager = serverManager; _serverManager = serverManager;
_logger = logger; _logger = logger;
_userManager = userManager; _userManager = userManager;
_libraryManager = libraryManager; _libraryManager = libraryManager;
_installationManager = installationManager; _installationManager = installationManager;
_kernel = kernel; _appHost = appHost;
_taskManager = taskManager;
} }
public void Run() public void Run()
@ -68,13 +74,27 @@ namespace MediaBrowser.ServerApplication
_libraryManager.LibraryChanged += libraryManager_LibraryChanged; _libraryManager.LibraryChanged += libraryManager_LibraryChanged;
_kernel.HasPendingRestartChanged += kernel_HasPendingRestartChanged; _appHost.HasPendingRestartChanged += kernel_HasPendingRestartChanged;
_installationManager.PluginUninstalled += InstallationManager_PluginUninstalled; _installationManager.PluginUninstalled += InstallationManager_PluginUninstalled;
_installationManager.PackageInstalling += installationManager_PackageInstalling; _installationManager.PackageInstalling += installationManager_PackageInstalling;
_installationManager.PackageInstallationCancelled += installationManager_PackageInstallationCancelled; _installationManager.PackageInstallationCancelled += installationManager_PackageInstallationCancelled;
_installationManager.PackageInstallationCompleted += installationManager_PackageInstallationCompleted; _installationManager.PackageInstallationCompleted += installationManager_PackageInstallationCompleted;
_installationManager.PackageInstallationFailed += installationManager_PackageInstallationFailed; _installationManager.PackageInstallationFailed += installationManager_PackageInstallationFailed;
_taskManager.TaskExecuting += _taskManager_TaskExecuting;
_taskManager.TaskCompleted += _taskManager_TaskCompleted;
}
void _taskManager_TaskCompleted(object sender, GenericEventArgs<TaskResult> e)
{
_serverManager.SendWebSocketMessage("ScheduledTaskEndExecute", e.Argument);
}
void _taskManager_TaskExecuting(object sender, EventArgs e)
{
var task = (IScheduledTask) sender;
_serverManager.SendWebSocketMessage("ScheduledTaskBeginExecute", task.Name);
} }
/// <summary> /// <summary>
@ -144,9 +164,7 @@ namespace MediaBrowser.ServerApplication
/// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param> /// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param>
void kernel_HasPendingRestartChanged(object sender, EventArgs e) void kernel_HasPendingRestartChanged(object sender, EventArgs e)
{ {
var kernel = (IKernel)sender; _serverManager.SendWebSocketMessage("HasPendingRestartChanged", _appHost.GetSystemInfo());
_serverManager.SendWebSocketMessage("HasPendingRestartChanged", kernel.GetSystemInfo());
} }
/// <summary> /// <summary>
@ -196,7 +214,7 @@ namespace MediaBrowser.ServerApplication
_installationManager.PackageInstallationCompleted -= installationManager_PackageInstallationCompleted; _installationManager.PackageInstallationCompleted -= installationManager_PackageInstallationCompleted;
_installationManager.PackageInstallationFailed -= installationManager_PackageInstallationFailed; _installationManager.PackageInstallationFailed -= installationManager_PackageInstallationFailed;
_kernel.HasPendingRestartChanged -= kernel_HasPendingRestartChanged; _appHost.HasPendingRestartChanged -= kernel_HasPendingRestartChanged;
} }
} }
} }

View File

@ -1,4 +1,4 @@
using MediaBrowser.Common.Kernel; using MediaBrowser.Common.Net;
using MediaBrowser.Common.ScheduledTasks; using MediaBrowser.Common.ScheduledTasks;
using MediaBrowser.Controller; using MediaBrowser.Controller;
using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Library;
@ -23,10 +23,7 @@ namespace MediaBrowser.WebDashboard.Api
get { return "DashboardInfo"; } get { return "DashboardInfo"; }
} }
/// <summary> private readonly IServerApplicationHost _appHost;
/// The _kernel
/// </summary>
private readonly Kernel _kernel;
/// <summary> /// <summary>
/// Gets or sets the task manager. /// Gets or sets the task manager.
@ -42,14 +39,13 @@ namespace MediaBrowser.WebDashboard.Api
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="DashboardInfoWebSocketListener" /> class. /// Initializes a new instance of the <see cref="DashboardInfoWebSocketListener" /> class.
/// </summary> /// </summary>
/// <param name="kernel">The kernel.</param>
/// <param name="logger">The logger.</param> /// <param name="logger">The logger.</param>
/// <param name="taskManager">The task manager.</param> /// <param name="taskManager">The task manager.</param>
/// <param name="userManager">The user manager.</param> /// <param name="userManager">The user manager.</param>
public DashboardInfoWebSocketListener(Kernel kernel, ILogger logger, ITaskManager taskManager, IUserManager userManager) public DashboardInfoWebSocketListener(IServerApplicationHost appHost, ILogger logger, ITaskManager taskManager, IUserManager userManager)
: base(logger) : base(logger)
{ {
_kernel = kernel; _appHost = appHost;
_taskManager = taskManager; _taskManager = taskManager;
_userManager = userManager; _userManager = userManager;
} }
@ -61,7 +57,7 @@ namespace MediaBrowser.WebDashboard.Api
/// <returns>Task{IEnumerable{TaskInfo}}.</returns> /// <returns>Task{IEnumerable{TaskInfo}}.</returns>
protected override Task<DashboardInfo> GetDataToSend(object state) protected override Task<DashboardInfo> GetDataToSend(object state)
{ {
return Task.FromResult(DashboardService.GetDashboardInfo(_kernel, Logger, _taskManager, _userManager)); return Task.FromResult(DashboardService.GetDashboardInfo(_appHost, Logger, _taskManager, _userManager));
} }
} }
} }

View File

@ -1,5 +1,4 @@
using MediaBrowser.Common.Extensions; using MediaBrowser.Common.Extensions;
using MediaBrowser.Common.Implementations.HttpServer;
using MediaBrowser.Common.Net; using MediaBrowser.Common.Net;
using MediaBrowser.Common.ScheduledTasks; using MediaBrowser.Common.ScheduledTasks;
using MediaBrowser.Controller; using MediaBrowser.Controller;
@ -7,6 +6,7 @@ using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Plugins; using MediaBrowser.Controller.Plugins;
using MediaBrowser.Model.Logging; using MediaBrowser.Model.Logging;
using MediaBrowser.Model.Tasks; using MediaBrowser.Model.Tasks;
using MediaBrowser.Server.Implementations.HttpServer;
using ServiceStack.ServiceHost; using ServiceStack.ServiceHost;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@ -89,15 +89,18 @@ namespace MediaBrowser.WebDashboard.Api
/// </summary> /// </summary>
private readonly IUserManager _userManager; private readonly IUserManager _userManager;
private readonly IServerApplicationHost _appHost;
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="DashboardService" /> class. /// Initializes a new instance of the <see cref="DashboardService" /> class.
/// </summary> /// </summary>
/// <param name="taskManager">The task manager.</param> /// <param name="taskManager">The task manager.</param>
/// <param name="userManager">The user manager.</param> /// <param name="userManager">The user manager.</param>
public DashboardService(ITaskManager taskManager, IUserManager userManager) public DashboardService(ITaskManager taskManager, IUserManager userManager, IServerApplicationHost appHost)
{ {
_taskManager = taskManager; _taskManager = taskManager;
_userManager = userManager; _userManager = userManager;
_appHost = appHost;
} }
/// <summary> /// <summary>
@ -107,18 +110,17 @@ namespace MediaBrowser.WebDashboard.Api
/// <returns>System.Object.</returns> /// <returns>System.Object.</returns>
public object Get(GetDashboardInfo request) public object Get(GetDashboardInfo request)
{ {
return GetDashboardInfo(Kernel.Instance, Logger, _taskManager, _userManager); return GetDashboardInfo(_appHost, Logger, _taskManager, _userManager);
} }
/// <summary> /// <summary>
/// Gets the dashboard info. /// Gets the dashboard info.
/// </summary> /// </summary>
/// <param name="kernel">The kernel.</param>
/// <param name="logger">The logger.</param> /// <param name="logger">The logger.</param>
/// <param name="taskManager">The task manager.</param> /// <param name="taskManager">The task manager.</param>
/// <param name="userManager">The user manager.</param> /// <param name="userManager">The user manager.</param>
/// <returns>DashboardInfo.</returns> /// <returns>DashboardInfo.</returns>
public static DashboardInfo GetDashboardInfo(Kernel kernel, ILogger logger, ITaskManager taskManager, IUserManager userManager) public static DashboardInfo GetDashboardInfo(IServerApplicationHost appHost, ILogger logger, ITaskManager taskManager, IUserManager userManager)
{ {
var connections = userManager.ConnectedUsers.ToArray(); var connections = userManager.ConnectedUsers.ToArray();
@ -126,7 +128,7 @@ namespace MediaBrowser.WebDashboard.Api
return new DashboardInfo return new DashboardInfo
{ {
SystemInfo = kernel.GetSystemInfo(), SystemInfo = appHost.GetSystemInfo(),
RunningTasks = taskManager.ScheduledTasks.Where(i => i.State == TaskState.Running || i.State == TaskState.Cancelling) RunningTasks = taskManager.ScheduledTasks.Where(i => i.State == TaskState.Running || i.State == TaskState.Cancelling)
.Select(ScheduledTaskHelpers.GetTaskInfo) .Select(ScheduledTaskHelpers.GetTaskInfo)

View File

@ -82,7 +82,7 @@ pre, textarea.pre {
background-attachment: fixed; background-attachment: fixed;
} }
.libraryPage, .libraryPage .ui-content { .libraryPage, .itemListContent {
background: #262626!important; background: #262626!important;
background-attachment: fixed!important; background-attachment: fixed!important;
} }

View File

@ -5,10 +5,10 @@
</head> </head>
<body> <body>
<div id="itemListPage" data-role="page" class="page libraryPage" data-theme="a"> <div id="itemListPage" data-role="page" class="page libraryPage" data-theme="a">
<div data-role="content"> <div data-role="content" class="itemListContent">
<!-- <div style="text-align: right;"> <div style="text-align: right;">
<button type="button" onclick="$( '#optionsPanel', $.mobile.activePage ).panel( 'open' );" data-mini="true" data-inline="true">Options</button> <button type="button" onclick="$( '#optionsPanel', $.mobile.activePage ).panel( 'open' );" data-mini="true" data-inline="true">Options</button>
</div>--> </div>
<h1 id="itemName" class="listHeader"></h1> <h1 id="itemName" class="listHeader"></h1>

View File

@ -88,10 +88,6 @@
<Compile Include="ServerEntryPoint.cs" /> <Compile Include="ServerEntryPoint.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\MediaBrowser.Common.Implementations\MediaBrowser.Common.Implementations.csproj">
<Project>{c4d2573a-3fd3-441f-81af-174ac4cd4e1d}</Project>
<Name>MediaBrowser.Common.Implementations</Name>
</ProjectReference>
<ProjectReference Include="..\MediaBrowser.Common\MediaBrowser.Common.csproj"> <ProjectReference Include="..\MediaBrowser.Common\MediaBrowser.Common.csproj">
<Project>{9142eefa-7570-41e1-bfcc-468bb571af2f}</Project> <Project>{9142eefa-7570-41e1-bfcc-468bb571af2f}</Project>
<Name>MediaBrowser.Common</Name> <Name>MediaBrowser.Common</Name>
@ -104,6 +100,10 @@
<Project>{7eeeb4bb-f3e8-48fc-b4c5-70f0fff8329b}</Project> <Project>{7eeeb4bb-f3e8-48fc-b4c5-70f0fff8329b}</Project>
<Name>MediaBrowser.Model</Name> <Name>MediaBrowser.Model</Name>
</ProjectReference> </ProjectReference>
<ProjectReference Include="..\MediaBrowser.Server.Implementations\MediaBrowser.Server.Implementations.csproj">
<Project>{2e781478-814d-4a48-9d80-bff206441a65}</Project>
<Name>MediaBrowser.Server.Implementations</Name>
</ProjectReference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<EmbeddedResource Include="Html\index.html" /> <EmbeddedResource Include="Html\index.html" />

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"> <package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata> <metadata>
<id>MediaBrowser.Common.Internal</id> <id>MediaBrowser.Common.Internal</id>
<version>3.0.33</version> <version>3.0.33</version>
@ -7,23 +7,21 @@
<authors>Luke</authors> <authors>Luke</authors>
<owners>ebr,Luke,scottisafool</owners> <owners>ebr,Luke,scottisafool</owners>
<projectUrl>https://github.com/MediaBrowser/MediaBrowser</projectUrl> <projectUrl>https://github.com/MediaBrowser/MediaBrowser</projectUrl>
<iconUrl>http://www.mb3admin.com/images/mb3icons1-1.png</iconUrl> <iconUrl>http://www.mb3admin.com/images/mb3icons1-1.png</iconUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance> <requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Contains common components shared by Media Browser Theatre and Media Browser Server. Not intended for plugin developer consumption.</description> <description>Contains common components shared by Media Browser Theatre and Media Browser Server. Not intended for plugin developer consumption.</description>
<copyright>Copyright © Media Browser 2013</copyright> <copyright>Copyright © Media Browser 2013</copyright>
<dependencies> <dependencies>
<dependency id="MediaBrowser.Common" version="3.0.33" /> <dependency id="MediaBrowser.Common" version="3.0.33" />
<dependency id="NLog" version="2.0.0.2000" /> <dependency id="NLog" version="2.0.0.2000" />
<dependency id="ServiceStack" version="3.9.38" /> <dependency id="ServiceStack.Text" version="3.9.38" />
<dependency id="ServiceStack.Api.Swagger" version="3.9.38" /> <dependency id="protobuf-net" version="2.0.0.621" />
<dependency id="ServiceStack.Logging.NLog" version="1.0.6.0" />
<dependency id="Rx-Main" version="2.1.30214.0" />
</dependencies> </dependencies>
</metadata> </metadata>
<files> <files>
<file src="dlls\MediaBrowser.Common.Implementations.dll" target="lib\net45\MediaBrowser.Common.Implementations.dll" /> <file src="dlls\MediaBrowser.Common.Implementations.dll" target="lib\net45\MediaBrowser.Common.Implementations.dll" />
<file src="dlls\MediaBrowser.IsoMounter.dll" target="lib\net45\MediaBrowser.IsoMounter.dll" /> <file src="dlls\MediaBrowser.IsoMounter.dll" target="lib\net45\MediaBrowser.IsoMounter.dll" />
<file src="dlls\pfmclrapi.dll" target="lib\net45\pfmclrapi.dll" />
<file src="dlls\Mediabrowser.PluginSecurity.dll" target="lib\net45\Mediabrowser.PluginSecurity.dll" /> <file src="dlls\Mediabrowser.PluginSecurity.dll" target="lib\net45\Mediabrowser.PluginSecurity.dll" />
<file src="dlls\pfmclrapi.dll" target="lib\net45\pfmclrapi.dll" />
</files> </files>
</package> </package>