SystemEventTrigger.cs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. using System;
  2. using System.Threading.Tasks;
  3. using MediaBrowser.Model.Events;
  4. using Microsoft.Extensions.Logging;
  5. using MediaBrowser.Model.System;
  6. using MediaBrowser.Model.Tasks;
  7. namespace Emby.Server.Implementations.ScheduledTasks
  8. {
  9. /// <summary>
  10. /// Class SystemEventTrigger
  11. /// </summary>
  12. public class SystemEventTrigger : ITaskTrigger
  13. {
  14. /// <summary>
  15. /// Gets or sets the system event.
  16. /// </summary>
  17. /// <value>The system event.</value>
  18. public SystemEvent SystemEvent { get; set; }
  19. /// <summary>
  20. /// Gets or sets the options of this task.
  21. /// </summary>
  22. public TaskOptions TaskOptions { get; set; }
  23. private readonly ISystemEvents _systemEvents;
  24. public SystemEventTrigger(ISystemEvents systemEvents)
  25. {
  26. _systemEvents = systemEvents;
  27. }
  28. /// <summary>
  29. /// Stars waiting for the trigger action
  30. /// </summary>
  31. /// <param name="lastResult">The last result.</param>
  32. /// <param name="isApplicationStartup">if set to <c>true</c> [is application startup].</param>
  33. public void Start(TaskResult lastResult, ILogger logger, string taskName, bool isApplicationStartup)
  34. {
  35. switch (SystemEvent)
  36. {
  37. case SystemEvent.WakeFromSleep:
  38. _systemEvents.Resume += _systemEvents_Resume;
  39. break;
  40. }
  41. }
  42. private async void _systemEvents_Resume(object sender, EventArgs e)
  43. {
  44. if (SystemEvent == SystemEvent.WakeFromSleep)
  45. {
  46. // This value is a bit arbitrary, but add a delay to help ensure network connections have been restored before running the task
  47. await Task.Delay(10000).ConfigureAwait(false);
  48. OnTriggered();
  49. }
  50. }
  51. /// <summary>
  52. /// Stops waiting for the trigger action
  53. /// </summary>
  54. public void Stop()
  55. {
  56. _systemEvents.Resume -= _systemEvents_Resume;
  57. }
  58. /// <summary>
  59. /// Occurs when [triggered].
  60. /// </summary>
  61. public event EventHandler<EventArgs> Triggered;
  62. /// <summary>
  63. /// Called when [triggered].
  64. /// </summary>
  65. private void OnTriggered()
  66. {
  67. if (Triggered != null)
  68. {
  69. Triggered(this, EventArgs.Empty);
  70. }
  71. }
  72. }
  73. }