RecordingNotifier.cs 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #pragma warning disable CS1591
  2. using System;
  3. using System.Linq;
  4. using System.Threading;
  5. using System.Threading.Tasks;
  6. using MediaBrowser.Controller.Library;
  7. using MediaBrowser.Controller.LiveTv;
  8. using MediaBrowser.Controller.Plugins;
  9. using MediaBrowser.Controller.Session;
  10. using Microsoft.Extensions.Logging;
  11. namespace Emby.Server.Implementations.EntryPoints
  12. {
  13. public sealed class RecordingNotifier : IServerEntryPoint
  14. {
  15. private readonly ILiveTvManager _liveTvManager;
  16. private readonly ISessionManager _sessionManager;
  17. private readonly IUserManager _userManager;
  18. private readonly ILogger _logger;
  19. public RecordingNotifier(
  20. ISessionManager sessionManager,
  21. IUserManager userManager,
  22. ILogger<RecordingNotifier> logger,
  23. ILiveTvManager liveTvManager)
  24. {
  25. _sessionManager = sessionManager;
  26. _userManager = userManager;
  27. _logger = logger;
  28. _liveTvManager = liveTvManager;
  29. }
  30. /// <inheritdoc />
  31. public Task RunAsync()
  32. {
  33. _liveTvManager.TimerCancelled += OnLiveTvManagerTimerCancelled;
  34. _liveTvManager.SeriesTimerCancelled += OnLiveTvManagerSeriesTimerCancelled;
  35. _liveTvManager.TimerCreated += OnLiveTvManagerTimerCreated;
  36. _liveTvManager.SeriesTimerCreated += OnLiveTvManagerSeriesTimerCreated;
  37. return Task.CompletedTask;
  38. }
  39. private void OnLiveTvManagerSeriesTimerCreated(object sender, MediaBrowser.Model.Events.GenericEventArgs<TimerEventInfo> e)
  40. {
  41. SendMessage("SeriesTimerCreated", e.Argument);
  42. }
  43. private void OnLiveTvManagerTimerCreated(object sender, MediaBrowser.Model.Events.GenericEventArgs<TimerEventInfo> e)
  44. {
  45. SendMessage("TimerCreated", e.Argument);
  46. }
  47. private void OnLiveTvManagerSeriesTimerCancelled(object sender, MediaBrowser.Model.Events.GenericEventArgs<TimerEventInfo> e)
  48. {
  49. SendMessage("SeriesTimerCancelled", e.Argument);
  50. }
  51. private void OnLiveTvManagerTimerCancelled(object sender, MediaBrowser.Model.Events.GenericEventArgs<TimerEventInfo> e)
  52. {
  53. SendMessage("TimerCancelled", e.Argument);
  54. }
  55. private async void SendMessage(string name, TimerEventInfo info)
  56. {
  57. var users = _userManager.Users.Where(i => i.Policy.EnableLiveTvAccess).Select(i => i.Id).ToList();
  58. try
  59. {
  60. await _sessionManager.SendMessageToUserSessions(users, name, info, CancellationToken.None).ConfigureAwait(false);
  61. }
  62. catch (Exception ex)
  63. {
  64. _logger.LogError(ex, "Error sending message");
  65. }
  66. }
  67. /// <inheritdoc />
  68. public void Dispose()
  69. {
  70. _liveTvManager.TimerCancelled -= OnLiveTvManagerTimerCancelled;
  71. _liveTvManager.SeriesTimerCancelled -= OnLiveTvManagerSeriesTimerCancelled;
  72. _liveTvManager.TimerCreated -= OnLiveTvManagerTimerCreated;
  73. _liveTvManager.SeriesTimerCreated -= OnLiveTvManagerSeriesTimerCreated;
  74. }
  75. }
  76. }