aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--MediaBrowser.Common.Implementations/ScheduledTasks/TaskManager.cs34
-rw-r--r--MediaBrowser.ServerApplication/App.xaml.cs5
-rw-r--r--MediaBrowser.WebDashboard/Api/DashboardInfoWebSocketListener.cs3
-rw-r--r--MediaBrowser.WebDashboard/Html/scripts/site.js13
4 files changed, 50 insertions, 5 deletions
diff --git a/MediaBrowser.Common.Implementations/ScheduledTasks/TaskManager.cs b/MediaBrowser.Common.Implementations/ScheduledTasks/TaskManager.cs
index 61e1f6329..0f3bae87c 100644
--- a/MediaBrowser.Common.Implementations/ScheduledTasks/TaskManager.cs
+++ b/MediaBrowser.Common.Implementations/ScheduledTasks/TaskManager.cs
@@ -106,7 +106,7 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks
/// <param name="task">The task.</param>
private void QueueScheduledTask(IScheduledTaskWorker task)
{
- var type = task.GetType();
+ var type = task.ScheduledTask.GetType();
lock (_taskQueue)
{
@@ -173,14 +173,46 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks
return ((ScheduledTaskWorker)task).Execute();
}
+ /// <summary>
+ /// Called when [task executing].
+ /// </summary>
+ /// <param name="task">The task.</param>
internal void OnTaskExecuting(IScheduledTask task)
{
EventHelper.QueueEventIfNotNull(TaskExecuting, task, EventArgs.Empty, Logger);
}
+ /// <summary>
+ /// Called when [task completed].
+ /// </summary>
+ /// <param name="task">The task.</param>
+ /// <param name="result">The result.</param>
internal void OnTaskCompleted(IScheduledTask task, TaskResult result)
{
EventHelper.QueueEventIfNotNull(TaskExecuting, task, new GenericEventArgs<TaskResult> { Argument = result }, Logger);
+ ExecuteQueuedTasks();
+ }
+
+ /// <summary>
+ /// Executes the queued tasks.
+ /// </summary>
+ private void ExecuteQueuedTasks()
+ {
+ // Execute queued tasks
+ lock (_taskQueue)
+ {
+ foreach (var type in _taskQueue.ToList())
+ {
+ var scheduledTask = ScheduledTasks.First(t => t.ScheduledTask.GetType() == type);
+
+ if (scheduledTask.State == TaskState.Idle)
+ {
+ ((ScheduledTaskWorker)scheduledTask).Execute();
+
+ _taskQueue.Remove(type);
+ }
+ }
+ }
}
}
}
diff --git a/MediaBrowser.ServerApplication/App.xaml.cs b/MediaBrowser.ServerApplication/App.xaml.cs
index 0155d0c90..35f203a62 100644
--- a/MediaBrowser.ServerApplication/App.xaml.cs
+++ b/MediaBrowser.ServerApplication/App.xaml.cs
@@ -134,6 +134,11 @@ namespace MediaBrowser.ServerApplication
Logger.ErrorException("UnhandledException", exception);
MessageBox.Show("Unhandled exception: " + exception.Message);
+
+ if (!Debugger.IsAttached)
+ {
+ Environment.Exit(System.Runtime.InteropServices.Marshal.GetHRForException(exception));
+ }
}
/// <summary>
diff --git a/MediaBrowser.WebDashboard/Api/DashboardInfoWebSocketListener.cs b/MediaBrowser.WebDashboard/Api/DashboardInfoWebSocketListener.cs
index 5fc1f75c5..6109f73bb 100644
--- a/MediaBrowser.WebDashboard/Api/DashboardInfoWebSocketListener.cs
+++ b/MediaBrowser.WebDashboard/Api/DashboardInfoWebSocketListener.cs
@@ -43,12 +43,13 @@ namespace MediaBrowser.WebDashboard.Api
/// <param name="logger">The logger.</param>
/// <param name="taskManager">The task manager.</param>
/// <param name="userManager">The user manager.</param>
- public DashboardInfoWebSocketListener(IServerApplicationHost appHost, ILogger logger, ITaskManager taskManager, IUserManager userManager)
+ public DashboardInfoWebSocketListener(IServerApplicationHost appHost, ILogger logger, ITaskManager taskManager, IUserManager userManager, ILibraryManager libraryManager)
: base(logger)
{
_appHost = appHost;
_taskManager = taskManager;
_userManager = userManager;
+ _libraryManager = libraryManager;
}
/// <summary>
diff --git a/MediaBrowser.WebDashboard/Html/scripts/site.js b/MediaBrowser.WebDashboard/Html/scripts/site.js
index 7ecaff85b..cb4ba3bdd 100644
--- a/MediaBrowser.WebDashboard/Html/scripts/site.js
+++ b/MediaBrowser.WebDashboard/Html/scripts/site.js
@@ -382,7 +382,7 @@ var Dashboard = {
setTimeout(function () {
Dashboard.reloadPageWhenServerAvailable();
- }, 500);
+ }, 250);
}).fail(function () {
Dashboard.suppressAjaxErrors = false;
@@ -391,10 +391,17 @@ var Dashboard = {
reloadPageWhenServerAvailable: function (retryCount) {
- ApiClient.getSystemInfo().done(function () {
- Dashboard.reloadPage();
+ ApiClient.getSystemInfo().done(function (info) {
+
+ // If this is back to false, the restart completed
+ if (!info.HasPendingRestart) {
+ Dashboard.reloadPage();
+ } else {
+ Dashboard.reloadPageWhenServerAvailable(retryCount);
+ }
}).fail(function () {
+
setTimeout(function () {
retryCount = retryCount || 0;