RecordingNotifier.cs 3.2 KB

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