aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukePulverenti <luke.pulverenti@gmail.com>2013-03-13 14:36:27 -0400
committerLukePulverenti <luke.pulverenti@gmail.com>2013-03-13 14:36:27 -0400
commite7500d586c0fa3436cd996071e449b2fa174c7eb (patch)
tree6f63425414c33c6005f4d0a9a4dd93cf7f0acb08
parent5f3a6b22350a5da5bbb62a921791dd0c12109762 (diff)
#7 - Initial library scan being cancelled
-rw-r--r--MediaBrowser.Common.Implementations/ScheduledTasks/TaskManager.cs34
1 files changed, 33 insertions, 1 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);
+ }
+ }
+ }
}
}
}