mirror of
https://github.com/jellyfin/jellyfin.git
synced 2024-07-05 21:33:02 +02:00
removed base kernel and ikernel
This commit is contained in:
parent
60545c433b
commit
4f67fc4aef
|
@ -1,8 +1,8 @@
|
|||
using MediaBrowser.Common.Implementations.HttpServer;
|
||||
using MediaBrowser.Common.Net;
|
||||
using MediaBrowser.Common.Net;
|
||||
using MediaBrowser.Controller.IO;
|
||||
using MediaBrowser.Model.IO;
|
||||
using MediaBrowser.Model.Net;
|
||||
using MediaBrowser.Server.Implementations.HttpServer;
|
||||
using ServiceStack.ServiceHost;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
using MediaBrowser.Common.Extensions;
|
||||
using MediaBrowser.Common.IO;
|
||||
using MediaBrowser.Common.Implementations.HttpServer;
|
||||
using MediaBrowser.Common.Net;
|
||||
using MediaBrowser.Controller;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Library;
|
||||
using MediaBrowser.Model.Entities;
|
||||
using MediaBrowser.Server.Implementations.HttpServer;
|
||||
using ServiceStack.ServiceHost;
|
||||
using ServiceStack.Text.Controller;
|
||||
using System;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
using MediaBrowser.Common.Extensions;
|
||||
using MediaBrowser.Common.Implementations.HttpServer;
|
||||
using MediaBrowser.Common.Net;
|
||||
using MediaBrowser.Server.Implementations.HttpServer;
|
||||
using ServiceStack.ServiceHost;
|
||||
using System;
|
||||
using System.IO;
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
using MediaBrowser.Common;
|
||||
using MediaBrowser.Common.Implementations.HttpServer;
|
||||
using MediaBrowser.Common.Kernel;
|
||||
using MediaBrowser.Controller;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Library;
|
||||
using MediaBrowser.Model.Dto;
|
||||
using MediaBrowser.Server.Implementations.HttpServer;
|
||||
using ServiceStack.ServiceHost;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
using MediaBrowser.Common.Implementations.HttpServer;
|
||||
using MediaBrowser.Controller;
|
||||
using MediaBrowser.Controller;
|
||||
using MediaBrowser.Controller.Library;
|
||||
using MediaBrowser.Model.Entities;
|
||||
using MediaBrowser.Server.Implementations.HttpServer;
|
||||
using ServiceStack.ServiceHost;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
using MediaBrowser.Common.Implementations.HttpServer;
|
||||
using MediaBrowser.Controller.Localization;
|
||||
using MediaBrowser.Controller.Localization;
|
||||
using MediaBrowser.Model.Entities;
|
||||
using MediaBrowser.Model.Globalization;
|
||||
using MediaBrowser.Server.Implementations.HttpServer;
|
||||
using MoreLinq;
|
||||
using ServiceStack.ServiceHost;
|
||||
using System.Collections.Generic;
|
||||
|
|
|
@ -121,10 +121,6 @@
|
|||
<Compile Include="WebSocket\SystemInfoWebSocketListener.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\MediaBrowser.Common.Implementations\MediaBrowser.Common.Implementations.csproj">
|
||||
<Project>{c4d2573a-3fd3-441f-81af-174ac4cd4e1d}</Project>
|
||||
<Name>MediaBrowser.Common.Implementations</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\MediaBrowser.Common\MediaBrowser.Common.csproj">
|
||||
<Project>{9142eefa-7570-41e1-bfcc-468bb571af2f}</Project>
|
||||
<Name>MediaBrowser.Common</Name>
|
||||
|
@ -137,6 +133,10 @@
|
|||
<Project>{7eeeb4bb-f3e8-48fc-b4c5-70f0fff8329b}</Project>
|
||||
<Name>MediaBrowser.Model</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\MediaBrowser.Server.Implementations\MediaBrowser.Server.Implementations.csproj">
|
||||
<Project>{2e781478-814d-4a48-9d80-bff206441a65}</Project>
|
||||
<Name>MediaBrowser.Server.Implementations</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="packages.config" />
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
using MediaBrowser.Common;
|
||||
using MediaBrowser.Common.Extensions;
|
||||
using MediaBrowser.Common.Implementations.HttpServer;
|
||||
using MediaBrowser.Controller.Updates;
|
||||
using MediaBrowser.Model.Updates;
|
||||
using MediaBrowser.Server.Implementations.HttpServer;
|
||||
using ServiceStack.ServiceHost;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
using MediaBrowser.Common.Extensions;
|
||||
using MediaBrowser.Common.Implementations.HttpServer;
|
||||
using MediaBrowser.Common.IO;
|
||||
using MediaBrowser.Controller;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
|
@ -15,6 +14,7 @@ using System.IO;
|
|||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using MediaBrowser.Server.Implementations.HttpServer;
|
||||
|
||||
namespace MediaBrowser.Api.Playback
|
||||
{
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
using MediaBrowser.Common;
|
||||
using MediaBrowser.Common.Extensions;
|
||||
using MediaBrowser.Common.Implementations.HttpServer;
|
||||
using MediaBrowser.Common.Security;
|
||||
using MediaBrowser.Controller.Updates;
|
||||
using MediaBrowser.Model.Entities;
|
||||
using MediaBrowser.Model.Plugins;
|
||||
using MediaBrowser.Model.Serialization;
|
||||
using MediaBrowser.Server.Implementations.HttpServer;
|
||||
using ServiceStack.ServiceHost;
|
||||
using ServiceStack.Text.Controller;
|
||||
using System;
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
using MediaBrowser.Common.Extensions;
|
||||
using MediaBrowser.Common.Implementations.HttpServer;
|
||||
using MediaBrowser.Common.ScheduledTasks;
|
||||
using MediaBrowser.Model.Serialization;
|
||||
using MediaBrowser.Model.Tasks;
|
||||
using MediaBrowser.Server.Implementations.HttpServer;
|
||||
using ServiceStack.ServiceHost;
|
||||
using ServiceStack.Text.Controller;
|
||||
using System;
|
||||
|
@ -84,30 +84,19 @@ namespace MediaBrowser.Api.ScheduledTasks
|
|||
/// <value>The task manager.</value>
|
||||
private ITaskManager TaskManager { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The _json serializer
|
||||
/// </summary>
|
||||
private readonly IJsonSerializer _jsonSerializer;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="ScheduledTaskService" /> class.
|
||||
/// </summary>
|
||||
/// <param name="taskManager">The task manager.</param>
|
||||
/// <param name="jsonSerializer">The json serializer.</param>
|
||||
/// <exception cref="System.ArgumentNullException">taskManager</exception>
|
||||
public ScheduledTaskService(ITaskManager taskManager, IJsonSerializer jsonSerializer)
|
||||
public ScheduledTaskService(ITaskManager taskManager)
|
||||
{
|
||||
if (taskManager == null)
|
||||
{
|
||||
throw new ArgumentNullException("taskManager");
|
||||
}
|
||||
if (jsonSerializer == null)
|
||||
{
|
||||
throw new ArgumentNullException("jsonSerializer");
|
||||
}
|
||||
|
||||
TaskManager = taskManager;
|
||||
_jsonSerializer = jsonSerializer;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -157,7 +146,7 @@ namespace MediaBrowser.Api.ScheduledTasks
|
|||
throw new ResourceNotFoundException("Task not found");
|
||||
}
|
||||
|
||||
task.Execute();
|
||||
TaskManager.Execute(task);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -174,7 +163,7 @@ namespace MediaBrowser.Api.ScheduledTasks
|
|||
throw new ResourceNotFoundException("Task not found");
|
||||
}
|
||||
|
||||
task.Cancel();
|
||||
TaskManager.Cancel(task);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
using MediaBrowser.Common.Kernel;
|
||||
using MediaBrowser.Common.Net;
|
||||
using MediaBrowser.Common.ScheduledTasks;
|
||||
using MediaBrowser.Model.Logging;
|
||||
using MediaBrowser.Model.Tasks;
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
using MediaBrowser.Common;
|
||||
using MediaBrowser.Common.Extensions;
|
||||
using MediaBrowser.Common.Implementations.HttpServer;
|
||||
using MediaBrowser.Controller;
|
||||
using MediaBrowser.Controller.Configuration;
|
||||
using MediaBrowser.Model.Configuration;
|
||||
using MediaBrowser.Model.Serialization;
|
||||
using MediaBrowser.Model.System;
|
||||
using MediaBrowser.Server.Implementations.HttpServer;
|
||||
using ServiceStack.ServiceHost;
|
||||
using System;
|
||||
using System.IO;
|
||||
|
@ -66,7 +66,7 @@ namespace MediaBrowser.Api
|
|||
/// <summary>
|
||||
/// The _app host
|
||||
/// </summary>
|
||||
private readonly IApplicationHost _appHost;
|
||||
private readonly IServerApplicationHost _appHost;
|
||||
|
||||
/// <summary>
|
||||
/// The _configuration manager
|
||||
|
@ -80,7 +80,7 @@ namespace MediaBrowser.Api
|
|||
/// <param name="appHost">The app host.</param>
|
||||
/// <param name="configurationManager">The configuration manager.</param>
|
||||
/// <exception cref="System.ArgumentNullException">jsonSerializer</exception>
|
||||
public SystemService(IJsonSerializer jsonSerializer, IApplicationHost appHost, IServerConfigurationManager configurationManager)
|
||||
public SystemService(IJsonSerializer jsonSerializer, IServerApplicationHost appHost, IServerConfigurationManager configurationManager)
|
||||
: base()
|
||||
{
|
||||
if (jsonSerializer == null)
|
||||
|
@ -104,7 +104,7 @@ namespace MediaBrowser.Api
|
|||
/// <returns>System.Object.</returns>
|
||||
public object Get(GetSystemInfo request)
|
||||
{
|
||||
var result = Kernel.Instance.GetSystemInfo();
|
||||
var result = _appHost.GetSystemInfo();
|
||||
|
||||
return ToOptimizedResult(result);
|
||||
}
|
||||
|
@ -132,7 +132,7 @@ namespace MediaBrowser.Api
|
|||
Task.Run(async () =>
|
||||
{
|
||||
await Task.Delay(100);
|
||||
Kernel.Instance.PerformPendingRestart();
|
||||
_appHost.PerformPendingRestart();
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
using MediaBrowser.Common.Implementations.HttpServer;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Library;
|
||||
using MediaBrowser.Model.Dto;
|
||||
using MediaBrowser.Model.Entities;
|
||||
using MediaBrowser.Server.Implementations.HttpServer;
|
||||
using ServiceStack.ServiceHost;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
using MediaBrowser.Common.Implementations.HttpServer;
|
||||
using MediaBrowser.Controller;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Entities.Audio;
|
||||
using MediaBrowser.Controller.Library;
|
||||
using MediaBrowser.Model.Dto;
|
||||
using MediaBrowser.Model.Entities;
|
||||
using MediaBrowser.Server.Implementations.HttpServer;
|
||||
using ServiceStack.ServiceHost;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
|
|
@ -1,12 +1,11 @@
|
|||
using MediaBrowser.Common.Implementations.HttpServer;
|
||||
using MediaBrowser.Controller;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Entities.Movies;
|
||||
using MediaBrowser.Controller.Library;
|
||||
using MediaBrowser.Model.Connectivity;
|
||||
using MediaBrowser.Model.Dto;
|
||||
using MediaBrowser.Model.Entities;
|
||||
using MediaBrowser.Model.Serialization;
|
||||
using MediaBrowser.Server.Implementations.HttpServer;
|
||||
using ServiceStack.ServiceHost;
|
||||
using ServiceStack.Text.Controller;
|
||||
using System;
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
using MediaBrowser.Common.Extensions;
|
||||
using MediaBrowser.Common.Implementations.HttpServer;
|
||||
using MediaBrowser.Controller.Library;
|
||||
using MediaBrowser.Model.Dto;
|
||||
using MediaBrowser.Model.Serialization;
|
||||
using MediaBrowser.Server.Implementations.HttpServer;
|
||||
using ServiceStack.ServiceHost;
|
||||
using ServiceStack.Text.Controller;
|
||||
using System;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
using MediaBrowser.Common.Implementations.HttpServer;
|
||||
using MediaBrowser.Controller;
|
||||
using MediaBrowser.Controller;
|
||||
using MediaBrowser.Model.Weather;
|
||||
using MediaBrowser.Server.Implementations.HttpServer;
|
||||
using ServiceStack.ServiceHost;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
using MediaBrowser.Common.IO;
|
||||
using MediaBrowser.Common.Kernel;
|
||||
using MediaBrowser.Common.Net;
|
||||
using MediaBrowser.Model.Logging;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
using MediaBrowser.Common.Kernel;
|
||||
using MediaBrowser.Common.Net;
|
||||
using MediaBrowser.Controller;
|
||||
using MediaBrowser.Model.Logging;
|
||||
using MediaBrowser.Model.System;
|
||||
|
@ -23,17 +23,16 @@ namespace MediaBrowser.Api.WebSocket
|
|||
/// <summary>
|
||||
/// The _kernel
|
||||
/// </summary>
|
||||
private readonly IKernel _kernel;
|
||||
private readonly IServerApplicationHost _appHost;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="SystemInfoWebSocketListener" /> class.
|
||||
/// </summary>
|
||||
/// <param name="kernel">The kernel.</param>
|
||||
/// <param name="logger">The logger.</param>
|
||||
public SystemInfoWebSocketListener(Kernel kernel, ILogger logger)
|
||||
public SystemInfoWebSocketListener(ILogger logger, IServerApplicationHost appHost)
|
||||
: base(logger)
|
||||
{
|
||||
_kernel = kernel;
|
||||
_appHost = appHost;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -43,7 +42,7 @@ namespace MediaBrowser.Api.WebSocket
|
|||
/// <returns>Task{SystemInfo}.</returns>
|
||||
protected override Task<SystemInfo> GetDataToSend(object state)
|
||||
{
|
||||
return Task.FromResult(_kernel.GetSystemInfo());
|
||||
return Task.FromResult(_appHost.GetSystemInfo());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,13 +1,11 @@
|
|||
using MediaBrowser.Common.Configuration;
|
||||
using MediaBrowser.Common.Events;
|
||||
using MediaBrowser.Common.Implementations.Logging;
|
||||
using MediaBrowser.Common.Implementations.NetworkManagement;
|
||||
using MediaBrowser.Common.Implementations.ScheduledTasks;
|
||||
using MediaBrowser.Common.Implementations.Security;
|
||||
using MediaBrowser.Common.Implementations.Serialization;
|
||||
using MediaBrowser.Common.Implementations.Udp;
|
||||
using MediaBrowser.Common.Implementations.Updates;
|
||||
using MediaBrowser.Common.Implementations.WebSocket;
|
||||
using MediaBrowser.Common.Kernel;
|
||||
using MediaBrowser.Common.Net;
|
||||
using MediaBrowser.Common.Plugins;
|
||||
using MediaBrowser.Common.ScheduledTasks;
|
||||
|
@ -15,6 +13,7 @@ using MediaBrowser.Common.Security;
|
|||
using MediaBrowser.Common.Updates;
|
||||
using MediaBrowser.Model.Logging;
|
||||
using MediaBrowser.Model.Serialization;
|
||||
using MediaBrowser.Model.System;
|
||||
using MediaBrowser.Model.Updates;
|
||||
using SimpleInjector;
|
||||
using System;
|
||||
|
@ -30,6 +29,22 @@ namespace MediaBrowser.Common.Implementations
|
|||
public abstract class BaseApplicationHost<TApplicationPathsType> : IApplicationHost
|
||||
where TApplicationPathsType : class, IApplicationPaths, new()
|
||||
{
|
||||
/// <summary>
|
||||
/// Occurs when [has pending restart changed].
|
||||
/// </summary>
|
||||
public event EventHandler HasPendingRestartChanged;
|
||||
|
||||
/// <summary>
|
||||
/// Occurs when [application updated].
|
||||
/// </summary>
|
||||
public event EventHandler<GenericEventArgs<Version>> ApplicationUpdated;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a value indicating whether this instance has changes that require the entire application to restart.
|
||||
/// </summary>
|
||||
/// <value><c>true</c> if this instance has pending application restart; otherwise, <c>false</c>.</value>
|
||||
public bool HasPendingRestart { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the logger.
|
||||
/// </summary>
|
||||
|
@ -132,11 +147,11 @@ namespace MediaBrowser.Common.Implementations
|
|||
/// Gets the kernel.
|
||||
/// </summary>
|
||||
/// <value>The kernel.</value>
|
||||
protected IKernel Kernel { get; private set; }
|
||||
protected ITaskManager TaskManager { get; private set; }
|
||||
protected ISecurityManager SecurityManager { get; private set; }
|
||||
protected IPackageManager PackageManager { get; private set; }
|
||||
protected IHttpClient HttpClient { get; private set; }
|
||||
protected INetworkManager NetworkManager { get; private set; }
|
||||
|
||||
protected IConfigurationManager ConfigurationManager { get; private set; }
|
||||
|
||||
|
@ -168,15 +183,11 @@ namespace MediaBrowser.Common.Implementations
|
|||
|
||||
Logger.Info("Version {0} initializing", ApplicationVersion);
|
||||
|
||||
Kernel = GetKernel();
|
||||
|
||||
await RegisterResources().ConfigureAwait(false);
|
||||
|
||||
FindParts();
|
||||
|
||||
Task.Run(() => ConfigureAutoRunAtStartup());
|
||||
|
||||
Kernel.Init();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -191,7 +202,6 @@ namespace MediaBrowser.Common.Implementations
|
|||
/// <value>The name of the log file prefix.</value>
|
||||
protected abstract string LogFilePrefixName { get; }
|
||||
|
||||
protected abstract IKernel GetKernel();
|
||||
protected abstract IConfigurationManager GetConfigurationManager();
|
||||
|
||||
/// <summary>
|
||||
|
@ -199,10 +209,6 @@ namespace MediaBrowser.Common.Implementations
|
|||
/// </summary>
|
||||
protected virtual void FindParts()
|
||||
{
|
||||
Resolve<IHttpServer>().Init(GetExports<IRestfulService>(false));
|
||||
Resolve<IServerManager>().AddWebSocketListeners(GetExports<IWebSocketListener>(false));
|
||||
|
||||
Resolve<IServerManager>().Start();
|
||||
Resolve<ITaskManager>().AddTasks(GetExports<IScheduledTask>(false));
|
||||
|
||||
Plugins = GetExports<IPlugin>();
|
||||
|
@ -239,11 +245,7 @@ namespace MediaBrowser.Common.Implementations
|
|||
|
||||
RegisterSingleInstance<IApplicationPaths>(ApplicationPaths);
|
||||
|
||||
var networkManager = new NetworkManager();
|
||||
|
||||
var serverManager = new ServerManager.ServerManager(this, Kernel, networkManager, JsonSerializer, Logger, ConfigurationManager);
|
||||
|
||||
TaskManager = new TaskManager(ApplicationPaths, JsonSerializer, Logger, serverManager);
|
||||
TaskManager = new TaskManager(ApplicationPaths, JsonSerializer, Logger);
|
||||
|
||||
RegisterSingleInstance(JsonSerializer);
|
||||
RegisterSingleInstance(XmlSerializer);
|
||||
|
@ -251,25 +253,22 @@ namespace MediaBrowser.Common.Implementations
|
|||
RegisterSingleInstance(LogManager);
|
||||
RegisterSingleInstance(Logger);
|
||||
|
||||
RegisterSingleInstance(Kernel);
|
||||
|
||||
RegisterSingleInstance(TaskManager);
|
||||
RegisterSingleInstance<IWebSocketServer>(() => new AlchemyServer(Logger));
|
||||
RegisterSingleInstance(ProtobufSerializer);
|
||||
RegisterSingleInstance<IUdpServer>(new UdpServer(Logger), false);
|
||||
|
||||
HttpClient = new HttpClientManager.HttpClientManager(ApplicationPaths, Logger);
|
||||
|
||||
RegisterSingleInstance(HttpClient);
|
||||
|
||||
RegisterSingleInstance<INetworkManager>(networkManager);
|
||||
RegisterSingleInstance<IServerManager>(serverManager);
|
||||
NetworkManager = new NetworkManager();
|
||||
|
||||
SecurityManager = new PluginSecurityManager(Kernel, HttpClient, JsonSerializer, ApplicationPaths);
|
||||
RegisterSingleInstance(NetworkManager);
|
||||
|
||||
SecurityManager = new PluginSecurityManager(this, HttpClient, JsonSerializer, ApplicationPaths);
|
||||
|
||||
RegisterSingleInstance(SecurityManager);
|
||||
|
||||
PackageManager = new PackageManager(SecurityManager, networkManager, HttpClient, ApplicationPaths, JsonSerializer, Logger);
|
||||
PackageManager = new PackageManager(SecurityManager, NetworkManager, HttpClient, ApplicationPaths, JsonSerializer, Logger);
|
||||
|
||||
RegisterSingleInstance(PackageManager);
|
||||
});
|
||||
|
@ -450,6 +449,34 @@ namespace MediaBrowser.Common.Implementations
|
|||
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>
|
||||
/// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
|
||||
/// </summary>
|
||||
|
@ -488,7 +515,20 @@ namespace MediaBrowser.Common.Implementations
|
|||
|
||||
public abstract Task<CheckForUpdateResult> CheckForApplicationUpdate(CancellationToken cancellationToken, IProgress<double> progress);
|
||||
|
||||
public abstract Task UpdateApplication(PackageVersionInfo package, CancellationToken cancellationToken, IProgress<double> progress);
|
||||
/// <summary>
|
||||
/// Updates the application.
|
||||
/// </summary>
|
||||
/// <param name="package">The package that contains the update</param>
|
||||
/// <param name="cancellationToken">The cancellation token.</param>
|
||||
/// <param name="progress">The progress.</param>
|
||||
/// <returns>Task.</returns>
|
||||
public async Task UpdateApplication(PackageVersionInfo package, CancellationToken cancellationToken, IProgress<double> progress)
|
||||
{
|
||||
var pkgManager = Resolve<IPackageManager>();
|
||||
await pkgManager.InstallPackage(progress, package, cancellationToken).ConfigureAwait(false);
|
||||
|
||||
EventHelper.QueueEventIfNotNull(ApplicationUpdated, this, new GenericEventArgs<Version> { Argument = package.version }, Logger);
|
||||
}
|
||||
|
||||
public abstract void Shutdown();
|
||||
}
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
using MediaBrowser.Common.Configuration;
|
||||
using MediaBrowser.Common.Kernel;
|
||||
using System;
|
||||
using System.Configuration;
|
||||
using System.IO;
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
using MediaBrowser.Common.Configuration;
|
||||
using MediaBrowser.Common.IO;
|
||||
using MediaBrowser.Common.Kernel;
|
||||
using MediaBrowser.Common.Net;
|
||||
using MediaBrowser.Model.Logging;
|
||||
using MediaBrowser.Model.Net;
|
||||
|
@ -9,7 +8,6 @@ using System.Collections.Concurrent;
|
|||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Cache;
|
||||
using System.Net.Http;
|
||||
using System.Text;
|
||||
|
|
|
@ -35,9 +35,6 @@
|
|||
<RunPostBuildEvent>Always</RunPostBuildEvent>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Alchemy">
|
||||
<HintPath>..\packages\Alchemy.2.2.1\lib\net40\Alchemy.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Mediabrowser.PluginSecurity">
|
||||
<HintPath>..\ThirdParty\PluginSecurity\Mediabrowser.PluginSecurity.dll</HintPath>
|
||||
</Reference>
|
||||
|
@ -47,41 +44,6 @@
|
|||
<Reference Include="protobuf-net">
|
||||
<HintPath>..\packages\protobuf-net.2.0.0.621\lib\net40\protobuf-net.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="ServiceStack, Version=3.9.38.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\packages\ServiceStack.3.9.38\lib\net35\ServiceStack.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="ServiceStack.Api.Swagger, Version=3.9.38.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\packages\ServiceStack.Api.Swagger.3.9.38\lib\net35\ServiceStack.Api.Swagger.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="ServiceStack.Common, Version=3.9.38.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\packages\ServiceStack.Common.3.9.38\lib\net35\ServiceStack.Common.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="ServiceStack.Interfaces, Version=3.9.38.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\packages\ServiceStack.Common.3.9.38\lib\net35\ServiceStack.Interfaces.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="ServiceStack.Logging.NLog">
|
||||
<HintPath>..\packages\ServiceStack.Logging.NLog.1.0.6.0\lib\net35\ServiceStack.Logging.NLog.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="ServiceStack.OrmLite, Version=3.9.39.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\packages\ServiceStack.OrmLite.SqlServer.3.9.39\lib\ServiceStack.OrmLite.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="ServiceStack.OrmLite.SqlServer, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\packages\ServiceStack.OrmLite.SqlServer.3.9.39\lib\ServiceStack.OrmLite.SqlServer.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="ServiceStack.Redis, Version=3.9.38.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\packages\ServiceStack.Redis.3.9.38\lib\net35\ServiceStack.Redis.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="ServiceStack.ServiceInterface, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\packages\ServiceStack.3.9.38\lib\net35\ServiceStack.ServiceInterface.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="ServiceStack.Text, Version=3.9.38.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\packages\ServiceStack.Text.3.9.38\lib\net35\ServiceStack.Text.dll</HintPath>
|
||||
|
@ -97,16 +59,6 @@
|
|||
<Reference Include="System.Net" />
|
||||
<Reference Include="System.Net.Http" />
|
||||
<Reference Include="System.Net.Http.WebRequest" />
|
||||
<Reference Include="System.Reactive.Core">
|
||||
<HintPath>..\packages\Rx-Core.2.1.30214.0\lib\Net45\System.Reactive.Core.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Reactive.Interfaces">
|
||||
<HintPath>..\packages\Rx-Interfaces.2.1.30214.0\lib\Net45\System.Reactive.Interfaces.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Reactive.Linq">
|
||||
<HintPath>..\packages\Rx-Linq.2.1.30214.0\lib\Net45\System.Reactive.Linq.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Web" />
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
@ -117,12 +69,6 @@
|
|||
<Compile Include="BaseApplicationPaths.cs" />
|
||||
<Compile Include="Configuration\BaseConfigurationManager.cs" />
|
||||
<Compile Include="HttpClientManager\HttpClientManager.cs" />
|
||||
<Compile Include="HttpServer\BaseRestService.cs" />
|
||||
<Compile Include="HttpServer\HttpServer.cs" />
|
||||
<Compile Include="HttpServer\NativeWebSocket.cs" />
|
||||
<Compile Include="HttpServer\ServerFactory.cs" />
|
||||
<Compile Include="HttpServer\StreamWriter.cs" />
|
||||
<Compile Include="HttpServer\SwaggerService.cs" />
|
||||
<Compile Include="Logging\LogHelper.cs" />
|
||||
<Compile Include="Logging\NLogger.cs" />
|
||||
<Compile Include="Logging\NlogManager.cs" />
|
||||
|
@ -140,12 +86,8 @@
|
|||
<Compile Include="Serialization\JsonSerializer.cs" />
|
||||
<Compile Include="Serialization\ProtobufSerializer.cs" />
|
||||
<Compile Include="Serialization\XmlSerializer.cs" />
|
||||
<Compile Include="ServerManager\ServerManager.cs" />
|
||||
<Compile Include="ServerManager\WebSocketConnection.cs" />
|
||||
<Compile Include="Udp\UdpServer.cs" />
|
||||
<Compile Include="Updates\ApplicationUpdater.cs" />
|
||||
<Compile Include="Updates\PackageManager.cs" />
|
||||
<Compile Include="WebSocket\AlchemyServer.cs" />
|
||||
<Compile Include="WebSocket\AlchemyWebSocket.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\MediaBrowser.Common\MediaBrowser.Common.csproj">
|
||||
|
@ -159,52 +101,6 @@
|
|||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="packages.config" />
|
||||
<EmbeddedResource Include="ServerManager\RegisterServer.bat" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="README.txt" />
|
||||
<Content Include="swagger-ui\css\screen.css">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="swagger-ui\images\pet_store_api.png">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="swagger-ui\images\wordnik_api.png">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="swagger-ui\index.html">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="swagger-ui\lib\backbone-min.js">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="swagger-ui\lib\handlebars.runtime-1.0.0.beta.6.js">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="swagger-ui\lib\jquery.ba-bbq.min.js">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="swagger-ui\lib\jquery.min.js">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="swagger-ui\lib\jquery.slideto.min.js">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="swagger-ui\lib\jquery.wiggle.min.js">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="swagger-ui\lib\swagger.js">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="swagger-ui\lib\underscore-min.js">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="swagger-ui\swagger-ui.js">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="swagger-ui\swagger-ui.min.js">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
</ItemGroup>
|
||||
<ItemGroup />
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
using MediaBrowser.Common.Configuration;
|
||||
using MediaBrowser.Common.Extensions;
|
||||
using MediaBrowser.Common.Kernel;
|
||||
using MediaBrowser.Common.ScheduledTasks;
|
||||
using MediaBrowser.Model.Logging;
|
||||
using MediaBrowser.Model.Serialization;
|
||||
|
@ -49,12 +48,6 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks
|
|||
/// <value>The task manager.</value>
|
||||
private ITaskManager TaskManager { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the server manager.
|
||||
/// </summary>
|
||||
/// <value>The server manager.</value>
|
||||
private IServerManager ServerManager { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="ScheduledTaskWorker" /> class.
|
||||
/// </summary>
|
||||
|
@ -64,7 +57,7 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks
|
|||
/// <param name="jsonSerializer">The json serializer.</param>
|
||||
/// <param name="logger">The logger.</param>
|
||||
/// <param name="serverManager">The server manager.</param>
|
||||
public ScheduledTaskWorker(IScheduledTask scheduledTask, IApplicationPaths applicationPaths, ITaskManager taskManager, IJsonSerializer jsonSerializer, ILogger logger, IServerManager serverManager)
|
||||
public ScheduledTaskWorker(IScheduledTask scheduledTask, IApplicationPaths applicationPaths, ITaskManager taskManager, IJsonSerializer jsonSerializer, ILogger logger)
|
||||
{
|
||||
if (scheduledTask == null)
|
||||
{
|
||||
|
@ -86,17 +79,12 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks
|
|||
{
|
||||
throw new ArgumentNullException("logger");
|
||||
}
|
||||
if (serverManager == null)
|
||||
{
|
||||
throw new ArgumentNullException("serverManager");
|
||||
}
|
||||
|
||||
ScheduledTask = scheduledTask;
|
||||
ApplicationPaths = applicationPaths;
|
||||
TaskManager = taskManager;
|
||||
JsonSerializer = jsonSerializer;
|
||||
Logger = logger;
|
||||
ServerManager = serverManager;
|
||||
|
||||
ReloadTriggerEvents(true);
|
||||
}
|
||||
|
@ -331,6 +319,8 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks
|
|||
|
||||
Logger.Info("Executing {0}", Name);
|
||||
|
||||
((TaskManager)TaskManager).OnTaskExecuting(ScheduledTask);
|
||||
|
||||
var progress = new Progress<double>();
|
||||
|
||||
progress.ProgressChanged += progress_ProgressChanged;
|
||||
|
@ -338,8 +328,6 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks
|
|||
TaskCompletionStatus status;
|
||||
CurrentExecutionStartTime = DateTime.UtcNow;
|
||||
|
||||
ServerManager.SendWebSocketMessage("ScheduledTaskBeginExecute", Name);
|
||||
|
||||
try
|
||||
{
|
||||
await ExecuteTask(CurrentCancellationTokenSource.Token, progress).ConfigureAwait(false);
|
||||
|
@ -517,8 +505,7 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks
|
|||
/// <param name="startTime">The start time.</param>
|
||||
/// <param name="endTime">The end time.</param>
|
||||
/// <param name="status">The status.</param>
|
||||
/// <param name="sendNotification">if set to <c>true</c> [send notification].</param>
|
||||
private void OnTaskCompleted(DateTime startTime, DateTime endTime, TaskCompletionStatus status, bool sendNotification = true)
|
||||
private void OnTaskCompleted(DateTime startTime, DateTime endTime, TaskCompletionStatus status)
|
||||
{
|
||||
var elapsedTime = endTime - startTime;
|
||||
|
||||
|
@ -537,10 +524,7 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks
|
|||
|
||||
LastExecutionResult = result;
|
||||
|
||||
if (sendNotification)
|
||||
{
|
||||
ServerManager.SendWebSocketMessage("ScheduledTaskEndExecute", result);
|
||||
}
|
||||
((TaskManager) TaskManager).OnTaskCompleted(ScheduledTask, result);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -564,7 +548,7 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks
|
|||
|
||||
if (State == TaskState.Running)
|
||||
{
|
||||
OnTaskCompleted(CurrentExecutionStartTime, DateTime.UtcNow, TaskCompletionStatus.Aborted, false);
|
||||
OnTaskCompleted(CurrentExecutionStartTime, DateTime.UtcNow, TaskCompletionStatus.Aborted);
|
||||
}
|
||||
|
||||
if (CurrentCancellationTokenSource != null)
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
using MediaBrowser.Common.Configuration;
|
||||
using MediaBrowser.Common.Kernel;
|
||||
using System.Threading.Tasks;
|
||||
using MediaBrowser.Common.Configuration;
|
||||
using MediaBrowser.Common.Events;
|
||||
using MediaBrowser.Common.ScheduledTasks;
|
||||
using MediaBrowser.Model.Logging;
|
||||
using MediaBrowser.Model.Serialization;
|
||||
|
@ -15,6 +16,9 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks
|
|||
/// </summary>
|
||||
public class TaskManager : ITaskManager
|
||||
{
|
||||
public event EventHandler<EventArgs> TaskExecuting;
|
||||
public event EventHandler<GenericEventArgs<TaskResult>> TaskCompleted;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the list of Scheduled Tasks
|
||||
/// </summary>
|
||||
|
@ -44,26 +48,18 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks
|
|||
/// <value>The logger.</value>
|
||||
private ILogger Logger { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the server manager.
|
||||
/// </summary>
|
||||
/// <value>The server manager.</value>
|
||||
private IServerManager ServerManager { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="TaskManager" /> class.
|
||||
/// </summary>
|
||||
/// <param name="applicationPaths">The application paths.</param>
|
||||
/// <param name="jsonSerializer">The json serializer.</param>
|
||||
/// <param name="logger">The logger.</param>
|
||||
/// <param name="serverManager">The server manager.</param>
|
||||
/// <exception cref="System.ArgumentException">kernel</exception>
|
||||
public TaskManager(IApplicationPaths applicationPaths, IJsonSerializer jsonSerializer, ILogger logger, IServerManager serverManager)
|
||||
public TaskManager(IApplicationPaths applicationPaths, IJsonSerializer jsonSerializer, ILogger logger)
|
||||
{
|
||||
ApplicationPaths = applicationPaths;
|
||||
JsonSerializer = jsonSerializer;
|
||||
Logger = logger;
|
||||
ServerManager = serverManager;
|
||||
|
||||
ScheduledTasks = new IScheduledTaskWorker[] { };
|
||||
}
|
||||
|
@ -75,7 +71,9 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks
|
|||
public void CancelIfRunningAndQueue<T>()
|
||||
where T : IScheduledTask
|
||||
{
|
||||
ScheduledTasks.First(t => t.ScheduledTask.GetType() == typeof(T)).CancelIfRunning();
|
||||
var task = ScheduledTasks.First(t => t.ScheduledTask.GetType() == typeof(T));
|
||||
((ScheduledTaskWorker)task).CancelIfRunning();
|
||||
|
||||
QueueScheduledTask<T>();
|
||||
}
|
||||
|
||||
|
@ -101,7 +99,7 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks
|
|||
|
||||
QueueScheduledTask(scheduledTask);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Queues the scheduled task.
|
||||
/// </summary>
|
||||
|
@ -115,7 +113,7 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks
|
|||
// If it's idle just execute immediately
|
||||
if (task.State == TaskState.Idle)
|
||||
{
|
||||
task.Execute();
|
||||
((ScheduledTaskWorker)task).Execute();
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -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>
|
||||
/// Adds the tasks.
|
||||
/// </summary>
|
||||
|
@ -164,7 +137,7 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks
|
|||
{
|
||||
var myTasks = ScheduledTasks.ToList();
|
||||
|
||||
myTasks.AddRange(tasks.Select(t => new ScheduledTaskWorker(t, ApplicationPaths, this, JsonSerializer, Logger, ServerManager)));
|
||||
myTasks.AddRange(tasks.Select(t => new ScheduledTaskWorker(t, ApplicationPaths, this, JsonSerializer, Logger)));
|
||||
|
||||
ScheduledTasks = myTasks.ToArray();
|
||||
}
|
||||
|
@ -189,5 +162,25 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks
|
|||
task.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
public void Cancel(IScheduledTaskWorker task)
|
||||
{
|
||||
((ScheduledTaskWorker)task).Cancel();
|
||||
}
|
||||
|
||||
public Task Execute(IScheduledTaskWorker task)
|
||||
{
|
||||
return ((ScheduledTaskWorker)task).Execute();
|
||||
}
|
||||
|
||||
internal void OnTaskExecuting(IScheduledTask task)
|
||||
{
|
||||
EventHelper.QueueEventIfNotNull(TaskExecuting, task, EventArgs.Empty, Logger);
|
||||
}
|
||||
|
||||
internal void OnTaskCompleted(IScheduledTask task, TaskResult result)
|
||||
{
|
||||
EventHelper.QueueEventIfNotNull(TaskExecuting, task, new GenericEventArgs<TaskResult> { Argument = result }, Logger);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
using MediaBrowser.Common.Configuration;
|
||||
using MediaBrowser.Common.Kernel;
|
||||
using MediaBrowser.Common.ScheduledTasks;
|
||||
using MediaBrowser.Model.Logging;
|
||||
using System;
|
||||
|
@ -30,25 +29,17 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks.Tasks
|
|||
/// <value>The logger.</value>
|
||||
private ILogger Logger { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the kernel.
|
||||
/// </summary>
|
||||
/// <value>The kernel.</value>
|
||||
private IKernel Kernel { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="SystemUpdateTask" /> class.
|
||||
/// </summary>
|
||||
/// <param name="appHost">The app host.</param>
|
||||
/// <param name="configurationManager">The configuration manager.</param>
|
||||
/// <param name="logger">The logger.</param>
|
||||
/// <param name="kernel">The kernel.</param>
|
||||
public SystemUpdateTask(IApplicationHost appHost, IConfigurationManager configurationManager, ILogger logger, IKernel kernel)
|
||||
public SystemUpdateTask(IApplicationHost appHost, IConfigurationManager configurationManager, ILogger logger)
|
||||
{
|
||||
_appHost = appHost;
|
||||
ConfigurationManager = configurationManager;
|
||||
Logger = logger;
|
||||
Kernel = kernel;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -110,8 +101,6 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks.Tasks
|
|||
|
||||
// Release the event handler
|
||||
innerProgress.ProgressChanged -= innerProgressHandler;
|
||||
|
||||
Kernel.OnApplicationUpdated(updateInfo.AvailableVersion);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -3,7 +3,6 @@ using MediaBrowser.Common.Security;
|
|||
using MediaBrowser.Model.Serialization;
|
||||
using Mediabrowser.Model.Entities;
|
||||
using Mediabrowser.PluginSecurity;
|
||||
using MediaBrowser.Common.Kernel;
|
||||
using MediaBrowser.Common.Net;
|
||||
using System;
|
||||
using System.Threading;
|
||||
|
@ -44,29 +43,19 @@ namespace MediaBrowser.Common.Implementations.Security
|
|||
|
||||
private IHttpClient _httpClient;
|
||||
private IJsonSerializer _jsonSerializer;
|
||||
|
||||
/// <summary>
|
||||
/// The _kernel
|
||||
/// </summary>
|
||||
private readonly IKernel _kernel;
|
||||
private IApplicationHost _appHost;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="PluginSecurityManager" /> class.
|
||||
/// </summary>
|
||||
/// <param name="kernel">The kernel.</param>
|
||||
public PluginSecurityManager(IKernel kernel, IHttpClient httpClient, IJsonSerializer jsonSerializer, IApplicationPaths appPaths)
|
||||
public PluginSecurityManager(IApplicationHost appHost, IHttpClient httpClient, IJsonSerializer jsonSerializer, IApplicationPaths appPaths)
|
||||
{
|
||||
if (kernel == null)
|
||||
{
|
||||
throw new ArgumentNullException("kernel");
|
||||
}
|
||||
|
||||
if (httpClient == null)
|
||||
{
|
||||
throw new ArgumentNullException("httpClient");
|
||||
}
|
||||
|
||||
_kernel = kernel;
|
||||
|
||||
_appHost = appHost;
|
||||
_httpClient = httpClient;
|
||||
_jsonSerializer = jsonSerializer;
|
||||
MBRegistration.Init(appPaths);
|
||||
|
@ -98,7 +87,7 @@ namespace MediaBrowser.Common.Implementations.Security
|
|||
// Clear this so it will re-evaluate
|
||||
ResetSupporterInfo();
|
||||
// And we'll need to restart to re-evaluate the status of plug-ins
|
||||
_kernel.NotifyPendingRestart();
|
||||
_appHost.NotifyPendingRestart();
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -115,7 +104,7 @@ namespace MediaBrowser.Common.Implementations.Security
|
|||
{
|
||||
MBRegistration.LegacyKey = value;
|
||||
// And we'll need to restart to re-evaluate the status of plug-ins
|
||||
_kernel.NotifyPendingRestart();
|
||||
_appHost.NotifyPendingRestart();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,14 +1,8 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using MediaBrowser.Common.Configuration;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.IO;
|
||||
using MediaBrowser.Common.Configuration;
|
||||
using MediaBrowser.Common.Kernel;
|
||||
|
||||
namespace MediaBrowser.Common.Updates
|
||||
namespace MediaBrowser.Common.Implementations.Updates
|
||||
{
|
||||
public enum MBApplication
|
||||
{
|
|
@ -1,17 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Alchemy" version="2.2.1" targetFramework="net45" />
|
||||
<package id="NLog" version="2.0.0.2000" targetFramework="net45" />
|
||||
<package id="protobuf-net" version="2.0.0.621" targetFramework="net45" />
|
||||
<package id="Rx-Core" version="2.1.30214.0" targetFramework="net45" />
|
||||
<package id="Rx-Interfaces" version="2.1.30214.0" targetFramework="net45" />
|
||||
<package id="Rx-Linq" version="2.1.30214.0" targetFramework="net45" />
|
||||
<package id="ServiceStack" version="3.9.38" targetFramework="net45" />
|
||||
<package id="ServiceStack.Api.Swagger" version="3.9.38" targetFramework="net45" />
|
||||
<package id="ServiceStack.Common" version="3.9.38" targetFramework="net45" />
|
||||
<package id="ServiceStack.Logging.NLog" version="1.0.6.0" targetFramework="net45" />
|
||||
<package id="ServiceStack.OrmLite.SqlServer" version="3.9.39" targetFramework="net45" />
|
||||
<package id="ServiceStack.Redis" version="3.9.38" targetFramework="net45" />
|
||||
<package id="ServiceStack.Text" version="3.9.38" targetFramework="net45" />
|
||||
<package id="SimpleInjector" version="2.0.0-beta5" targetFramework="net45" />
|
||||
</packages>
|
|
@ -12,6 +12,27 @@ namespace MediaBrowser.Common
|
|||
/// </summary>
|
||||
public interface IApplicationHost
|
||||
{
|
||||
/// <summary>
|
||||
/// Performs the pending restart.
|
||||
/// </summary>
|
||||
void PerformPendingRestart();
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a value indicating whether this instance has pending kernel reload.
|
||||
/// </summary>
|
||||
/// <value><c>true</c> if this instance has pending kernel reload; otherwise, <c>false</c>.</value>
|
||||
bool HasPendingRestart { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Occurs when [has pending restart changed].
|
||||
/// </summary>
|
||||
event EventHandler HasPendingRestartChanged;
|
||||
|
||||
/// <summary>
|
||||
/// Notifies the pending restart.
|
||||
/// </summary>
|
||||
void NotifyPendingRestart();
|
||||
|
||||
/// <summary>
|
||||
/// Restarts this instance.
|
||||
/// </summary>
|
||||
|
|
|
@ -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()
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -59,12 +59,11 @@
|
|||
<Compile Include="IO\IIsoMount.cs" />
|
||||
<Compile Include="IO\ProgressStream.cs" />
|
||||
<Compile Include="IO\StreamDefaults.cs" />
|
||||
<Compile Include="Kernel\BasePeriodicWebSocketListener.cs" />
|
||||
<Compile Include="Net\BasePeriodicWebSocketListener.cs" />
|
||||
<Compile Include="Configuration\IApplicationPaths.cs" />
|
||||
<Compile Include="Kernel\IServerManager.cs" />
|
||||
<Compile Include="Kernel\IWebSocketListener.cs" />
|
||||
<Compile Include="Net\IServerManager.cs" />
|
||||
<Compile Include="Net\IWebSocketListener.cs" />
|
||||
<Compile Include="IApplicationHost.cs" />
|
||||
<Compile Include="Kernel\IKernel.cs" />
|
||||
<Compile Include="Net\IHttpClient.cs" />
|
||||
<Compile Include="Net\IHttpServer.cs" />
|
||||
<Compile Include="Net\INetworkManager.cs" />
|
||||
|
@ -94,15 +93,13 @@
|
|||
<Compile Include="ScheduledTasks\ScheduledTaskHelpers.cs" />
|
||||
<Compile Include="ScheduledTasks\StartupTrigger.cs" />
|
||||
<Compile Include="ScheduledTasks\SystemEventTrigger.cs" />
|
||||
<Compile Include="Kernel\BaseKernel.cs" />
|
||||
<Compile Include="Kernel\KernelContext.cs" />
|
||||
<Compile Include="Plugins\BasePlugin.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="ScheduledTasks\DailyTrigger.cs" />
|
||||
<Compile Include="ScheduledTasks\IntervalTrigger.cs" />
|
||||
<Compile Include="ScheduledTasks\TaskCompletionEventArgs.cs" />
|
||||
<Compile Include="ScheduledTasks\WeeklyTrigger.cs" />
|
||||
<Compile Include="Security\ISecurityManager.cs" />
|
||||
<Compile Include="Updates\ApplicationUpdater.cs" />
|
||||
<Compile Include="Updates\IPackageManager.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
|
|
@ -1,12 +1,11 @@
|
|||
using MediaBrowser.Common.Net;
|
||||
using MediaBrowser.Model.Logging;
|
||||
using MediaBrowser.Model.Logging;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace MediaBrowser.Common.Kernel
|
||||
namespace MediaBrowser.Common.Net
|
||||
{
|
||||
/// <summary>
|
||||
/// Starts sending data over a web socket periodically when a message is received, and then stops when a corresponding stop message is received
|
|
@ -3,7 +3,7 @@ using System.Collections.Generic;
|
|||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace MediaBrowser.Common.Kernel
|
||||
namespace MediaBrowser.Common.Net
|
||||
{
|
||||
public interface IServerManager : IDisposable
|
||||
{
|
|
@ -1,7 +1,6 @@
|
|||
using MediaBrowser.Common.Net;
|
||||
using System.Threading.Tasks;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace MediaBrowser.Common.Kernel
|
||||
namespace MediaBrowser.Common.Net
|
||||
{
|
||||
/// <summary>
|
||||
///This is an interface for listening to messages coming through a web socket connection
|
|
@ -1,7 +1,6 @@
|
|||
using MediaBrowser.Model.Tasks;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace MediaBrowser.Common.ScheduledTasks
|
||||
{
|
||||
|
@ -64,23 +63,5 @@ namespace MediaBrowser.Common.ScheduledTasks
|
|||
/// </summary>
|
||||
/// <value>The unique id.</value>
|
||||
Guid Id { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Executes the task
|
||||
/// </summary>
|
||||
/// <returns>Task.</returns>
|
||||
/// <exception cref="System.InvalidOperationException">Cannot execute a Task that is already running</exception>
|
||||
Task Execute();
|
||||
|
||||
/// <summary>
|
||||
/// Stops the task if it is currently executing
|
||||
/// </summary>
|
||||
/// <exception cref="System.InvalidOperationException">Cannot cancel a Task unless it is in the Running state.</exception>
|
||||
void Cancel();
|
||||
|
||||
/// <summary>
|
||||
/// Cancels if running.
|
||||
/// </summary>
|
||||
void CancelIfRunning();
|
||||
}
|
||||
}
|
|
@ -1,5 +1,8 @@
|
|||
using System;
|
||||
using MediaBrowser.Common.Events;
|
||||
using MediaBrowser.Model.Tasks;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace MediaBrowser.Common.ScheduledTasks
|
||||
{
|
||||
|
@ -36,5 +39,11 @@ namespace MediaBrowser.Common.ScheduledTasks
|
|||
/// </summary>
|
||||
/// <param name="tasks">The tasks.</param>
|
||||
void AddTasks(IEnumerable<IScheduledTask> tasks);
|
||||
|
||||
void Cancel(IScheduledTaskWorker task);
|
||||
Task Execute(IScheduledTaskWorker task);
|
||||
|
||||
event EventHandler<EventArgs> TaskExecuting;
|
||||
event EventHandler<GenericEventArgs<TaskResult>> TaskCompleted;
|
||||
}
|
||||
}
|
|
@ -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; }
|
||||
}
|
||||
}
|
|
@ -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)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,5 +1,4 @@
|
|||
using MediaBrowser.Common.IO;
|
||||
using MediaBrowser.Common.Kernel;
|
||||
using MediaBrowser.Common.ScheduledTasks;
|
||||
using MediaBrowser.Controller.Configuration;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
|
@ -17,7 +16,7 @@ namespace MediaBrowser.Controller.IO
|
|||
/// modify the directories that the system is watching for changes should use the methods of
|
||||
/// this class to do so. This way we can have the watchers correctly respond to only external changes.
|
||||
/// </summary>
|
||||
public class FileSystemManager : BaseManager<Kernel>
|
||||
public class FileSystemManager : IDisposable
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets or sets the directory watchers.
|
||||
|
@ -25,23 +24,15 @@ namespace MediaBrowser.Controller.IO
|
|||
/// <value>The directory watchers.</value>
|
||||
private DirectoryWatchers DirectoryWatchers { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The _logger
|
||||
/// </summary>
|
||||
private readonly ILogger _logger;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="FileSystemManager" /> class.
|
||||
/// </summary>
|
||||
/// <param name="kernel">The kernel.</param>
|
||||
/// <param name="logManager">The log manager.</param>
|
||||
/// <param name="taskManager">The task manager.</param>
|
||||
/// <param name="libraryManager">The library manager.</param>
|
||||
/// <param name="configurationManager">The configuration manager.</param>
|
||||
public FileSystemManager(Kernel kernel, ILogManager logManager, ITaskManager taskManager, ILibraryManager libraryManager, IServerConfigurationManager configurationManager)
|
||||
: base(kernel)
|
||||
public FileSystemManager(ILogManager logManager, ITaskManager taskManager, ILibraryManager libraryManager, IServerConfigurationManager configurationManager)
|
||||
{
|
||||
_logger = logManager.GetLogger("FileSystemManager");
|
||||
DirectoryWatchers = new DirectoryWatchers(logManager, taskManager, libraryManager, configurationManager);
|
||||
}
|
||||
|
||||
|
@ -113,14 +104,17 @@ namespace MediaBrowser.Controller.IO
|
|||
/// Releases unmanaged and - optionally - managed resources.
|
||||
/// </summary>
|
||||
/// <param name="dispose"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
|
||||
protected override void Dispose(bool dispose)
|
||||
protected virtual void Dispose(bool dispose)
|
||||
{
|
||||
if (dispose)
|
||||
{
|
||||
DirectoryWatchers.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
base.Dispose(dispose);
|
||||
public void Dispose()
|
||||
{
|
||||
Dispose(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
10
MediaBrowser.Controller/IServerApplicationHost.cs
Normal file
10
MediaBrowser.Controller/IServerApplicationHost.cs
Normal file
|
@ -0,0 +1,10 @@
|
|||
using MediaBrowser.Common;
|
||||
using MediaBrowser.Model.System;
|
||||
|
||||
namespace MediaBrowser.Controller
|
||||
{
|
||||
public interface IServerApplicationHost : IApplicationHost
|
||||
{
|
||||
SystemInfo GetSystemInfo();
|
||||
}
|
||||
}
|
|
@ -1,5 +1,4 @@
|
|||
using MediaBrowser.Common.Configuration;
|
||||
using MediaBrowser.Common.Kernel;
|
||||
|
||||
namespace MediaBrowser.Controller
|
||||
{
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
using MediaBrowser.Common;
|
||||
using MediaBrowser.Common.Kernel;
|
||||
using MediaBrowser.Common.ScheduledTasks;
|
||||
using MediaBrowser.Controller.Configuration;
|
||||
using MediaBrowser.Controller.Drawing;
|
||||
|
@ -11,11 +10,9 @@ using MediaBrowser.Controller.MediaInfo;
|
|||
using MediaBrowser.Controller.Persistence;
|
||||
using MediaBrowser.Controller.Plugins;
|
||||
using MediaBrowser.Controller.Providers;
|
||||
using MediaBrowser.Controller.Updates;
|
||||
using MediaBrowser.Controller.Weather;
|
||||
using MediaBrowser.Model.Logging;
|
||||
using MediaBrowser.Model.Serialization;
|
||||
using MediaBrowser.Model.System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
@ -27,7 +24,7 @@ namespace MediaBrowser.Controller
|
|||
/// <summary>
|
||||
/// Class Kernel
|
||||
/// </summary>
|
||||
public class Kernel : BaseKernel, IDisposable
|
||||
public class Kernel : IDisposable
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets the instance.
|
||||
|
@ -60,12 +57,25 @@ namespace MediaBrowser.Controller
|
|||
public ProviderManager ProviderManager { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the kernel context.
|
||||
/// Gets the name of the web application that can be used for url building.
|
||||
/// All api urls will be of the form {protocol}://{host}:{port}/{appname}/...
|
||||
/// </summary>
|
||||
/// <value>The kernel context.</value>
|
||||
public override KernelContext KernelContext
|
||||
/// <value>The name of the web application.</value>
|
||||
public string WebApplicationName
|
||||
{
|
||||
get { return KernelContext.Server; }
|
||||
get { return "mediabrowser"; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the HTTP server URL prefix.
|
||||
/// </summary>
|
||||
/// <value>The HTTP server URL prefix.</value>
|
||||
public virtual string HttpServerUrlPrefix
|
||||
{
|
||||
get
|
||||
{
|
||||
return "http://+:" + _configurationManager.Configuration.HttpServerPortNumber + "/" + WebApplicationName + "/";
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -145,7 +155,7 @@ namespace MediaBrowser.Controller
|
|||
/// Gets the UDP server port number.
|
||||
/// </summary>
|
||||
/// <value>The UDP server port number.</value>
|
||||
public override int UdpServerPortNumber
|
||||
public int UdpServerPortNumber
|
||||
{
|
||||
get { return 7359; }
|
||||
}
|
||||
|
@ -154,6 +164,7 @@ namespace MediaBrowser.Controller
|
|||
|
||||
private readonly IServerConfigurationManager _configurationManager;
|
||||
private readonly ILogManager _logManager;
|
||||
private IApplicationHost ApplicationHost { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Creates a kernel based on a Data path, which is akin to our current programdata path
|
||||
|
@ -164,10 +175,10 @@ namespace MediaBrowser.Controller
|
|||
/// <param name="configurationManager">The configuration manager.</param>
|
||||
/// <exception cref="System.ArgumentNullException">isoManager</exception>
|
||||
public Kernel(IApplicationHost appHost, IXmlSerializer xmlSerializer, ILogManager logManager, IServerConfigurationManager configurationManager)
|
||||
: base(appHost, logManager, configurationManager)
|
||||
{
|
||||
Instance = this;
|
||||
|
||||
ApplicationHost = appHost;
|
||||
_configurationManager = configurationManager;
|
||||
_xmlSerializer = xmlSerializer;
|
||||
_logManager = logManager;
|
||||
|
@ -207,10 +218,8 @@ namespace MediaBrowser.Controller
|
|||
/// Performs initializations that can be reloaded at anytime
|
||||
/// </summary>
|
||||
/// <returns>Task.</returns>
|
||||
protected override async void ReloadInternal()
|
||||
public async Task Init()
|
||||
{
|
||||
base.ReloadInternal();
|
||||
|
||||
FindParts();
|
||||
|
||||
await LoadRepositories().ConfigureAwait(false);
|
||||
|
@ -306,27 +315,8 @@ namespace MediaBrowser.Controller
|
|||
{
|
||||
DisposeFileSystemManager();
|
||||
|
||||
FileSystemManager = new FileSystemManager(this, _logManager, ApplicationHost.Resolve<ITaskManager>(), ApplicationHost.Resolve<ILibraryManager>(), _configurationManager);
|
||||
FileSystemManager = new FileSystemManager(_logManager, ApplicationHost.Resolve<ITaskManager>(), ApplicationHost.Resolve<ILibraryManager>(), _configurationManager);
|
||||
FileSystemManager.StartWatchers();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the system info.
|
||||
/// </summary>
|
||||
/// <returns>SystemInfo.</returns>
|
||||
public override SystemInfo GetSystemInfo()
|
||||
{
|
||||
var info = base.GetSystemInfo();
|
||||
|
||||
var installationManager = ApplicationHost.Resolve<IInstallationManager>();
|
||||
|
||||
if (installationManager != null)
|
||||
{
|
||||
info.InProgressInstallations = installationManager.CurrentInstallations.Select(i => i.Item1).ToArray();
|
||||
info.CompletedInstallations = installationManager.CompletedInstallations.ToArray();
|
||||
}
|
||||
|
||||
return info;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -70,7 +70,6 @@
|
|||
<Compile Include="..\SharedVersion.cs">
|
||||
<Link>Properties\SharedVersion.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="BaseManager.cs" />
|
||||
<Compile Include="Configuration\IServerConfigurationManager.cs" />
|
||||
<Compile Include="Drawing\ImageExtensions.cs" />
|
||||
<Compile Include="Drawing\ImageHeader.cs" />
|
||||
|
@ -105,6 +104,7 @@
|
|||
<Compile Include="IO\FileSystem.cs" />
|
||||
<Compile Include="IO\FileSystemManager.cs" />
|
||||
<Compile Include="IO\NativeMethods.cs" />
|
||||
<Compile Include="IServerApplicationHost.cs" />
|
||||
<Compile Include="IServerApplicationPaths.cs" />
|
||||
<Compile Include="Library\ChildrenChangedEventArgs.cs" />
|
||||
<Compile Include="Library\DtoBuilder.cs" />
|
||||
|
|
|
@ -18,7 +18,7 @@ namespace MediaBrowser.Controller.Providers
|
|||
/// <summary>
|
||||
/// Class ProviderManager
|
||||
/// </summary>
|
||||
public class ProviderManager : BaseManager<Kernel>
|
||||
public class ProviderManager : IDisposable
|
||||
{
|
||||
/// <summary>
|
||||
/// The remote image cache
|
||||
|
@ -42,7 +42,9 @@ namespace MediaBrowser.Controller.Providers
|
|||
private readonly IHttpClient _httpClient;
|
||||
|
||||
private IServerConfigurationManager ConfigurationManager { get; set; }
|
||||
|
||||
|
||||
private Kernel Kernel { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="ProviderManager" /> class.
|
||||
/// </summary>
|
||||
|
@ -50,9 +52,9 @@ namespace MediaBrowser.Controller.Providers
|
|||
/// <param name="httpClient">The HTTP client.</param>
|
||||
/// <param name="logger">The logger.</param>
|
||||
public ProviderManager(Kernel kernel, IHttpClient httpClient, ILogger logger, IServerConfigurationManager configurationManager)
|
||||
: base(kernel)
|
||||
{
|
||||
_logger = logger;
|
||||
Kernel = kernel;
|
||||
_httpClient = httpClient;
|
||||
ConfigurationManager = configurationManager;
|
||||
_remoteImageCache = new FileSystemRepository(ImagesDataPath);
|
||||
|
@ -354,14 +356,17 @@ namespace MediaBrowser.Controller.Providers
|
|||
/// Releases unmanaged and - optionally - managed resources.
|
||||
/// </summary>
|
||||
/// <param name="dispose"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
|
||||
protected override void Dispose(bool dispose)
|
||||
protected virtual void Dispose(bool dispose)
|
||||
{
|
||||
if (dispose)
|
||||
{
|
||||
_remoteImageCache.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
base.Dispose(dispose);
|
||||
public void Dispose()
|
||||
{
|
||||
Dispose(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,20 +18,6 @@ namespace MediaBrowser.Model.Configuration
|
|||
[ProtoMember(1)]
|
||||
public bool EnableDebugLevelLogging { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a value indicating whether [enable HTTP level logging].
|
||||
/// </summary>
|
||||
/// <value><c>true</c> if [enable HTTP level logging]; otherwise, <c>false</c>.</value>
|
||||
[ProtoMember(56)]
|
||||
public bool EnableHttpLevelLogging { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the HTTP server port number.
|
||||
/// </summary>
|
||||
/// <value>The HTTP server port number.</value>
|
||||
[ProtoMember(2)]
|
||||
public int HttpServerPortNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Enable automatically and silently updating of the application
|
||||
/// </summary>
|
||||
|
@ -59,13 +45,6 @@ namespace MediaBrowser.Model.Configuration
|
|||
[ProtoMember(58)]
|
||||
public bool RunAtStartup { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the legacy web socket port number.
|
||||
/// </summary>
|
||||
/// <value>The legacy web socket port number.</value>
|
||||
[ProtoMember(59)]
|
||||
public int LegacyWebSocketPortNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a value indicating whether this instance is first run.
|
||||
/// </summary>
|
||||
|
@ -78,14 +57,9 @@ namespace MediaBrowser.Model.Configuration
|
|||
/// </summary>
|
||||
public BaseApplicationConfiguration()
|
||||
{
|
||||
HttpServerPortNumber = 8096;
|
||||
LegacyWebSocketPortNumber = 8945;
|
||||
|
||||
EnableAutoUpdate = true;
|
||||
LogFileRetentionDays = 14;
|
||||
|
||||
EnableHttpLevelLogging = true;
|
||||
|
||||
#if (DEBUG)
|
||||
EnableDebugLevelLogging = true;
|
||||
#endif
|
||||
|
|
|
@ -12,6 +12,27 @@ namespace MediaBrowser.Model.Configuration
|
|||
[ProtoContract]
|
||||
public class ServerConfiguration : BaseApplicationConfiguration
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets or sets a value indicating whether [enable HTTP level logging].
|
||||
/// </summary>
|
||||
/// <value><c>true</c> if [enable HTTP level logging]; otherwise, <c>false</c>.</value>
|
||||
[ProtoMember(56)]
|
||||
public bool EnableHttpLevelLogging { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the HTTP server port number.
|
||||
/// </summary>
|
||||
/// <value>The HTTP server port number.</value>
|
||||
[ProtoMember(2)]
|
||||
public int HttpServerPortNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the legacy web socket port number.
|
||||
/// </summary>
|
||||
/// <value>The legacy web socket port number.</value>
|
||||
[ProtoMember(59)]
|
||||
public int LegacyWebSocketPortNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a value indicating whether [enable internet providers].
|
||||
/// </summary>
|
||||
|
@ -255,6 +276,10 @@ namespace MediaBrowser.Model.Configuration
|
|||
public ServerConfiguration()
|
||||
: base()
|
||||
{
|
||||
HttpServerPortNumber = 8096;
|
||||
LegacyWebSocketPortNumber = 8945;
|
||||
EnableHttpLevelLogging = true;
|
||||
|
||||
#if (DEBUG)
|
||||
EnableDeveloperTools = true;
|
||||
#endif
|
||||
|
|
|
@ -14,7 +14,7 @@ using System.Linq;
|
|||
using System.Threading.Tasks;
|
||||
using MimeTypes = MediaBrowser.Common.Net.MimeTypes;
|
||||
|
||||
namespace MediaBrowser.Common.Implementations.HttpServer
|
||||
namespace MediaBrowser.Server.Implementations.HttpServer
|
||||
{
|
||||
/// <summary>
|
||||
/// Class BaseRestService
|
|
@ -1,6 +1,6 @@
|
|||
using Funq;
|
||||
using MediaBrowser.Common;
|
||||
using MediaBrowser.Common.Extensions;
|
||||
using MediaBrowser.Common.Kernel;
|
||||
using MediaBrowser.Common.Net;
|
||||
using MediaBrowser.Model.Logging;
|
||||
using MediaBrowser.Model.Serialization;
|
||||
|
@ -26,7 +26,7 @@ using System.Reflection;
|
|||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace MediaBrowser.Common.Implementations.HttpServer
|
||||
namespace MediaBrowser.Server.Implementations.HttpServer
|
||||
{
|
||||
/// <summary>
|
||||
/// Class HttpServer
|
|
@ -7,7 +7,7 @@ using System.Threading.Tasks;
|
|||
using WebSocketMessageType = MediaBrowser.Common.Net.WebSocketMessageType;
|
||||
using WebSocketState = MediaBrowser.Common.Net.WebSocketState;
|
||||
|
||||
namespace MediaBrowser.Common.Implementations.HttpServer
|
||||
namespace MediaBrowser.Server.Implementations.HttpServer
|
||||
{
|
||||
/// <summary>
|
||||
/// Class NativeWebSocket
|
|
@ -1,9 +1,9 @@
|
|||
using MediaBrowser.Common.Kernel;
|
||||
using MediaBrowser.Common;
|
||||
using MediaBrowser.Common.Net;
|
||||
using MediaBrowser.Model.Logging;
|
||||
using MediaBrowser.Model.Serialization;
|
||||
|
||||
namespace MediaBrowser.Common.Implementations.HttpServer
|
||||
namespace MediaBrowser.Server.Implementations.HttpServer
|
||||
{
|
||||
/// <summary>
|
||||
/// Class ServerFactory
|
|
@ -2,7 +2,7 @@
|
|||
using System.IO;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace MediaBrowser.Common.Implementations.HttpServer
|
||||
namespace MediaBrowser.Server.Implementations.HttpServer
|
||||
{
|
||||
/// <summary>
|
||||
/// Class StreamWriter
|
|
@ -2,7 +2,7 @@
|
|||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
|
||||
namespace MediaBrowser.Common.Implementations.HttpServer
|
||||
namespace MediaBrowser.Server.Implementations.HttpServer
|
||||
{
|
||||
/// <summary>
|
||||
/// Class GetDashboardResource
|
|
@ -32,6 +32,9 @@
|
|||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Alchemy">
|
||||
<HintPath>..\packages\Alchemy.2.2.1\lib\net40\Alchemy.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="BdInfo, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\packages\MediaBrowser.BdInfo.1.0.0.2\lib\net45\BdInfo.dll</HintPath>
|
||||
|
@ -39,6 +42,39 @@
|
|||
<Reference Include="MoreLinq">
|
||||
<HintPath>..\packages\morelinq.1.0.15631-beta\lib\net35\MoreLinq.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="NLog">
|
||||
<HintPath>..\packages\NLog.2.0.0.2000\lib\net40\NLog.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="ServiceStack">
|
||||
<HintPath>..\packages\ServiceStack.3.9.38\lib\net35\ServiceStack.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="ServiceStack.Api.Swagger">
|
||||
<HintPath>..\packages\ServiceStack.Api.Swagger.3.9.38\lib\net35\ServiceStack.Api.Swagger.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="ServiceStack.Common">
|
||||
<HintPath>..\packages\ServiceStack.Common.3.9.38\lib\net35\ServiceStack.Common.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="ServiceStack.Interfaces">
|
||||
<HintPath>..\packages\ServiceStack.Common.3.9.38\lib\net35\ServiceStack.Interfaces.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="ServiceStack.Logging.NLog">
|
||||
<HintPath>..\packages\ServiceStack.Logging.NLog.1.0.6.0\lib\net35\ServiceStack.Logging.NLog.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="ServiceStack.OrmLite">
|
||||
<HintPath>..\packages\ServiceStack.OrmLite.SqlServer.3.9.39\lib\ServiceStack.OrmLite.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="ServiceStack.OrmLite.SqlServer">
|
||||
<HintPath>..\packages\ServiceStack.OrmLite.SqlServer.3.9.39\lib\ServiceStack.OrmLite.SqlServer.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="ServiceStack.Redis">
|
||||
<HintPath>..\packages\ServiceStack.Redis.3.9.38\lib\net35\ServiceStack.Redis.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="ServiceStack.ServiceInterface">
|
||||
<HintPath>..\packages\ServiceStack.3.9.38\lib\net35\ServiceStack.ServiceInterface.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="ServiceStack.Text">
|
||||
<HintPath>..\packages\ServiceStack.Text.3.9.38\lib\net35\ServiceStack.Text.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Data.SQLite">
|
||||
|
@ -47,6 +83,16 @@
|
|||
<Reference Include="System.Data.SQLite.Linq">
|
||||
<HintPath>..\packages\System.Data.SQLite.1.0.84.0\lib\net45\System.Data.SQLite.Linq.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Reactive.Core">
|
||||
<HintPath>..\packages\Rx-Core.2.1.30214.0\lib\Net45\System.Reactive.Core.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Reactive.Interfaces">
|
||||
<HintPath>..\packages\Rx-Interfaces.2.1.30214.0\lib\Net45\System.Reactive.Interfaces.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Reactive.Linq">
|
||||
<HintPath>..\packages\Rx-Linq.2.1.30214.0\lib\Net45\System.Reactive.Linq.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Web" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
|
@ -59,6 +105,12 @@
|
|||
</Compile>
|
||||
<Compile Include="BdInfo\BdInfoExaminer.cs" />
|
||||
<Compile Include="Configuration\ServerConfigurationManager.cs" />
|
||||
<Compile Include="HttpServer\BaseRestService.cs" />
|
||||
<Compile Include="HttpServer\HttpServer.cs" />
|
||||
<Compile Include="HttpServer\NativeWebSocket.cs" />
|
||||
<Compile Include="HttpServer\ServerFactory.cs" />
|
||||
<Compile Include="HttpServer\StreamWriter.cs" />
|
||||
<Compile Include="HttpServer\SwaggerService.cs" />
|
||||
<Compile Include="Library\CoreResolutionIgnoreRule.cs" />
|
||||
<Compile Include="Library\LibraryManager.cs" />
|
||||
<Compile Include="Library\ResolverHelper.cs" />
|
||||
|
@ -82,13 +134,18 @@
|
|||
<Compile Include="ScheduledTasks\ImageCleanupTask.cs" />
|
||||
<Compile Include="ScheduledTasks\PluginUpdateTask.cs" />
|
||||
<Compile Include="ServerApplicationPaths.cs" />
|
||||
<Compile Include="ServerManager\ServerManager.cs" />
|
||||
<Compile Include="ServerManager\WebSocketConnection.cs" />
|
||||
<Compile Include="Sqlite\SQLiteDisplayPreferencesRepository.cs" />
|
||||
<Compile Include="Sqlite\SQLiteExtensions.cs" />
|
||||
<Compile Include="Sqlite\SQLiteItemRepository.cs" />
|
||||
<Compile Include="Sqlite\SQLiteRepository.cs" />
|
||||
<Compile Include="Sqlite\SQLiteUserDataRepository.cs" />
|
||||
<Compile Include="Sqlite\SQLiteUserRepository.cs" />
|
||||
<Compile Include="Udp\UdpServer.cs" />
|
||||
<Compile Include="Updates\InstallationManager.cs" />
|
||||
<Compile Include="WebSocket\AlchemyServer.cs" />
|
||||
<Compile Include="WebSocket\AlchemyWebSocket.cs" />
|
||||
<Compile Include="WorldWeatherOnline\WeatherProvider.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
@ -110,6 +167,49 @@
|
|||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="README.txt" />
|
||||
<Content Include="swagger-ui\css\screen.css">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="swagger-ui\images\pet_store_api.png">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="swagger-ui\images\wordnik_api.png">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="swagger-ui\index.html">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="swagger-ui\lib\backbone-min.js">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="swagger-ui\lib\handlebars.runtime-1.0.0.beta.6.js">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="swagger-ui\lib\jquery.ba-bbq.min.js">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="swagger-ui\lib\jquery.min.js">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="swagger-ui\lib\jquery.slideto.min.js">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="swagger-ui\lib\jquery.wiggle.min.js">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="swagger-ui\lib\swagger.js">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="swagger-ui\lib\underscore-min.js">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="swagger-ui\swagger-ui.js">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="swagger-ui\swagger-ui.min.js">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="x64\SQLite.Interop.dll">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
|
@ -119,6 +219,7 @@
|
|||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="packages.config" />
|
||||
<EmbeddedResource Include="ServerManager\RegisterServer.bat" />
|
||||
</ItemGroup>
|
||||
<ItemGroup />
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
using MediaBrowser.Common.Configuration;
|
||||
using MediaBrowser.Common.Kernel;
|
||||
using MediaBrowser.Common;
|
||||
using MediaBrowser.Common.Net;
|
||||
using MediaBrowser.Controller;
|
||||
using MediaBrowser.Controller.Configuration;
|
||||
using MediaBrowser.Model.Logging;
|
||||
using MediaBrowser.Model.Serialization;
|
||||
using System;
|
||||
|
@ -15,7 +16,7 @@ using System.Text;
|
|||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace MediaBrowser.Common.Implementations.ServerManager
|
||||
namespace MediaBrowser.Server.Implementations.ServerManager
|
||||
{
|
||||
/// <summary>
|
||||
/// Manages the Http Server, Udp Server and WebSocket connections
|
||||
|
@ -73,16 +74,11 @@ namespace MediaBrowser.Common.Implementations.ServerManager
|
|||
/// </summary>
|
||||
private readonly IApplicationHost _applicationHost;
|
||||
|
||||
/// <summary>
|
||||
/// The _kernel
|
||||
/// </summary>
|
||||
private readonly IKernel _kernel;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the configuration manager.
|
||||
/// </summary>
|
||||
/// <value>The configuration manager.</value>
|
||||
private IConfigurationManager ConfigurationManager { get; set; }
|
||||
private IServerConfigurationManager ConfigurationManager { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether [supports web socket].
|
||||
|
@ -99,7 +95,7 @@ namespace MediaBrowser.Common.Implementations.ServerManager
|
|||
/// <value>The web socket port number.</value>
|
||||
public int WebSocketPortNumber
|
||||
{
|
||||
get { return SupportsNativeWebSocket ? ConfigurationManager.CommonConfiguration.HttpServerPortNumber : ConfigurationManager.CommonConfiguration.LegacyWebSocketPortNumber; }
|
||||
get { return SupportsNativeWebSocket ? ConfigurationManager.Configuration.HttpServerPortNumber : ConfigurationManager.Configuration.LegacyWebSocketPortNumber; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -108,26 +104,23 @@ namespace MediaBrowser.Common.Implementations.ServerManager
|
|||
/// <value>The web socket listeners.</value>
|
||||
private readonly List<IWebSocketListener> _webSocketListeners = new List<IWebSocketListener>();
|
||||
|
||||
private Kernel _kernel;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="ServerManager" /> class.
|
||||
/// </summary>
|
||||
/// <param name="applicationHost">The application host.</param>
|
||||
/// <param name="kernel">The kernel.</param>
|
||||
/// <param name="networkManager">The network manager.</param>
|
||||
/// <param name="jsonSerializer">The json serializer.</param>
|
||||
/// <param name="logger">The logger.</param>
|
||||
/// <param name="configurationManager">The configuration manager.</param>
|
||||
/// <exception cref="System.ArgumentNullException">applicationHost</exception>
|
||||
public ServerManager(IApplicationHost applicationHost, IKernel kernel, INetworkManager networkManager, IJsonSerializer jsonSerializer, ILogger logger, IConfigurationManager configurationManager)
|
||||
public ServerManager(IApplicationHost applicationHost, INetworkManager networkManager, IJsonSerializer jsonSerializer, ILogger logger, IServerConfigurationManager configurationManager, Kernel kernel)
|
||||
{
|
||||
if (applicationHost == null)
|
||||
{
|
||||
throw new ArgumentNullException("applicationHost");
|
||||
}
|
||||
if (kernel == null)
|
||||
{
|
||||
throw new ArgumentNullException("kernel");
|
||||
}
|
||||
if (networkManager == null)
|
||||
{
|
||||
throw new ArgumentNullException("networkManager");
|
||||
|
@ -143,10 +136,10 @@ namespace MediaBrowser.Common.Implementations.ServerManager
|
|||
|
||||
_logger = logger;
|
||||
_jsonSerializer = jsonSerializer;
|
||||
_kernel = kernel;
|
||||
_applicationHost = applicationHost;
|
||||
_networkManager = networkManager;
|
||||
ConfigurationManager = configurationManager;
|
||||
_kernel = kernel;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -175,17 +168,11 @@ namespace MediaBrowser.Common.Implementations.ServerManager
|
|||
/// </summary>
|
||||
private void ReloadExternalWebSocketServer()
|
||||
{
|
||||
// Avoid windows firewall prompts in the ui
|
||||
if (_kernel.KernelContext != KernelContext.Server)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
DisposeExternalWebSocketServer();
|
||||
|
||||
ExternalWebSocketServer = _applicationHost.Resolve<IWebSocketServer>();
|
||||
|
||||
ExternalWebSocketServer.Start(ConfigurationManager.CommonConfiguration.LegacyWebSocketPortNumber);
|
||||
ExternalWebSocketServer.Start(ConfigurationManager.Configuration.LegacyWebSocketPortNumber);
|
||||
ExternalWebSocketServer.WebSocketConnected += HttpServer_WebSocketConnected;
|
||||
}
|
||||
|
||||
|
@ -208,7 +195,7 @@ namespace MediaBrowser.Common.Implementations.ServerManager
|
|||
try
|
||||
{
|
||||
HttpServer = _applicationHost.Resolve<IHttpServer>();
|
||||
HttpServer.EnableHttpRequestLogging = ConfigurationManager.CommonConfiguration.EnableHttpLevelLogging;
|
||||
HttpServer.EnableHttpRequestLogging = ConfigurationManager.Configuration.EnableHttpLevelLogging;
|
||||
HttpServer.Start(_kernel.HttpServerUrlPrefix);
|
||||
}
|
||||
catch (HttpListenerException ex)
|
||||
|
@ -275,12 +262,6 @@ namespace MediaBrowser.Common.Implementations.ServerManager
|
|||
return;
|
||||
}
|
||||
|
||||
// Avoid windows firewall prompts in the ui
|
||||
if (_kernel.KernelContext != KernelContext.Server)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
DisposeUdpServer();
|
||||
|
||||
try
|
||||
|
@ -305,7 +286,9 @@ namespace MediaBrowser.Common.Implementations.ServerManager
|
|||
/// <param name="e">The <see cref="UdpMessageReceivedEventArgs" /> instance containing the event data.</param>
|
||||
async void UdpServer_MessageReceived(object sender, UdpMessageReceivedEventArgs e)
|
||||
{
|
||||
var expectedMessage = String.Format("who is MediaBrowser{0}?", _kernel.KernelContext);
|
||||
var context = "Server";
|
||||
|
||||
var expectedMessage = String.Format("who is MediaBrowser{0}?", context);
|
||||
var expectedMessageBytes = Encoding.UTF8.GetBytes(expectedMessage);
|
||||
|
||||
if (expectedMessageBytes.SequenceEqual(e.Bytes))
|
||||
|
@ -313,7 +296,7 @@ namespace MediaBrowser.Common.Implementations.ServerManager
|
|||
_logger.Info("Received UDP server request from " + e.RemoteEndPoint);
|
||||
|
||||
// Send a response back with our ip address and port
|
||||
var response = String.Format("MediaBrowser{0}|{1}:{2}", _kernel.KernelContext, _networkManager.GetLocalIpAddress(), _kernel.UdpServerPortNumber);
|
||||
var response = String.Format("MediaBrowser{0}|{1}:{2}", context, _networkManager.GetLocalIpAddress(), _kernel.UdpServerPortNumber);
|
||||
|
||||
await UdpServer.SendAsync(Encoding.UTF8.GetBytes(response), e.RemoteEndPoint);
|
||||
}
|
||||
|
@ -447,7 +430,7 @@ namespace MediaBrowser.Common.Implementations.ServerManager
|
|||
var tmpFile = Path.Combine(ConfigurationManager.CommonApplicationPaths.TempDirectory, Guid.NewGuid() + ".bat");
|
||||
|
||||
// Extract the bat file
|
||||
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("MediaBrowser.Common.Implementations.ServerManager.RegisterServer.bat"))
|
||||
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("MediaBrowser.Server.Implementations.ServerManager.RegisterServer.bat"))
|
||||
{
|
||||
using (var fileStream = File.Create(tmpFile))
|
||||
{
|
||||
|
@ -459,10 +442,10 @@ namespace MediaBrowser.Common.Implementations.ServerManager
|
|||
{
|
||||
FileName = tmpFile,
|
||||
|
||||
Arguments = string.Format("{0} {1} {2} {3}", ConfigurationManager.CommonConfiguration.HttpServerPortNumber,
|
||||
Arguments = string.Format("{0} {1} {2} {3}", ConfigurationManager.Configuration.HttpServerPortNumber,
|
||||
_kernel.HttpServerUrlPrefix,
|
||||
_kernel.UdpServerPortNumber,
|
||||
ConfigurationManager.CommonConfiguration.LegacyWebSocketPortNumber),
|
||||
ConfigurationManager.Configuration.LegacyWebSocketPortNumber),
|
||||
|
||||
CreateNoWindow = true,
|
||||
WindowStyle = ProcessWindowStyle.Hidden,
|
||||
|
@ -517,14 +500,14 @@ namespace MediaBrowser.Common.Implementations.ServerManager
|
|||
/// <exception cref="System.NotImplementedException"></exception>
|
||||
void _kernel_ConfigurationUpdated(object sender, EventArgs e)
|
||||
{
|
||||
HttpServer.EnableHttpRequestLogging = ConfigurationManager.CommonConfiguration.EnableHttpLevelLogging;
|
||||
HttpServer.EnableHttpRequestLogging = ConfigurationManager.Configuration.EnableHttpLevelLogging;
|
||||
|
||||
if (!string.Equals(HttpServer.UrlPrefix, _kernel.HttpServerUrlPrefix, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
ReloadHttpServer();
|
||||
}
|
||||
|
||||
if (!SupportsNativeWebSocket && ExternalWebSocketServer != null && ExternalWebSocketServer.Port != ConfigurationManager.CommonConfiguration.LegacyWebSocketPortNumber)
|
||||
if (!SupportsNativeWebSocket && ExternalWebSocketServer != null && ExternalWebSocketServer.Port != ConfigurationManager.Configuration.LegacyWebSocketPortNumber)
|
||||
{
|
||||
ReloadExternalWebSocketServer();
|
||||
}
|
|
@ -6,7 +6,7 @@ using System.IO;
|
|||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace MediaBrowser.Common.Implementations.ServerManager
|
||||
namespace MediaBrowser.Server.Implementations.ServerManager
|
||||
{
|
||||
/// <summary>
|
||||
/// Class WebSocketConnection
|
|
@ -1,5 +1,4 @@
|
|||
using MediaBrowser.Common.Configuration;
|
||||
using MediaBrowser.Common.Kernel;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Persistence;
|
||||
using MediaBrowser.Model.Entities;
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
using MediaBrowser.Common.Configuration;
|
||||
using MediaBrowser.Common.Kernel;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Persistence;
|
||||
using MediaBrowser.Model.Logging;
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
using MediaBrowser.Common.Configuration;
|
||||
using MediaBrowser.Common.Kernel;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Persistence;
|
||||
using MediaBrowser.Model.Logging;
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
using MediaBrowser.Common.Configuration;
|
||||
using MediaBrowser.Common.Kernel;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Persistence;
|
||||
using MediaBrowser.Model.Logging;
|
||||
|
|
|
@ -8,7 +8,7 @@ using System.Reactive.Linq;
|
|||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace MediaBrowser.Common.Implementations.Udp
|
||||
namespace MediaBrowser.Server.Implementations.Udp
|
||||
{
|
||||
/// <summary>
|
||||
/// Provides a Udp Server
|
|
@ -1,11 +1,9 @@
|
|||
using MediaBrowser.Common;
|
||||
using MediaBrowser.Common.Events;
|
||||
using MediaBrowser.Common.Kernel;
|
||||
using MediaBrowser.Common.Net;
|
||||
using MediaBrowser.Common.Plugins;
|
||||
using MediaBrowser.Common.Progress;
|
||||
using MediaBrowser.Common.Updates;
|
||||
using MediaBrowser.Controller;
|
||||
using MediaBrowser.Controller.Updates;
|
||||
using MediaBrowser.Model.Logging;
|
||||
using MediaBrowser.Model.Serialization;
|
||||
|
@ -72,7 +70,7 @@ namespace MediaBrowser.Server.Implementations.Updates
|
|||
|
||||
EventHelper.QueueEventIfNotNull(PluginUpdated, this, new GenericEventArgs<Tuple<IPlugin, PackageVersionInfo>> { Argument = new Tuple<IPlugin, PackageVersionInfo>(plugin, newVersion) }, _logger);
|
||||
|
||||
Kernel.NotifyPendingRestart();
|
||||
ApplicationHost.NotifyPendingRestart();
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
@ -91,7 +89,7 @@ namespace MediaBrowser.Server.Implementations.Updates
|
|||
|
||||
EventHelper.QueueEventIfNotNull(PluginInstalled, this, new GenericEventArgs<PackageVersionInfo> { Argument = package }, _logger);
|
||||
|
||||
Kernel.NotifyPendingRestart();
|
||||
ApplicationHost.NotifyPendingRestart();
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
@ -123,19 +121,16 @@ namespace MediaBrowser.Server.Implementations.Updates
|
|||
/// <value>The application host.</value>
|
||||
protected IApplicationHost ApplicationHost { get; private set; }
|
||||
|
||||
private IKernel Kernel { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="InstallationManager" /> class.
|
||||
/// </summary>
|
||||
/// <param name="kernel">The kernel.</param>
|
||||
/// <param name="httpClient">The HTTP client.</param>
|
||||
/// <param name="packageManager">The package manager.</param>
|
||||
/// <param name="jsonSerializer">The json serializer.</param>
|
||||
/// <param name="logger">The logger.</param>
|
||||
/// <param name="appHost">The app host.</param>
|
||||
/// <exception cref="System.ArgumentNullException">zipClient</exception>
|
||||
public InstallationManager(IKernel kernel, IHttpClient httpClient, IPackageManager packageManager, IJsonSerializer jsonSerializer, ILogger logger, IApplicationHost appHost)
|
||||
public InstallationManager(IHttpClient httpClient, IPackageManager packageManager, IJsonSerializer jsonSerializer, ILogger logger, IApplicationHost appHost)
|
||||
{
|
||||
if (packageManager == null)
|
||||
{
|
||||
|
@ -161,7 +156,6 @@ namespace MediaBrowser.Server.Implementations.Updates
|
|||
ApplicationHost = appHost;
|
||||
_packageManager = packageManager;
|
||||
_logger = logger;
|
||||
Kernel = kernel;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -454,7 +448,7 @@ namespace MediaBrowser.Server.Implementations.Updates
|
|||
|
||||
OnPluginUninstalled(plugin);
|
||||
|
||||
Kernel.NotifyPendingRestart();
|
||||
ApplicationHost.NotifyPendingRestart();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
@ -5,7 +5,7 @@ using MediaBrowser.Model.Logging;
|
|||
using System;
|
||||
using System.Net;
|
||||
|
||||
namespace MediaBrowser.Common.Implementations.WebSocket
|
||||
namespace MediaBrowser.Server.Implementations.WebSocket
|
||||
{
|
||||
/// <summary>
|
||||
/// Class AlchemyServer
|
|
@ -6,7 +6,7 @@ using System.Text;
|
|||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace MediaBrowser.Common.Implementations.WebSocket
|
||||
namespace MediaBrowser.Server.Implementations.WebSocket
|
||||
{
|
||||
/// <summary>
|
||||
/// Class AlchemyWebSocket
|
|
@ -1,6 +1,18 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Alchemy" version="2.2.1" targetFramework="net45" />
|
||||
<package id="MediaBrowser.BdInfo" version="1.0.0.2" targetFramework="net45" />
|
||||
<package id="morelinq" version="1.0.15631-beta" targetFramework="net45" />
|
||||
<package id="NLog" version="2.0.0.2000" targetFramework="net45" />
|
||||
<package id="Rx-Core" version="2.1.30214.0" targetFramework="net45" />
|
||||
<package id="Rx-Interfaces" version="2.1.30214.0" targetFramework="net45" />
|
||||
<package id="Rx-Linq" version="2.1.30214.0" targetFramework="net45" />
|
||||
<package id="ServiceStack" version="3.9.38" targetFramework="net45" />
|
||||
<package id="ServiceStack.Api.Swagger" version="3.9.38" targetFramework="net45" />
|
||||
<package id="ServiceStack.Common" version="3.9.38" targetFramework="net45" />
|
||||
<package id="ServiceStack.Logging.NLog" version="1.0.6.0" targetFramework="net45" />
|
||||
<package id="ServiceStack.OrmLite.SqlServer" version="3.9.39" targetFramework="net45" />
|
||||
<package id="ServiceStack.Redis" version="3.9.38" targetFramework="net45" />
|
||||
<package id="ServiceStack.Text" version="3.9.38" targetFramework="net45" />
|
||||
<package id="System.Data.SQLite" version="1.0.84.0" targetFramework="net45" />
|
||||
</packages>
|
Before Width: | Height: | Size: 824 B After Width: | Height: | Size: 824 B |
Before Width: | Height: | Size: 980 B After Width: | Height: | Size: 980 B |
|
@ -1,18 +1,17 @@
|
|||
using System.IO;
|
||||
using MediaBrowser.Common.Configuration;
|
||||
using MediaBrowser.Common.Configuration;
|
||||
using MediaBrowser.Common.Constants;
|
||||
using MediaBrowser.Common.Kernel;
|
||||
using MediaBrowser.Common.Updates;
|
||||
using MediaBrowser.Common.Implementations.Updates;
|
||||
using MediaBrowser.Controller;
|
||||
using MediaBrowser.Controller.Configuration;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Model.Logging;
|
||||
using MediaBrowser.Server.Implementations;
|
||||
using Microsoft.Win32;
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Net.Cache;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Media;
|
||||
|
@ -209,9 +208,9 @@ namespace MediaBrowser.ServerApplication
|
|||
/// Opens the dashboard page.
|
||||
/// </summary>
|
||||
/// <param name="page">The page.</param>
|
||||
public static void OpenDashboardPage(string page, User loggedInUser, IConfigurationManager configurationManager)
|
||||
public static void OpenDashboardPage(string page, User loggedInUser, IServerConfigurationManager configurationManager)
|
||||
{
|
||||
var url = "http://localhost:" + configurationManager.CommonConfiguration.HttpServerPortNumber + "/" +
|
||||
var url = "http://localhost:" + configurationManager.Configuration.HttpServerPortNumber + "/" +
|
||||
Kernel.Instance.WebApplicationName + "/dashboard/" + page;
|
||||
|
||||
if (loggedInUser != null)
|
||||
|
|
|
@ -2,12 +2,11 @@
|
|||
using MediaBrowser.Common;
|
||||
using MediaBrowser.Common.Configuration;
|
||||
using MediaBrowser.Common.Constants;
|
||||
using MediaBrowser.Common.Events;
|
||||
using MediaBrowser.Common.Implementations;
|
||||
using MediaBrowser.Common.Implementations.HttpServer;
|
||||
using MediaBrowser.Common.Implementations.Logging;
|
||||
using MediaBrowser.Common.Implementations.ScheduledTasks;
|
||||
using MediaBrowser.Common.IO;
|
||||
using MediaBrowser.Common.Kernel;
|
||||
using MediaBrowser.Common.Net;
|
||||
using MediaBrowser.Common.Updates;
|
||||
using MediaBrowser.Controller;
|
||||
using MediaBrowser.Controller.Configuration;
|
||||
|
@ -17,15 +16,18 @@ using MediaBrowser.Controller.Resolvers;
|
|||
using MediaBrowser.Controller.Updates;
|
||||
using MediaBrowser.IsoMounter;
|
||||
using MediaBrowser.Model.IO;
|
||||
using MediaBrowser.Model.Logging;
|
||||
using MediaBrowser.Model.MediaInfo;
|
||||
using MediaBrowser.Model.System;
|
||||
using MediaBrowser.Model.Updates;
|
||||
using MediaBrowser.Server.Implementations;
|
||||
using MediaBrowser.Server.Implementations.BdInfo;
|
||||
using MediaBrowser.Server.Implementations.Configuration;
|
||||
using MediaBrowser.Server.Implementations.HttpServer;
|
||||
using MediaBrowser.Server.Implementations.Library;
|
||||
using MediaBrowser.Server.Implementations.ServerManager;
|
||||
using MediaBrowser.Server.Implementations.Udp;
|
||||
using MediaBrowser.Server.Implementations.Updates;
|
||||
using MediaBrowser.Server.Implementations.WebSocket;
|
||||
using MediaBrowser.ServerApplication.Implementations;
|
||||
using MediaBrowser.WebDashboard.Api;
|
||||
using System;
|
||||
|
@ -41,16 +43,13 @@ namespace MediaBrowser.ServerApplication
|
|||
/// <summary>
|
||||
/// Class CompositionRoot
|
||||
/// </summary>
|
||||
public class ApplicationHost : BaseApplicationHost<ServerApplicationPaths>
|
||||
public class ApplicationHost : BaseApplicationHost<ServerApplicationPaths>, IServerApplicationHost
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets the server kernel.
|
||||
/// </summary>
|
||||
/// <value>The server kernel.</value>
|
||||
protected Kernel ServerKernel
|
||||
{
|
||||
get { return (Kernel)Kernel; }
|
||||
}
|
||||
protected Kernel ServerKernel { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the server configuration manager.
|
||||
|
@ -61,15 +60,6 @@ namespace MediaBrowser.ServerApplication
|
|||
get { return (IServerConfigurationManager)ConfigurationManager; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the kernel.
|
||||
/// </summary>
|
||||
/// <returns>IKernel.</returns>
|
||||
protected override IKernel GetKernel()
|
||||
{
|
||||
return new Kernel(this, XmlSerializer, LogManager, ServerConfigurationManager);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the name of the log file prefix.
|
||||
/// </summary>
|
||||
|
@ -88,30 +78,50 @@ namespace MediaBrowser.ServerApplication
|
|||
return new ServerConfigurationManager(ApplicationPaths, LogManager, XmlSerializer);
|
||||
}
|
||||
|
||||
private IInstallationManager InstallationManager { get; set; }
|
||||
private IServerManager ServerManager { get; set; }
|
||||
|
||||
public override async Task Init()
|
||||
{
|
||||
await base.Init().ConfigureAwait(false);
|
||||
|
||||
await ServerKernel.Init().ConfigureAwait(false);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Registers resources that classes will depend on
|
||||
/// </summary>
|
||||
protected override async Task RegisterResources()
|
||||
{
|
||||
ServerKernel = new Kernel(this, XmlSerializer, LogManager, ServerConfigurationManager);
|
||||
|
||||
await base.RegisterResources().ConfigureAwait(false);
|
||||
|
||||
RegisterSingleInstance<IServerApplicationHost>(this);
|
||||
RegisterSingleInstance<IServerApplicationPaths>(ApplicationPaths);
|
||||
|
||||
|
||||
RegisterSingleInstance(ServerKernel);
|
||||
RegisterSingleInstance(ServerConfigurationManager);
|
||||
|
||||
RegisterSingleInstance<IWebSocketServer>(() => new AlchemyServer(Logger));
|
||||
RegisterSingleInstance<IUdpServer>(new UdpServer(Logger), false);
|
||||
|
||||
RegisterSingleInstance<IIsoManager>(new PismoIsoManager(Logger));
|
||||
RegisterSingleInstance<IBlurayExaminer>(new BdInfoExaminer());
|
||||
RegisterSingleInstance<IZipClient>(new DotNetZipClient());
|
||||
RegisterSingleInstance(ServerFactory.CreateServer(this, ProtobufSerializer, Logger, "Media Browser", "index.html"), false);
|
||||
|
||||
ServerManager = new ServerManager(this, NetworkManager, JsonSerializer, Logger, ServerConfigurationManager, ServerKernel);
|
||||
RegisterSingleInstance(ServerManager);
|
||||
|
||||
var userManager = new UserManager(ServerKernel, Logger, ServerConfigurationManager);
|
||||
|
||||
RegisterSingleInstance<IUserManager>(userManager);
|
||||
|
||||
RegisterSingleInstance<ILibraryManager>(new LibraryManager(ServerKernel, Logger, TaskManager, userManager, ServerConfigurationManager));
|
||||
|
||||
RegisterSingleInstance<IInstallationManager>(new InstallationManager(Kernel, HttpClient, PackageManager, JsonSerializer, Logger, this));
|
||||
InstallationManager = new InstallationManager(HttpClient, PackageManager, JsonSerializer, Logger, this);
|
||||
RegisterSingleInstance(InstallationManager);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -121,6 +131,11 @@ namespace MediaBrowser.ServerApplication
|
|||
{
|
||||
base.FindParts();
|
||||
|
||||
Resolve<IHttpServer>().Init(GetExports<IRestfulService>(false));
|
||||
Resolve<IServerManager>().AddWebSocketListeners(GetExports<IWebSocketListener>(false));
|
||||
|
||||
Resolve<IServerManager>().Start();
|
||||
|
||||
Resolve<ILibraryManager>().AddParts(GetExports<IResolverIgnoreRule>(), GetExports<IVirtualFolderCreator>(), GetExports<IItemResolver>(), GetExports<IIntroProvider>());
|
||||
}
|
||||
|
||||
|
@ -157,19 +172,6 @@ namespace MediaBrowser.ServerApplication
|
|||
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>
|
||||
/// Gets the composable part assemblies.
|
||||
/// </summary>
|
||||
|
@ -195,7 +197,7 @@ namespace MediaBrowser.ServerApplication
|
|||
yield return typeof(SystemInfo).Assembly;
|
||||
|
||||
// Include composable parts in the Common assembly
|
||||
yield return typeof(IKernel).Assembly;
|
||||
yield return typeof(IApplicationHost).Assembly;
|
||||
|
||||
// Include composable parts in the Controller assembly
|
||||
yield return typeof(Kernel).Assembly;
|
||||
|
@ -210,6 +212,25 @@ namespace MediaBrowser.ServerApplication
|
|||
yield return GetType().Assembly;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the system status.
|
||||
/// </summary>
|
||||
/// <returns>SystemInfo.</returns>
|
||||
public virtual SystemInfo GetSystemInfo()
|
||||
{
|
||||
return new SystemInfo
|
||||
{
|
||||
HasPendingRestart = HasPendingRestart,
|
||||
Version = ApplicationVersion.ToString(),
|
||||
IsNetworkDeployed = CanSelfUpdate,
|
||||
WebSocketPortNumber = ServerManager.WebSocketPortNumber,
|
||||
SupportsNativeWebSocket = ServerManager.SupportsNativeWebSocket,
|
||||
FailedPluginAssemblies = FailedAssemblies.ToArray(),
|
||||
InProgressInstallations = InstallationManager.CurrentInstallations.Select(i => i.Item1).ToArray(),
|
||||
CompletedInstallations = InstallationManager.CompletedInstallations.ToArray()
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Shuts down.
|
||||
/// </summary>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
using MediaBrowser.Common;
|
||||
using MediaBrowser.Common.Configuration;
|
||||
using MediaBrowser.Controller.Configuration;
|
||||
using MediaBrowser.Controller.Library;
|
||||
using MediaBrowser.Controller.Plugins;
|
||||
using System.Linq;
|
||||
|
@ -20,14 +20,14 @@ namespace MediaBrowser.ServerApplication
|
|||
/// </summary>
|
||||
private readonly IUserManager _userManager;
|
||||
|
||||
private readonly IConfigurationManager _configurationManager;
|
||||
private readonly IServerConfigurationManager _configurationManager;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="StartupWizard" /> class.
|
||||
/// </summary>
|
||||
/// <param name="appHost">The app host.</param>
|
||||
/// <param name="userManager">The user manager.</param>
|
||||
public StartupWizard(IApplicationHost appHost, IUserManager userManager, IConfigurationManager configurationManager)
|
||||
public StartupWizard(IApplicationHost appHost, IUserManager userManager, IServerConfigurationManager configurationManager)
|
||||
{
|
||||
_appHost = appHost;
|
||||
_userManager = userManager;
|
||||
|
|
|
@ -1,11 +1,14 @@
|
|||
using MediaBrowser.Common.Events;
|
||||
using MediaBrowser.Common.Kernel;
|
||||
using MediaBrowser.Common.Net;
|
||||
using MediaBrowser.Common.Plugins;
|
||||
using MediaBrowser.Common.ScheduledTasks;
|
||||
using MediaBrowser.Controller;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Library;
|
||||
using MediaBrowser.Controller.Plugins;
|
||||
using MediaBrowser.Controller.Updates;
|
||||
using MediaBrowser.Model.Logging;
|
||||
using MediaBrowser.Model.Tasks;
|
||||
using MediaBrowser.Model.Updates;
|
||||
using System;
|
||||
|
||||
|
@ -43,7 +46,9 @@ namespace MediaBrowser.ServerApplication
|
|||
/// <summary>
|
||||
/// The _kernel
|
||||
/// </summary>
|
||||
private readonly IKernel _kernel;
|
||||
private readonly IServerApplicationHost _appHost;
|
||||
|
||||
private readonly ITaskManager _taskManager;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="WebSocketEvents" /> class.
|
||||
|
@ -51,14 +56,15 @@ namespace MediaBrowser.ServerApplication
|
|||
/// <param name="serverManager">The server manager.</param>
|
||||
/// <param name="logger">The logger.</param>
|
||||
/// <param name="userManager">The user manager.</param>
|
||||
public WebSocketEvents(IServerManager serverManager, IKernel kernel, ILogger logger, IUserManager userManager, ILibraryManager libraryManager, IInstallationManager installationManager)
|
||||
public WebSocketEvents(IServerManager serverManager, IServerApplicationHost appHost, ILogger logger, IUserManager userManager, ILibraryManager libraryManager, IInstallationManager installationManager, ITaskManager taskManager)
|
||||
{
|
||||
_serverManager = serverManager;
|
||||
_logger = logger;
|
||||
_userManager = userManager;
|
||||
_libraryManager = libraryManager;
|
||||
_installationManager = installationManager;
|
||||
_kernel = kernel;
|
||||
_appHost = appHost;
|
||||
_taskManager = taskManager;
|
||||
}
|
||||
|
||||
public void Run()
|
||||
|
@ -68,13 +74,27 @@ namespace MediaBrowser.ServerApplication
|
|||
|
||||
_libraryManager.LibraryChanged += libraryManager_LibraryChanged;
|
||||
|
||||
_kernel.HasPendingRestartChanged += kernel_HasPendingRestartChanged;
|
||||
_appHost.HasPendingRestartChanged += kernel_HasPendingRestartChanged;
|
||||
|
||||
_installationManager.PluginUninstalled += InstallationManager_PluginUninstalled;
|
||||
_installationManager.PackageInstalling += installationManager_PackageInstalling;
|
||||
_installationManager.PackageInstallationCancelled += installationManager_PackageInstallationCancelled;
|
||||
_installationManager.PackageInstallationCompleted += installationManager_PackageInstallationCompleted;
|
||||
_installationManager.PackageInstallationFailed += installationManager_PackageInstallationFailed;
|
||||
|
||||
_taskManager.TaskExecuting += _taskManager_TaskExecuting;
|
||||
_taskManager.TaskCompleted += _taskManager_TaskCompleted;
|
||||
}
|
||||
|
||||
void _taskManager_TaskCompleted(object sender, GenericEventArgs<TaskResult> e)
|
||||
{
|
||||
_serverManager.SendWebSocketMessage("ScheduledTaskEndExecute", e.Argument);
|
||||
}
|
||||
|
||||
void _taskManager_TaskExecuting(object sender, EventArgs e)
|
||||
{
|
||||
var task = (IScheduledTask) sender;
|
||||
_serverManager.SendWebSocketMessage("ScheduledTaskBeginExecute", task.Name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -144,9 +164,7 @@ namespace MediaBrowser.ServerApplication
|
|||
/// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param>
|
||||
void kernel_HasPendingRestartChanged(object sender, EventArgs e)
|
||||
{
|
||||
var kernel = (IKernel)sender;
|
||||
|
||||
_serverManager.SendWebSocketMessage("HasPendingRestartChanged", kernel.GetSystemInfo());
|
||||
_serverManager.SendWebSocketMessage("HasPendingRestartChanged", _appHost.GetSystemInfo());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -196,7 +214,7 @@ namespace MediaBrowser.ServerApplication
|
|||
_installationManager.PackageInstallationCompleted -= installationManager_PackageInstallationCompleted;
|
||||
_installationManager.PackageInstallationFailed -= installationManager_PackageInstallationFailed;
|
||||
|
||||
_kernel.HasPendingRestartChanged -= kernel_HasPendingRestartChanged;
|
||||
_appHost.HasPendingRestartChanged -= kernel_HasPendingRestartChanged;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
using MediaBrowser.Common.Kernel;
|
||||
using MediaBrowser.Common.Net;
|
||||
using MediaBrowser.Common.ScheduledTasks;
|
||||
using MediaBrowser.Controller;
|
||||
using MediaBrowser.Controller.Library;
|
||||
|
@ -23,10 +23,7 @@ namespace MediaBrowser.WebDashboard.Api
|
|||
get { return "DashboardInfo"; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The _kernel
|
||||
/// </summary>
|
||||
private readonly Kernel _kernel;
|
||||
private readonly IServerApplicationHost _appHost;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the task manager.
|
||||
|
@ -42,14 +39,13 @@ namespace MediaBrowser.WebDashboard.Api
|
|||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="DashboardInfoWebSocketListener" /> class.
|
||||
/// </summary>
|
||||
/// <param name="kernel">The kernel.</param>
|
||||
/// <param name="logger">The logger.</param>
|
||||
/// <param name="taskManager">The task manager.</param>
|
||||
/// <param name="userManager">The user manager.</param>
|
||||
public DashboardInfoWebSocketListener(Kernel kernel, ILogger logger, ITaskManager taskManager, IUserManager userManager)
|
||||
public DashboardInfoWebSocketListener(IServerApplicationHost appHost, ILogger logger, ITaskManager taskManager, IUserManager userManager)
|
||||
: base(logger)
|
||||
{
|
||||
_kernel = kernel;
|
||||
_appHost = appHost;
|
||||
_taskManager = taskManager;
|
||||
_userManager = userManager;
|
||||
}
|
||||
|
@ -61,7 +57,7 @@ namespace MediaBrowser.WebDashboard.Api
|
|||
/// <returns>Task{IEnumerable{TaskInfo}}.</returns>
|
||||
protected override Task<DashboardInfo> GetDataToSend(object state)
|
||||
{
|
||||
return Task.FromResult(DashboardService.GetDashboardInfo(_kernel, Logger, _taskManager, _userManager));
|
||||
return Task.FromResult(DashboardService.GetDashboardInfo(_appHost, Logger, _taskManager, _userManager));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
using MediaBrowser.Common.Extensions;
|
||||
using MediaBrowser.Common.Implementations.HttpServer;
|
||||
using MediaBrowser.Common.Net;
|
||||
using MediaBrowser.Common.ScheduledTasks;
|
||||
using MediaBrowser.Controller;
|
||||
|
@ -7,6 +6,7 @@ using MediaBrowser.Controller.Library;
|
|||
using MediaBrowser.Controller.Plugins;
|
||||
using MediaBrowser.Model.Logging;
|
||||
using MediaBrowser.Model.Tasks;
|
||||
using MediaBrowser.Server.Implementations.HttpServer;
|
||||
using ServiceStack.ServiceHost;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
@ -89,15 +89,18 @@ namespace MediaBrowser.WebDashboard.Api
|
|||
/// </summary>
|
||||
private readonly IUserManager _userManager;
|
||||
|
||||
private readonly IServerApplicationHost _appHost;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="DashboardService" /> class.
|
||||
/// </summary>
|
||||
/// <param name="taskManager">The task manager.</param>
|
||||
/// <param name="userManager">The user manager.</param>
|
||||
public DashboardService(ITaskManager taskManager, IUserManager userManager)
|
||||
public DashboardService(ITaskManager taskManager, IUserManager userManager, IServerApplicationHost appHost)
|
||||
{
|
||||
_taskManager = taskManager;
|
||||
_userManager = userManager;
|
||||
_appHost = appHost;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -107,18 +110,17 @@ namespace MediaBrowser.WebDashboard.Api
|
|||
/// <returns>System.Object.</returns>
|
||||
public object Get(GetDashboardInfo request)
|
||||
{
|
||||
return GetDashboardInfo(Kernel.Instance, Logger, _taskManager, _userManager);
|
||||
return GetDashboardInfo(_appHost, Logger, _taskManager, _userManager);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the dashboard info.
|
||||
/// </summary>
|
||||
/// <param name="kernel">The kernel.</param>
|
||||
/// <param name="logger">The logger.</param>
|
||||
/// <param name="taskManager">The task manager.</param>
|
||||
/// <param name="userManager">The user manager.</param>
|
||||
/// <returns>DashboardInfo.</returns>
|
||||
public static DashboardInfo GetDashboardInfo(Kernel kernel, ILogger logger, ITaskManager taskManager, IUserManager userManager)
|
||||
public static DashboardInfo GetDashboardInfo(IServerApplicationHost appHost, ILogger logger, ITaskManager taskManager, IUserManager userManager)
|
||||
{
|
||||
var connections = userManager.ConnectedUsers.ToArray();
|
||||
|
||||
|
@ -126,7 +128,7 @@ namespace MediaBrowser.WebDashboard.Api
|
|||
|
||||
return new DashboardInfo
|
||||
{
|
||||
SystemInfo = kernel.GetSystemInfo(),
|
||||
SystemInfo = appHost.GetSystemInfo(),
|
||||
|
||||
RunningTasks = taskManager.ScheduledTasks.Where(i => i.State == TaskState.Running || i.State == TaskState.Cancelling)
|
||||
.Select(ScheduledTaskHelpers.GetTaskInfo)
|
||||
|
|
|
@ -82,7 +82,7 @@ pre, textarea.pre {
|
|||
background-attachment: fixed;
|
||||
}
|
||||
|
||||
.libraryPage, .libraryPage .ui-content {
|
||||
.libraryPage, .itemListContent {
|
||||
background: #262626!important;
|
||||
background-attachment: fixed!important;
|
||||
}
|
||||
|
|
|
@ -5,10 +5,10 @@
|
|||
</head>
|
||||
<body>
|
||||
<div id="itemListPage" data-role="page" class="page libraryPage" data-theme="a">
|
||||
<div data-role="content">
|
||||
<!-- <div style="text-align: right;">
|
||||
<div data-role="content" class="itemListContent">
|
||||
<div style="text-align: right;">
|
||||
<button type="button" onclick="$( '#optionsPanel', $.mobile.activePage ).panel( 'open' );" data-mini="true" data-inline="true">Options</button>
|
||||
</div>-->
|
||||
</div>
|
||||
<h1 id="itemName" class="listHeader"></h1>
|
||||
|
||||
|
||||
|
|
|
@ -88,10 +88,6 @@
|
|||
<Compile Include="ServerEntryPoint.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\MediaBrowser.Common.Implementations\MediaBrowser.Common.Implementations.csproj">
|
||||
<Project>{c4d2573a-3fd3-441f-81af-174ac4cd4e1d}</Project>
|
||||
<Name>MediaBrowser.Common.Implementations</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\MediaBrowser.Common\MediaBrowser.Common.csproj">
|
||||
<Project>{9142eefa-7570-41e1-bfcc-468bb571af2f}</Project>
|
||||
<Name>MediaBrowser.Common</Name>
|
||||
|
@ -104,6 +100,10 @@
|
|||
<Project>{7eeeb4bb-f3e8-48fc-b4c5-70f0fff8329b}</Project>
|
||||
<Name>MediaBrowser.Model</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\MediaBrowser.Server.Implementations\MediaBrowser.Server.Implementations.csproj">
|
||||
<Project>{2e781478-814d-4a48-9d80-bff206441a65}</Project>
|
||||
<Name>MediaBrowser.Server.Implementations</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="Html\index.html" />
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
|
||||
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
|
||||
<metadata>
|
||||
<id>MediaBrowser.Common.Internal</id>
|
||||
<version>3.0.33</version>
|
||||
|
@ -7,23 +7,21 @@
|
|||
<authors>Luke</authors>
|
||||
<owners>ebr,Luke,scottisafool</owners>
|
||||
<projectUrl>https://github.com/MediaBrowser/MediaBrowser</projectUrl>
|
||||
<iconUrl>http://www.mb3admin.com/images/mb3icons1-1.png</iconUrl>
|
||||
<iconUrl>http://www.mb3admin.com/images/mb3icons1-1.png</iconUrl>
|
||||
<requireLicenseAcceptance>false</requireLicenseAcceptance>
|
||||
<description>Contains common components shared by Media Browser Theatre and Media Browser Server. Not intended for plugin developer consumption.</description>
|
||||
<copyright>Copyright © Media Browser 2013</copyright>
|
||||
<dependencies>
|
||||
<dependency id="MediaBrowser.Common" version="3.0.33" />
|
||||
<dependency id="NLog" version="2.0.0.2000" />
|
||||
<dependency id="ServiceStack" version="3.9.38" />
|
||||
<dependency id="ServiceStack.Api.Swagger" version="3.9.38" />
|
||||
<dependency id="ServiceStack.Logging.NLog" version="1.0.6.0" />
|
||||
<dependency id="Rx-Main" version="2.1.30214.0" />
|
||||
<dependency id="ServiceStack.Text" version="3.9.38" />
|
||||
<dependency id="protobuf-net" version="2.0.0.621" />
|
||||
</dependencies>
|
||||
</metadata>
|
||||
<files>
|
||||
<file src="dlls\MediaBrowser.Common.Implementations.dll" target="lib\net45\MediaBrowser.Common.Implementations.dll" />
|
||||
<file src="dlls\MediaBrowser.IsoMounter.dll" target="lib\net45\MediaBrowser.IsoMounter.dll" />
|
||||
<file src="dlls\pfmclrapi.dll" target="lib\net45\pfmclrapi.dll" />
|
||||
<file src="dlls\Mediabrowser.PluginSecurity.dll" target="lib\net45\Mediabrowser.PluginSecurity.dll" />
|
||||
<file src="dlls\pfmclrapi.dll" target="lib\net45\pfmclrapi.dll" />
|
||||
</files>
|
||||
</package>
|
Loading…
Reference in a new issue