From b8d5c718429f1325111834b8b95698fc9c9ba47d Mon Sep 17 00:00:00 2001 From: LukePulverenti Date: Sat, 23 Feb 2013 02:57:11 -0500 Subject: type discovery without attributes --- MediaBrowser.Common/ScheduledTasks/TaskManager.cs | 66 +++++++++++++++++++---- 1 file changed, 55 insertions(+), 11 deletions(-) (limited to 'MediaBrowser.Common/ScheduledTasks/TaskManager.cs') diff --git a/MediaBrowser.Common/ScheduledTasks/TaskManager.cs b/MediaBrowser.Common/ScheduledTasks/TaskManager.cs index b71ab8161..946c42d2e 100644 --- a/MediaBrowser.Common/ScheduledTasks/TaskManager.cs +++ b/MediaBrowser.Common/ScheduledTasks/TaskManager.cs @@ -1,5 +1,4 @@ -using MediaBrowser.Common.Kernel; -using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Logging; using MediaBrowser.Model.Tasks; using System; using System.Collections.Generic; @@ -10,8 +9,14 @@ namespace MediaBrowser.Common.ScheduledTasks /// /// Class TaskManager /// - public class TaskManager : BaseManager + internal class TaskManager : ITaskManager { + /// + /// Gets the list of Scheduled Tasks + /// + /// The scheduled tasks. + public IScheduledTask[] ScheduledTasks { get; private set; } + /// /// The _task queue /// @@ -25,12 +30,17 @@ namespace MediaBrowser.Common.ScheduledTasks /// /// Initializes a new instance of the class. /// - /// The kernel. /// The logger. - public TaskManager(IKernel kernel, ILogger logger) - : base(kernel) + public TaskManager(ILogger logger) { + if (logger == null) + { + throw new ArgumentException("logger"); + } + _logger = logger; + + ScheduledTasks = new IScheduledTask[] {}; } /// @@ -40,7 +50,7 @@ namespace MediaBrowser.Common.ScheduledTasks public void CancelIfRunningAndQueue() where T : IScheduledTask { - Kernel.ScheduledTasks.OfType().First().CancelIfRunning(); + ScheduledTasks.OfType().First().CancelIfRunning(); QueueScheduledTask(); } @@ -51,7 +61,7 @@ namespace MediaBrowser.Common.ScheduledTasks public void QueueScheduledTask() where T : IScheduledTask { - var scheduledTask = Kernel.ScheduledTasks.OfType().First(); + var scheduledTask = ScheduledTasks.OfType().First(); QueueScheduledTask(scheduledTask); } @@ -64,7 +74,7 @@ namespace MediaBrowser.Common.ScheduledTasks { var type = task.GetType(); - var scheduledTask = Kernel.ScheduledTasks.First(t => t.GetType() == type); + var scheduledTask = ScheduledTasks.First(t => t.GetType() == type); lock (_taskQueue) { @@ -91,7 +101,7 @@ namespace MediaBrowser.Common.ScheduledTasks /// Called when [task completed]. /// /// The task. - internal void OnTaskCompleted(IScheduledTask task) + public void OnTaskCompleted(IScheduledTask task) { // Execute queued tasks lock (_taskQueue) @@ -100,7 +110,7 @@ namespace MediaBrowser.Common.ScheduledTasks foreach (var type in copy) { - var scheduledTask = Kernel.ScheduledTasks.First(t => t.GetType() == type); + var scheduledTask = ScheduledTasks.First(t => t.GetType() == type); if (scheduledTask.State == TaskState.Idle) { @@ -111,5 +121,39 @@ namespace MediaBrowser.Common.ScheduledTasks } } } + + /// + /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + /// + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + /// + /// Releases unmanaged and - optionally - managed resources. + /// + /// true to release both managed and unmanaged resources; false to release only unmanaged resources. + protected virtual void Dispose(bool dispose) + { + foreach (var task in ScheduledTasks) + { + task.Dispose(); + } + } + + /// + /// Adds the tasks. + /// + /// The tasks. + public void AddTasks(IEnumerable tasks) + { + var myTasks = ScheduledTasks.ToList(); + + myTasks.AddRange(tasks); + + ScheduledTasks = myTasks.ToArray(); + } } } -- cgit v1.2.3