ScheduledTaskHelpers.cs 4.9 KB

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