ScheduledTaskHelpers.cs 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. using MediaBrowser.Model.Tasks;
  2. using System;
  3. using System.Linq;
  4. namespace MediaBrowser.Common.ScheduledTasks
  5. {
  6. /// <summary>
  7. /// Class ScheduledTaskHelpers
  8. /// </summary>
  9. public static class ScheduledTaskHelpers
  10. {
  11. /// <summary>
  12. /// Gets the task info.
  13. /// </summary>
  14. /// <param name="task">The task.</param>
  15. /// <returns>TaskInfo.</returns>
  16. public static TaskInfo GetTaskInfo(IScheduledTaskWorker task)
  17. {
  18. var isHidden = false;
  19. var configurableTask = task.ScheduledTask as IConfigurableScheduledTask;
  20. if (configurableTask != null)
  21. {
  22. isHidden = configurableTask.IsHidden;
  23. }
  24. string key = null;
  25. var hasKey = task.ScheduledTask as IHasKey;
  26. if (hasKey != null)
  27. {
  28. key = hasKey.Key;
  29. }
  30. return new TaskInfo
  31. {
  32. Name = task.Name,
  33. CurrentProgressPercentage = task.CurrentProgress,
  34. State = task.State,
  35. Id = task.Id,
  36. LastExecutionResult = task.LastExecutionResult,
  37. Triggers = task.Triggers.Select(GetTriggerInfo).ToList(),
  38. Description = task.Description,
  39. Category = task.Category,
  40. IsHidden = isHidden,
  41. Key = key
  42. };
  43. }
  44. /// <summary>
  45. /// Gets the trigger info.
  46. /// </summary>
  47. /// <param name="trigger">The trigger.</param>
  48. /// <returns>TaskTriggerInfo.</returns>
  49. public static TaskTriggerInfo GetTriggerInfo(ITaskTrigger trigger)
  50. {
  51. var info = new TaskTriggerInfo
  52. {
  53. Type = trigger.GetType().Name
  54. };
  55. var dailyTrigger = trigger as DailyTrigger;
  56. if (dailyTrigger != null)
  57. {
  58. info.TimeOfDayTicks = dailyTrigger.TimeOfDay.Ticks;
  59. }
  60. var weeklyTaskTrigger = trigger as WeeklyTrigger;
  61. if (weeklyTaskTrigger != null)
  62. {
  63. info.TimeOfDayTicks = weeklyTaskTrigger.TimeOfDay.Ticks;
  64. info.DayOfWeek = weeklyTaskTrigger.DayOfWeek;
  65. }
  66. var intervalTaskTrigger = trigger as IntervalTrigger;
  67. if (intervalTaskTrigger != null)
  68. {
  69. info.IntervalTicks = intervalTaskTrigger.Interval.Ticks;
  70. }
  71. var systemEventTrigger = trigger as SystemEventTrigger;
  72. if (systemEventTrigger != null)
  73. {
  74. info.SystemEvent = systemEventTrigger.SystemEvent;
  75. }
  76. return info;
  77. }
  78. /// <summary>
  79. /// Converts a TaskTriggerInfo into a concrete BaseTaskTrigger
  80. /// </summary>
  81. /// <param name="info">The info.</param>
  82. /// <returns>BaseTaskTrigger.</returns>
  83. /// <exception cref="System.ArgumentNullException"></exception>
  84. /// <exception cref="System.ArgumentException">Invalid trigger type: + info.Type</exception>
  85. public static ITaskTrigger GetTrigger(TaskTriggerInfo info)
  86. {
  87. if (info.Type.Equals(typeof(DailyTrigger).Name, StringComparison.OrdinalIgnoreCase))
  88. {
  89. if (!info.TimeOfDayTicks.HasValue)
  90. {
  91. throw new ArgumentNullException();
  92. }
  93. return new DailyTrigger
  94. {
  95. TimeOfDay = TimeSpan.FromTicks(info.TimeOfDayTicks.Value)
  96. };
  97. }
  98. if (info.Type.Equals(typeof(WeeklyTrigger).Name, StringComparison.OrdinalIgnoreCase))
  99. {
  100. if (!info.TimeOfDayTicks.HasValue)
  101. {
  102. throw new ArgumentNullException();
  103. }
  104. if (!info.DayOfWeek.HasValue)
  105. {
  106. throw new ArgumentNullException();
  107. }
  108. return new WeeklyTrigger
  109. {
  110. TimeOfDay = TimeSpan.FromTicks(info.TimeOfDayTicks.Value),
  111. DayOfWeek = info.DayOfWeek.Value
  112. };
  113. }
  114. if (info.Type.Equals(typeof(IntervalTrigger).Name, StringComparison.OrdinalIgnoreCase))
  115. {
  116. if (!info.IntervalTicks.HasValue)
  117. {
  118. throw new ArgumentNullException();
  119. }
  120. return new IntervalTrigger
  121. {
  122. Interval = TimeSpan.FromTicks(info.IntervalTicks.Value)
  123. };
  124. }
  125. if (info.Type.Equals(typeof(SystemEventTrigger).Name, StringComparison.OrdinalIgnoreCase))
  126. {
  127. if (!info.SystemEvent.HasValue)
  128. {
  129. throw new ArgumentNullException();
  130. }
  131. return new SystemEventTrigger
  132. {
  133. SystemEvent = info.SystemEvent.Value
  134. };
  135. }
  136. if (info.Type.Equals(typeof(StartupTrigger).Name, StringComparison.OrdinalIgnoreCase))
  137. {
  138. return new StartupTrigger();
  139. }
  140. throw new ArgumentException("Unrecognized trigger type: " + info.Type);
  141. }
  142. }
  143. }