diff options
| author | LukePulverenti <luke.pulverenti@gmail.com> | 2013-03-13 14:36:27 -0400 |
|---|---|---|
| committer | LukePulverenti <luke.pulverenti@gmail.com> | 2013-03-13 14:36:27 -0400 |
| commit | e7500d586c0fa3436cd996071e449b2fa174c7eb (patch) | |
| tree | 6f63425414c33c6005f4d0a9a4dd93cf7f0acb08 /MediaBrowser.Common.Implementations/ScheduledTasks/TaskManager.cs | |
| parent | 5f3a6b22350a5da5bbb62a921791dd0c12109762 (diff) | |
#7 - Initial library scan being cancelled
Diffstat (limited to 'MediaBrowser.Common.Implementations/ScheduledTasks/TaskManager.cs')
| -rw-r--r-- | MediaBrowser.Common.Implementations/ScheduledTasks/TaskManager.cs | 34 |
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); + } + } + } } } } |
