ScheduledTaskHelpers.cs 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  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. return new TaskInfo
  25. {
  26. Name = task.Name,
  27. CurrentProgressPercentage = task.CurrentProgress,
  28. State = task.State,
  29. Id = task.Id,
  30. LastExecutionResult = task.LastExecutionResult,
  31. Triggers = task.Triggers.Select(GetTriggerInfo).ToList(),
  32. Description = task.Description,
  33. Category = task.Category,
  34. IsHidden = isHidden
  35. };
  36. }
  37. /// <summary>
  38. /// Gets the trigger info.
  39. /// </summary>
  40. /// <param name="trigger">The trigger.</param>
  41. /// <returns>TaskTriggerInfo.</returns>
  42. public static TaskTriggerInfo GetTriggerInfo(ITaskTrigger trigger)
  43. {
  44. var info = new TaskTriggerInfo
  45. {
  46. Type = trigger.GetType().Name
  47. };
  48. var dailyTrigger = trigger as DailyTrigger;
  49. if (dailyTrigger != null)
  50. {
  51. info.TimeOfDayTicks = dailyTrigger.TimeOfDay.Ticks;
  52. }
  53. var weeklyTaskTrigger = trigger as WeeklyTrigger;
  54. if (weeklyTaskTrigger != null)
  55. {
  56. info.TimeOfDayTicks = weeklyTaskTrigger.TimeOfDay.Ticks;
  57. info.DayOfWeek = weeklyTaskTrigger.DayOfWeek;
  58. }
  59. var intervalTaskTrigger = trigger as IntervalTrigger;
  60. if (intervalTaskTrigger != null)
  61. {
  62. info.IntervalTicks = intervalTaskTrigger.Interval.Ticks;
  63. }
  64. var systemEventTrigger = trigger as SystemEventTrigger;
  65. if (systemEventTrigger != null)
  66. {
  67. info.SystemEvent = systemEventTrigger.SystemEvent;
  68. }
  69. return info;
  70. }
  71. /// <summary>
  72. /// Converts a TaskTriggerInfo into a concrete BaseTaskTrigger
  73. /// </summary>
  74. /// <param name="info">The info.</param>
  75. /// <returns>BaseTaskTrigger.</returns>
  76. /// <exception cref="System.ArgumentNullException"></exception>
  77. /// <exception cref="System.ArgumentException">Invalid trigger type: + info.Type</exception>
  78. public static ITaskTrigger GetTrigger(TaskTriggerInfo info)
  79. {
  80. if (info.Type.Equals(typeof(DailyTrigger).Name, StringComparison.OrdinalIgnoreCase))
  81. {
  82. if (!info.TimeOfDayTicks.HasValue)
  83. {
  84. throw new ArgumentNullException();
  85. }
  86. return new DailyTrigger
  87. {
  88. TimeOfDay = TimeSpan.FromTicks(info.TimeOfDayTicks.Value)
  89. };
  90. }
  91. if (info.Type.Equals(typeof(WeeklyTrigger).Name, StringComparison.OrdinalIgnoreCase))
  92. {
  93. if (!info.TimeOfDayTicks.HasValue)
  94. {
  95. throw new ArgumentNullException();
  96. }
  97. if (!info.DayOfWeek.HasValue)
  98. {
  99. throw new ArgumentNullException();
  100. }
  101. return new WeeklyTrigger
  102. {
  103. TimeOfDay = TimeSpan.FromTicks(info.TimeOfDayTicks.Value),
  104. DayOfWeek = info.DayOfWeek.Value
  105. };
  106. }
  107. if (info.Type.Equals(typeof(IntervalTrigger).Name, StringComparison.OrdinalIgnoreCase))
  108. {
  109. if (!info.IntervalTicks.HasValue)
  110. {
  111. throw new ArgumentNullException();
  112. }
  113. return new IntervalTrigger
  114. {
  115. Interval = TimeSpan.FromTicks(info.IntervalTicks.Value)
  116. };
  117. }
  118. if (info.Type.Equals(typeof(SystemEventTrigger).Name, StringComparison.OrdinalIgnoreCase))
  119. {
  120. if (!info.SystemEvent.HasValue)
  121. {
  122. throw new ArgumentNullException();
  123. }
  124. return new SystemEventTrigger
  125. {
  126. SystemEvent = info.SystemEvent.Value
  127. };
  128. }
  129. if (info.Type.Equals(typeof(StartupTrigger).Name, StringComparison.OrdinalIgnoreCase))
  130. {
  131. return new StartupTrigger();
  132. }
  133. throw new ArgumentException("Unrecognized trigger type: " + info.Type);
  134. }
  135. }
  136. }