RecordingNotifier.cs 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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 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(ISessionManager sessionManager, IUserManager userManager, ILogger logger, ILiveTvManager liveTvManager)
  20. {
  21. _sessionManager = sessionManager;
  22. _userManager = userManager;
  23. _logger = logger;
  24. _liveTvManager = liveTvManager;
  25. }
  26. public Task RunAsync()
  27. {
  28. _liveTvManager.TimerCancelled += _liveTvManager_TimerCancelled;
  29. _liveTvManager.SeriesTimerCancelled += _liveTvManager_SeriesTimerCancelled;
  30. _liveTvManager.TimerCreated += _liveTvManager_TimerCreated;
  31. _liveTvManager.SeriesTimerCreated += _liveTvManager_SeriesTimerCreated;
  32. return Task.CompletedTask;
  33. }
  34. private void _liveTvManager_SeriesTimerCreated(object sender, MediaBrowser.Model.Events.GenericEventArgs<TimerEventInfo> e)
  35. {
  36. SendMessage("SeriesTimerCreated", e.Argument);
  37. }
  38. private void _liveTvManager_TimerCreated(object sender, MediaBrowser.Model.Events.GenericEventArgs<TimerEventInfo> e)
  39. {
  40. SendMessage("TimerCreated", e.Argument);
  41. }
  42. private void _liveTvManager_SeriesTimerCancelled(object sender, MediaBrowser.Model.Events.GenericEventArgs<TimerEventInfo> e)
  43. {
  44. SendMessage("SeriesTimerCancelled", e.Argument);
  45. }
  46. private void _liveTvManager_TimerCancelled(object sender, MediaBrowser.Model.Events.GenericEventArgs<TimerEventInfo> e)
  47. {
  48. SendMessage("TimerCancelled", e.Argument);
  49. }
  50. private async void SendMessage(string name, TimerEventInfo info)
  51. {
  52. var users = _userManager.Users.Where(i => i.Policy.EnableLiveTvAccess).Select(i => i.Id).ToList();
  53. try
  54. {
  55. await _sessionManager.SendMessageToUserSessions(users, name, info, CancellationToken.None);
  56. }
  57. catch (ObjectDisposedException)
  58. {
  59. // TODO Log exception or Investigate and properly fix.
  60. }
  61. catch (Exception ex)
  62. {
  63. _logger.LogError(ex, "Error sending message");
  64. }
  65. }
  66. public void Dispose()
  67. {
  68. _liveTvManager.TimerCancelled -= _liveTvManager_TimerCancelled;
  69. _liveTvManager.SeriesTimerCancelled -= _liveTvManager_SeriesTimerCancelled;
  70. _liveTvManager.TimerCreated -= _liveTvManager_TimerCreated;
  71. _liveTvManager.SeriesTimerCreated -= _liveTvManager_SeriesTimerCreated;
  72. }
  73. }
  74. }