diff --git a/MediaBrowser.Common.Implementations/BaseApplicationHost.cs b/MediaBrowser.Common.Implementations/BaseApplicationHost.cs
index e8acf2975b..65d1703826 100644
--- a/MediaBrowser.Common.Implementations/BaseApplicationHost.cs
+++ b/MediaBrowser.Common.Implementations/BaseApplicationHost.cs
@@ -1,5 +1,13 @@
-using MediaBrowser.Common.Kernel;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Common.Implementations.HttpServer;
+using MediaBrowser.Common.Implementations.Udp;
+using MediaBrowser.Common.Implementations.WebSocket;
+using MediaBrowser.Common.Kernel;
+using MediaBrowser.Common.Net;
+using MediaBrowser.Common.ScheduledTasks;
+using MediaBrowser.Model.IO;
using MediaBrowser.Model.Logging;
+using MediaBrowser.Model.MediaInfo;
using MediaBrowser.Model.Serialization;
using SimpleInjector;
using System;
@@ -130,6 +138,18 @@ namespace MediaBrowser.Common.Implementations
///
/// IApplicationPaths.
protected abstract IApplicationPaths GetApplicationPaths();
+
+ ///
+ /// Finds the parts.
+ ///
+ protected virtual void FindParts()
+ {
+ Resolve().AddTasks(GetExports(false));
+
+ Resolve().Init(GetExports(false));
+
+ Resolve().AddWebSocketListeners(GetExports());
+ }
///
/// Discovers the types.
@@ -143,6 +163,24 @@ namespace MediaBrowser.Common.Implementations
AllConcreteTypes = AllTypes.Where(t => t.IsClass && !t.IsAbstract && !t.IsInterface && !t.IsGenericType).ToArray();
}
+ ///
+ /// Registers resources that classes will depend on
+ ///
+ protected virtual void RegisterResources(ITaskManager taskManager, INetworkManager networkManager, IServerManager serverManager)
+ {
+ RegisterSingleInstance(LogManager);
+ RegisterSingleInstance(Logger);
+
+ RegisterSingleInstance(ApplicationPaths);
+ RegisterSingleInstance(taskManager);
+ RegisterSingleInstance(() => new AlchemyServer(Logger));
+ RegisterSingleInstance(ProtobufSerializer);
+ RegisterSingleInstance(new UdpServer(Logger), false);
+
+ RegisterSingleInstance(networkManager);
+ RegisterSingleInstance(serverManager);
+ }
+
///
/// Gets a list of types within an assembly
/// This will handle situations that would normally throw an exception - such as a type within the assembly that depends on some other non-existant reference
diff --git a/MediaBrowser.Common.Implementations/ServerManager/ServerManager.cs b/MediaBrowser.Common.Implementations/ServerManager/ServerManager.cs
index bd584bf0cb..31f6922c23 100644
--- a/MediaBrowser.Common.Implementations/ServerManager/ServerManager.cs
+++ b/MediaBrowser.Common.Implementations/ServerManager/ServerManager.cs
@@ -95,6 +95,12 @@ namespace MediaBrowser.Common.Implementations.ServerManager
get { return SupportsNativeWebSocket ? _kernel.Configuration.HttpServerPortNumber : _kernel.Configuration.LegacyWebSocketPortNumber; }
}
+ ///
+ /// Gets the web socket listeners.
+ ///
+ /// The web socket listeners.
+ private List WebSocketListeners = new List();
+
///
/// Initializes a new instance of the class.
///
@@ -234,7 +240,7 @@ namespace MediaBrowser.Common.Implementations.ServerManager
/// The result.
private async void ProcessWebSocketMessageReceived(WebSocketMessageInfo result)
{
- var tasks = _kernel.WebSocketListeners.Select(i => Task.Run(async () =>
+ var tasks = WebSocketListeners.Select(i => Task.Run(async () =>
{
try
{
@@ -514,5 +520,14 @@ namespace MediaBrowser.Common.Implementations.ServerManager
ReloadExternalWebSocketServer();
}
}
+
+ ///
+ /// Adds the web socket listeners.
+ ///
+ /// The listeners.
+ public void AddWebSocketListeners(IEnumerable listeners)
+ {
+ WebSocketListeners.AddRange(listeners);
+ }
}
}
diff --git a/MediaBrowser.Common/Kernel/BaseKernel.cs b/MediaBrowser.Common/Kernel/BaseKernel.cs
index 44e00877e3..68983064e4 100644
--- a/MediaBrowser.Common/Kernel/BaseKernel.cs
+++ b/MediaBrowser.Common/Kernel/BaseKernel.cs
@@ -23,11 +23,6 @@ namespace MediaBrowser.Common.Kernel
where TConfigurationType : BaseApplicationConfiguration, new()
where TApplicationPathsType : IApplicationPaths
{
- ///
- /// Occurs when [has pending restart changed].
- ///
- public event EventHandler HasPendingRestartChanged;
-
#region ConfigurationUpdated Event
///
/// Occurs when [configuration updated].
@@ -43,20 +38,6 @@ namespace MediaBrowser.Common.Kernel
}
#endregion
- #region ReloadBeginning Event
- ///
- /// Fires whenever the kernel begins reloading
- ///
- public event EventHandler ReloadBeginning;
- ///
- /// Called when [reload beginning].
- ///
- private void OnReloadBeginning()
- {
- EventHelper.QueueEventIfNotNull(ReloadBeginning, this, EventArgs.Empty, Logger);
- }
- #endregion
-
#region ReloadCompleted Event
///
/// Fires whenever the kernel completes reloading
@@ -141,12 +122,6 @@ namespace MediaBrowser.Common.Kernel
/// The plugins.
public IEnumerable Plugins { get; protected set; }
- ///
- /// Gets the web socket listeners.
- ///
- /// The web socket listeners.
- public IEnumerable WebSocketListeners { get; private set; }
-
///
/// Gets or sets the TCP manager.
///
@@ -233,8 +208,6 @@ namespace MediaBrowser.Common.Kernel
/// Task.
public async Task Init()
{
- OnReloadBeginning();
-
await ReloadInternal().ConfigureAwait(false);
OnReloadCompleted();
@@ -275,7 +248,6 @@ namespace MediaBrowser.Common.Kernel
///
protected virtual void FindParts()
{
- WebSocketListeners = ApplicationHost.GetExports();
Plugins = ApplicationHost.GetExports();
}
@@ -314,8 +286,6 @@ namespace MediaBrowser.Common.Kernel
HasPendingRestart = true;
ServerManager.SendWebSocketMessage("HasPendingRestartChanged", GetSystemInfo());
-
- EventHelper.QueueEventIfNotNull(HasPendingRestartChanged, this, EventArgs.Empty, Logger);
}
///
diff --git a/MediaBrowser.Common/Kernel/IKernel.cs b/MediaBrowser.Common/Kernel/IKernel.cs
index 4b7375ba1d..dac94cee26 100644
--- a/MediaBrowser.Common/Kernel/IKernel.cs
+++ b/MediaBrowser.Common/Kernel/IKernel.cs
@@ -96,12 +96,6 @@ namespace MediaBrowser.Common.Kernel
/// The plug-in security manager.
ISecurityManager SecurityManager { get; set; }
- ///
- /// Gets the web socket listeners.
- ///
- /// The web socket listeners.
- IEnumerable WebSocketListeners { get; }
-
///
/// Occurs when [reload completed].
///
diff --git a/MediaBrowser.Common/Kernel/IServerManager.cs b/MediaBrowser.Common/Kernel/IServerManager.cs
index cfea6eee11..a8c6a253a9 100644
--- a/MediaBrowser.Common/Kernel/IServerManager.cs
+++ b/MediaBrowser.Common/Kernel/IServerManager.cs
@@ -1,4 +1,5 @@
using System;
+using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
@@ -50,5 +51,11 @@ namespace MediaBrowser.Common.Kernel
/// Task.
/// messageType
Task SendWebSocketMessageAsync(string messageType, Func dataFunction, CancellationToken cancellationToken);
+
+ ///
+ /// Adds the web socket listeners.
+ ///
+ /// The listeners.
+ void AddWebSocketListeners(IEnumerable listeners);
}
}
\ No newline at end of file
diff --git a/MediaBrowser.Server.Implementations/Sqlite/SQLiteRepository.cs b/MediaBrowser.Server.Implementations/Sqlite/SQLiteRepository.cs
index 83b7c0eb0f..1173f3fc80 100644
--- a/MediaBrowser.Server.Implementations/Sqlite/SQLiteRepository.cs
+++ b/MediaBrowser.Server.Implementations/Sqlite/SQLiteRepository.cs
@@ -156,7 +156,7 @@ namespace MediaBrowser.Server.Implementations.Sqlite
// Don't dispose in the middle of a flush
while (IsFlushing)
{
- Thread.Sleep(50);
+ Thread.Sleep(25);
}
if (connection.IsOpen())
diff --git a/MediaBrowser.ServerApplication/ApplicationHost.cs b/MediaBrowser.ServerApplication/ApplicationHost.cs
index a252d92a64..cfbf761cf8 100644
--- a/MediaBrowser.ServerApplication/ApplicationHost.cs
+++ b/MediaBrowser.ServerApplication/ApplicationHost.cs
@@ -72,7 +72,6 @@ namespace MediaBrowser.ServerApplication
public ApplicationHost()
: base()
{
- Logger.Info("ApplicationHost!!!!!!!!!!!!!!!!!!!!");
Kernel = new Kernel(this, ServerApplicationPaths, _xmlSerializer, Logger);
var networkManager = new NetworkManager();
@@ -85,11 +84,9 @@ namespace MediaBrowser.ServerApplication
Logger.Info("Version {0} initializing", ApplicationVersion);
- var httpServer = ServerFactory.CreateServer(this, ProtobufSerializer, Logger, "Media Browser", "index.html");
+ RegisterResources(taskManager, networkManager, serverManager);
- RegisterResources(taskManager, httpServer, networkManager, serverManager);
-
- FindParts(taskManager, httpServer);
+ FindParts();
}
///
@@ -113,42 +110,23 @@ namespace MediaBrowser.ServerApplication
///
/// Registers resources that classes will depend on
///
- private void RegisterResources(ITaskManager taskManager, IHttpServer httpServer, INetworkManager networkManager, IServerManager serverManager)
+ protected override void RegisterResources(ITaskManager taskManager, INetworkManager networkManager, IServerManager serverManager)
{
+ base.RegisterResources(taskManager, networkManager, serverManager);
+
RegisterSingleInstance(Kernel);
RegisterSingleInstance(Kernel);
RegisterSingleInstance(this);
- RegisterSingleInstance(LogManager);
- RegisterSingleInstance(Logger);
- RegisterSingleInstance(ApplicationPaths);
RegisterSingleInstance(ServerApplicationPaths);
- RegisterSingleInstance(taskManager);
RegisterSingleInstance(new PismoIsoManager(Logger));
RegisterSingleInstance(new BdInfoExaminer());
RegisterSingleInstance(new HttpClientManager(ApplicationPaths, Logger));
RegisterSingleInstance(new DotNetZipClient());
- RegisterSingleInstance(() => new AlchemyServer(Logger));
RegisterSingleInstance(_jsonSerializer);
RegisterSingleInstance(_xmlSerializer);
- RegisterSingleInstance(ProtobufSerializer);
- RegisterSingleInstance(new UdpServer(Logger), false);
- RegisterSingleInstance(httpServer, false);
-
- RegisterSingleInstance(networkManager);
-
- RegisterSingleInstance(serverManager);
- }
-
- ///
- /// Finds the parts.
- ///
- private void FindParts(ITaskManager taskManager, IHttpServer httpServer)
- {
- taskManager.AddTasks(GetExports(false));
-
- httpServer.Init(GetExports(false));
+ RegisterSingleInstance(ServerFactory.CreateServer(this, ProtobufSerializer, Logger, "Media Browser", "index.html"), false);
}
///
diff --git a/MediaBrowser.ServerApplication/MainWindow.xaml.cs b/MediaBrowser.ServerApplication/MainWindow.xaml.cs
index b3b26f57a1..1189e73d7b 100644
--- a/MediaBrowser.ServerApplication/MainWindow.xaml.cs
+++ b/MediaBrowser.ServerApplication/MainWindow.xaml.cs
@@ -101,7 +101,6 @@ namespace MediaBrowser.ServerApplication
Kernel.Instance.ReloadCompleted += KernelReloadCompleted;
_logManager.LoggerLoaded += LoadLogWindow;
- Kernel.Instance.HasPendingRestartChanged += Instance_HasPendingRestartChanged;
Kernel.Instance.ConfigurationUpdated += Instance_ConfigurationUpdated;
}
@@ -131,19 +130,6 @@ namespace MediaBrowser.ServerApplication
});
}
- ///
- /// Sets visibility of the restart message when the kernel value changes
- ///
- /// The source of the event.
- /// The instance containing the event data.
- void Instance_HasPendingRestartChanged(object sender, EventArgs e)
- {
- Dispatcher.InvokeAsync(() =>
- {
- MbTaskbarIcon.ToolTipText = Kernel.Instance.HasPendingRestart ? "Media Browser Server - Please restart to finish updating." : "Media Browser Server";
- });
- }
-
///
/// Handles the LibraryChanged event of the Instance control.
///
diff --git a/MediaBrowser.WebDashboard/Api/DashboardService.cs b/MediaBrowser.WebDashboard/Api/DashboardService.cs
index 917ebc8a78..e37924d4c8 100644
--- a/MediaBrowser.WebDashboard/Api/DashboardService.cs
+++ b/MediaBrowser.WebDashboard/Api/DashboardService.cs
@@ -49,14 +49,14 @@ namespace MediaBrowser.WebDashboard.Api
///
/// Class GetDashboardResource
///
- [Route("/dashboard/{name*}", "GET")]
+ [Route("/dashboard/{ResourceName*}", "GET")]
public class GetDashboardResource
{
///
/// Gets or sets the name.
///
/// The name.
- public string Name { get; set; }
+ public string ResourceName { get; set; }
///
/// Gets or sets the V.
///
@@ -174,7 +174,7 @@ namespace MediaBrowser.WebDashboard.Api
/// System.Object.
public object Get(GetDashboardResource request)
{
- var path = request.Name;
+ var path = request.ResourceName;
var contentType = MimeTypes.GetMimeType(path);
diff --git a/Nuget/MediaBrowser.ApiClient.nuspec b/Nuget/MediaBrowser.ApiClient.nuspec
index f58018c8f6..cc373aba6c 100644
--- a/Nuget/MediaBrowser.ApiClient.nuspec
+++ b/Nuget/MediaBrowser.ApiClient.nuspec
@@ -2,7 +2,7 @@
MediaBrowser.ApiClient
- 3.0.0.9-beta
+ 3.0.0.10-beta
MediaBrowser.ApiClient
Media Browser Team
scottisafool,Luke
diff --git a/Nuget/MediaBrowser.Common.Internal.nuspec b/Nuget/MediaBrowser.Common.Internal.nuspec
index 4e4298eaa1..da8026f546 100644
--- a/Nuget/MediaBrowser.Common.Internal.nuspec
+++ b/Nuget/MediaBrowser.Common.Internal.nuspec
@@ -2,7 +2,7 @@
MediaBrowser.Common.Internal
- 3.0.9
+ 3.0.10
Luke
Media Browser Team
@@ -10,7 +10,7 @@
false
Contains common components shared by Media Browser Theatre and Media Browser Server. Not intended for plugin developer consumption.
-
+
diff --git a/Nuget/MediaBrowser.Common.nuspec b/Nuget/MediaBrowser.Common.nuspec
index 177ee58b4b..5d5930eeb1 100644
--- a/Nuget/MediaBrowser.Common.nuspec
+++ b/Nuget/MediaBrowser.Common.nuspec
@@ -2,7 +2,7 @@
MediaBrowser.Common
- 3.0.9
+ 3.0.10
MediaBrowser.Common
Media Browser Team
diff --git a/Nuget/MediaBrowser.Server.Core.nuspec b/Nuget/MediaBrowser.Server.Core.nuspec
index 9d4f1d03af..9fcf238760 100644
--- a/Nuget/MediaBrowser.Server.Core.nuspec
+++ b/Nuget/MediaBrowser.Server.Core.nuspec
@@ -2,7 +2,7 @@
MediaBrowser.Server.Core
- 3.0.9
+ 3.0.10
Media Browser.Server.Core
Media Browser Team
@@ -10,7 +10,7 @@
false
Contains core components required to build plugins for Media Browser Server.
-
+