ScheduledTaskHelpers.cs 4.8 KB

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