RecordingNotifier.cs 3.3 KB

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