From 767cdc1f6f6a63ce997fc9476911e2c361f9d402 Mon Sep 17 00:00:00 2001 From: LukePulverenti Date: Wed, 20 Feb 2013 20:33:05 -0500 Subject: Pushing missing changes --- .../ScheduledTasks/ScheduledTaskHelpers.cs | 153 +++++++++++++++++++++ 1 file changed, 153 insertions(+) create mode 100644 MediaBrowser.Common/ScheduledTasks/ScheduledTaskHelpers.cs (limited to 'MediaBrowser.Common/ScheduledTasks/ScheduledTaskHelpers.cs') diff --git a/MediaBrowser.Common/ScheduledTasks/ScheduledTaskHelpers.cs b/MediaBrowser.Common/ScheduledTasks/ScheduledTaskHelpers.cs new file mode 100644 index 0000000000..34421ca1fa --- /dev/null +++ b/MediaBrowser.Common/ScheduledTasks/ScheduledTaskHelpers.cs @@ -0,0 +1,153 @@ +using MediaBrowser.Common.Kernel; +using MediaBrowser.Model.Tasks; +using System; +using System.Linq; + +namespace MediaBrowser.Common.ScheduledTasks +{ + /// + /// Class ScheduledTaskHelpers + /// + public static class ScheduledTaskHelpers + { + /// + /// Gets the task info. + /// + /// The task. + /// TaskInfo. + public static TaskInfo GetTaskInfo(IScheduledTask task) + { + return new TaskInfo + { + Name = task.Name, + CurrentProgress = task.CurrentProgress, + State = task.State, + Id = task.Id, + LastExecutionResult = task.LastExecutionResult, + Triggers = task.Triggers.Select(GetTriggerInfo).ToArray(), + Description = task.Description, + Category = task.Category + }; + } + + /// + /// Gets the trigger info. + /// + /// The trigger. + /// TaskTriggerInfo. + public static TaskTriggerInfo GetTriggerInfo(BaseTaskTrigger trigger) + { + var info = new TaskTriggerInfo + { + Type = trigger.GetType().Name + }; + + var dailyTrigger = trigger as DailyTrigger; + + if (dailyTrigger != null) + { + info.TimeOfDayTicks = dailyTrigger.TimeOfDay.Ticks; + } + + var weeklyTaskTrigger = trigger as WeeklyTrigger; + + if (weeklyTaskTrigger != null) + { + info.TimeOfDayTicks = weeklyTaskTrigger.TimeOfDay.Ticks; + info.DayOfWeek = weeklyTaskTrigger.DayOfWeek; + } + + var intervalTaskTrigger = trigger as IntervalTrigger; + + if (intervalTaskTrigger != null) + { + info.IntervalTicks = intervalTaskTrigger.Interval.Ticks; + } + + var systemEventTrigger = trigger as SystemEventTrigger; + + if (systemEventTrigger != null) + { + info.SystemEvent = systemEventTrigger.SystemEvent; + } + + return info; + } + + /// + /// Converts a TaskTriggerInfo into a concrete BaseTaskTrigger + /// + /// The info. + /// The kernel. + /// BaseTaskTrigger. + /// + /// Invalid trigger type: + info.Type + public static BaseTaskTrigger GetTrigger(TaskTriggerInfo info, IKernel kernel) + { + if (info.Type.Equals(typeof(DailyTrigger).Name, StringComparison.OrdinalIgnoreCase)) + { + if (!info.TimeOfDayTicks.HasValue) + { + throw new ArgumentNullException(); + } + + return new DailyTrigger + { + TimeOfDay = TimeSpan.FromTicks(info.TimeOfDayTicks.Value) + }; + } + + if (info.Type.Equals(typeof(WeeklyTrigger).Name, StringComparison.OrdinalIgnoreCase)) + { + if (!info.TimeOfDayTicks.HasValue) + { + throw new ArgumentNullException(); + } + + if (!info.DayOfWeek.HasValue) + { + throw new ArgumentNullException(); + } + + return new WeeklyTrigger + { + TimeOfDay = TimeSpan.FromTicks(info.TimeOfDayTicks.Value), + DayOfWeek = info.DayOfWeek.Value + }; + } + + if (info.Type.Equals(typeof(IntervalTrigger).Name, StringComparison.OrdinalIgnoreCase)) + { + if (!info.IntervalTicks.HasValue) + { + throw new ArgumentNullException(); + } + + return new IntervalTrigger + { + Interval = TimeSpan.FromTicks(info.IntervalTicks.Value) + }; + } + + if (info.Type.Equals(typeof(SystemEventTrigger).Name, StringComparison.OrdinalIgnoreCase)) + { + if (!info.SystemEvent.HasValue) + { + throw new ArgumentNullException(); + } + + return new SystemEventTrigger + { + SystemEvent = info.SystemEvent.Value + }; + } + + if (info.Type.Equals(typeof(StartupTrigger).Name, StringComparison.OrdinalIgnoreCase)) + { + return new StartupTrigger(kernel); + } + + throw new ArgumentException("Unrecognized trigger type: " + info.Type); + } + } +} -- cgit v1.2.3