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, CurrentProgressPercentage = 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. /// BaseTaskTrigger. /// /// Invalid trigger type: + info.Type public static BaseTaskTrigger GetTrigger(TaskTriggerInfo info) { 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(); } throw new ArgumentException("Unrecognized trigger type: " + info.Type); } } }