123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- using MediaBrowser.Model.Tasks;
- using System;
- using System.Linq;
- namespace MediaBrowser.Common.ScheduledTasks
- {
- /// <summary>
- /// Class ScheduledTaskHelpers
- /// </summary>
- public static class ScheduledTaskHelpers
- {
- /// <summary>
- /// Gets the task info.
- /// </summary>
- /// <param name="task">The task.</param>
- /// <returns>TaskInfo.</returns>
- public static TaskInfo GetTaskInfo(IScheduledTaskWorker task)
- {
- var isHidden = false;
- var configurableTask = task.ScheduledTask as IConfigurableScheduledTask;
- if (configurableTask != null)
- {
- isHidden = configurableTask.IsHidden;
- }
- string key = null;
- var hasKey = task.ScheduledTask as IHasKey;
- if (hasKey != null)
- {
- key = hasKey.Key;
- }
- var triggers = task.Triggers
- .Select(GetTriggerInfo)
- .OrderBy(i => i.Type)
- .ThenBy(i => i.DayOfWeek ?? DayOfWeek.Sunday)
- .ThenBy(i => i.TimeOfDayTicks ?? 0)
- .ToList();
- return new TaskInfo
- {
- Name = task.Name,
- CurrentProgressPercentage = task.CurrentProgress,
- State = task.State,
- Id = task.Id,
- LastExecutionResult = task.LastExecutionResult,
- Triggers = triggers,
- Description = task.Description,
- Category = task.Category,
- IsHidden = isHidden,
- Key = key
- };
- }
- /// <summary>
- /// Gets the trigger info.
- /// </summary>
- /// <param name="trigger">The trigger.</param>
- /// <returns>TaskTriggerInfo.</returns>
- public static TaskTriggerInfo GetTriggerInfo(ITaskTrigger 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;
- }
- if (trigger.TaskOptions != null)
- {
- info.MaxRuntimeMs = trigger.TaskOptions.MaxRuntimeMs;
- }
- return info;
- }
- /// <summary>
- /// Converts a TaskTriggerInfo into a concrete BaseTaskTrigger
- /// </summary>
- /// <param name="info">The info.</param>
- /// <returns>BaseTaskTrigger.</returns>
- /// <exception cref="System.ArgumentNullException"></exception>
- /// <exception cref="System.ArgumentException">Invalid trigger type: + info.Type</exception>
- public static ITaskTrigger GetTrigger(TaskTriggerInfo info)
- {
- var options = new TaskExecutionOptions
- {
- MaxRuntimeMs = info.MaxRuntimeMs
- };
- 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),
- TaskOptions = options
- };
- }
- 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,
- TaskOptions = options
- };
- }
- 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),
- TaskOptions = options
- };
- }
- if (info.Type.Equals(typeof(SystemEventTrigger).Name, StringComparison.OrdinalIgnoreCase))
- {
- if (!info.SystemEvent.HasValue)
- {
- throw new ArgumentNullException();
- }
- return new SystemEventTrigger
- {
- SystemEvent = info.SystemEvent.Value,
- TaskOptions = options
- };
- }
- if (info.Type.Equals(typeof(StartupTrigger).Name, StringComparison.OrdinalIgnoreCase))
- {
- return new StartupTrigger();
- }
- throw new ArgumentException("Unrecognized trigger type: " + info.Type);
- }
- }
- }
|