From 8ce3e74e8112a94773df22827849bf274fc88198 Mon Sep 17 00:00:00 2001 From: LukePulverenti Date: Sun, 24 Feb 2013 16:53:54 -0500 Subject: More DI --- .../ScheduledTasks/BaseScheduledTask.cs | 140 +++------------------ 1 file changed, 19 insertions(+), 121 deletions(-) (limited to 'MediaBrowser.Common/ScheduledTasks/BaseScheduledTask.cs') diff --git a/MediaBrowser.Common/ScheduledTasks/BaseScheduledTask.cs b/MediaBrowser.Common/ScheduledTasks/BaseScheduledTask.cs index 845faf31a7..09ceaa9aee 100644 --- a/MediaBrowser.Common/ScheduledTasks/BaseScheduledTask.cs +++ b/MediaBrowser.Common/ScheduledTasks/BaseScheduledTask.cs @@ -1,6 +1,5 @@ using MediaBrowser.Common.Extensions; using MediaBrowser.Common.Kernel; -using MediaBrowser.Common.Serialization; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Tasks; using System; @@ -90,7 +89,7 @@ namespace MediaBrowser.Common.ScheduledTasks { try { - return JsonSerializer.DeserializeFromFile(HistoryFilePath); + return TaskManager.GetLastExecutionResult(this); } catch (IOException) { @@ -109,74 +108,6 @@ namespace MediaBrowser.Common.ScheduledTasks } } - /// - /// The _scheduled tasks data directory - /// - private string _scheduledTasksDataDirectory; - /// - /// Gets the scheduled tasks data directory. - /// - /// The scheduled tasks data directory. - private string ScheduledTasksDataDirectory - { - get - { - if (_scheduledTasksDataDirectory == null) - { - _scheduledTasksDataDirectory = Path.Combine(Kernel.ApplicationPaths.DataPath, "ScheduledTasks"); - - if (!Directory.Exists(_scheduledTasksDataDirectory)) - { - Directory.CreateDirectory(_scheduledTasksDataDirectory); - } - } - return _scheduledTasksDataDirectory; - } - } - - /// - /// The _scheduled tasks configuration directory - /// - private string _scheduledTasksConfigurationDirectory; - /// - /// Gets the scheduled tasks configuration directory. - /// - /// The scheduled tasks configuration directory. - private string ScheduledTasksConfigurationDirectory - { - get - { - if (_scheduledTasksConfigurationDirectory == null) - { - _scheduledTasksConfigurationDirectory = Path.Combine(Kernel.ApplicationPaths.ConfigurationDirectoryPath, "ScheduledTasks"); - - if (!Directory.Exists(_scheduledTasksConfigurationDirectory)) - { - Directory.CreateDirectory(_scheduledTasksConfigurationDirectory); - } - } - return _scheduledTasksConfigurationDirectory; - } - } - - /// - /// Gets the configuration file path. - /// - /// The configuration file path. - private string ConfigurationFilePath - { - get { return Path.Combine(ScheduledTasksConfigurationDirectory, Id + ".js"); } - } - - /// - /// Gets the history file path. - /// - /// The history file path. - private string HistoryFilePath - { - get { return Path.Combine(ScheduledTasksDataDirectory, Id + ".js"); } - } - /// /// Gets the current cancellation token /// @@ -217,7 +148,7 @@ namespace MediaBrowser.Common.ScheduledTasks /// /// The _triggers /// - private IEnumerable _triggers; + private IEnumerable _triggers; /// /// The _triggers initialized /// @@ -231,24 +162,11 @@ namespace MediaBrowser.Common.ScheduledTasks /// /// The triggers. /// value - public IEnumerable Triggers + public IEnumerable Triggers { get { - LazyInitializer.EnsureInitialized(ref _triggers, ref _triggersInitialized, ref _triggersSyncLock, () => - { - try - { - return JsonSerializer.DeserializeFromFile>(ConfigurationFilePath) - .Select(ScheduledTaskHelpers.GetTrigger) - .ToList(); - } - catch (IOException) - { - // File doesn't exist. No biggie. Return defaults. - return GetDefaultTriggers(); - } - }); + LazyInitializer.EnsureInitialized(ref _triggers, ref _triggersInitialized, ref _triggersSyncLock, () => TaskManager.LoadTriggers(this)); return _triggers; } @@ -271,7 +189,7 @@ namespace MediaBrowser.Common.ScheduledTasks ReloadTriggerEvents(false); - JsonSerializer.SerializeToFile(_triggers.Select(ScheduledTaskHelpers.GetTriggerInfo), ConfigurationFilePath); + TaskManager.SaveTriggers(this, _triggers); } } @@ -279,7 +197,7 @@ namespace MediaBrowser.Common.ScheduledTasks /// Creates the triggers that define when the task will run /// /// IEnumerable{BaseTaskTrigger}. - protected abstract IEnumerable GetDefaultTriggers(); + public abstract IEnumerable GetDefaultTriggers(); /// /// Returns the task to be executed @@ -314,6 +232,7 @@ namespace MediaBrowser.Common.ScheduledTasks /// The _id /// private Guid? _id; + /// /// Gets the unique id. /// @@ -352,13 +271,19 @@ namespace MediaBrowser.Common.ScheduledTasks /// /// The source of the event. /// The instance containing the event data. - void trigger_Triggered(object sender, EventArgs e) + async void trigger_Triggered(object sender, EventArgs e) { - var trigger = (BaseTaskTrigger)sender; + var trigger = (ITaskTrigger)sender; Logger.Info("{0} fired for task: {1}", trigger.GetType().Name, Name); + trigger.Stop(); + TaskManager.QueueScheduledTask(this); + + await Task.Delay(1000).ConfigureAwait(false); + + trigger.Start(false); } /// @@ -404,10 +329,9 @@ namespace MediaBrowser.Common.ScheduledTasks status = TaskCompletionStatus.Failed; } + var startTime = CurrentExecutionStartTime; var endTime = DateTime.UtcNow; - LogResult(endTime, status); - Kernel.TcpManager.SendWebSocketMessage("ScheduledTaskEndExecute", LastExecutionResult); progress.ProgressChanged -= progress_ProgressChanged; @@ -415,33 +339,7 @@ namespace MediaBrowser.Common.ScheduledTasks CurrentCancellationTokenSource = null; CurrentProgress = null; - TaskManager.OnTaskCompleted(this); - } - - /// - /// Logs the result. - /// - /// The end time. - /// The status. - private void LogResult(DateTime endTime, TaskCompletionStatus status) - { - var startTime = CurrentExecutionStartTime; - var elapsedTime = endTime - startTime; - - Logger.Info("{0} {1} after {2} minute(s) and {3} seconds", Name, status, Math.Truncate(elapsedTime.TotalMinutes), elapsedTime.Seconds); - - var result = new TaskResult - { - StartTimeUtc = startTime, - EndTimeUtc = endTime, - Status = status, - Name = Name, - Id = Id - }; - - JsonSerializer.SerializeToFile(result, HistoryFilePath); - - LastExecutionResult = result; + TaskManager.OnTaskCompleted(this, startTime, endTime, status); } /// @@ -501,7 +399,7 @@ namespace MediaBrowser.Common.ScheduledTasks if (State == TaskState.Running) { - LogResult(DateTime.UtcNow, TaskCompletionStatus.Aborted); + TaskManager.OnTaskCompleted(this, CurrentExecutionStartTime, DateTime.UtcNow, TaskCompletionStatus.Aborted); } if (CurrentCancellationTokenSource != null) @@ -519,7 +417,7 @@ namespace MediaBrowser.Common.ScheduledTasks foreach (var trigger in Triggers) { trigger.Triggered -= trigger_Triggered; - trigger.Dispose(); + trigger.Stop(); } } } -- cgit v1.2.3