diff options
| author | Patrick Barron <barronpm@gmail.com> | 2024-01-09 10:05:31 -0500 |
|---|---|---|
| committer | Patrick Barron <barronpm@gmail.com> | 2024-01-09 10:16:58 -0500 |
| commit | c964ea23bf19246da647907051ce4ff88f2a599d (patch) | |
| tree | 8afbd986abb3d38986715d8cc83f8b692d896f87 /src | |
| parent | 126aa9c893a5b5e3107ca9b6355d354753d45ed3 (diff) | |
Move RecordingNotifier to LiveTv project
Diffstat (limited to 'src')
| -rw-r--r-- | src/Jellyfin.LiveTv/RecordingNotifier.cs | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/src/Jellyfin.LiveTv/RecordingNotifier.cs b/src/Jellyfin.LiveTv/RecordingNotifier.cs new file mode 100644 index 000000000..2923948eb --- /dev/null +++ b/src/Jellyfin.LiveTv/RecordingNotifier.cs @@ -0,0 +1,93 @@ +#nullable disable + +#pragma warning disable CS1591 + +using System; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Jellyfin.Data.Enums; +using Jellyfin.Data.Events; +using MediaBrowser.Controller.Library; +using MediaBrowser.Controller.LiveTv; +using MediaBrowser.Controller.Plugins; +using MediaBrowser.Controller.Session; +using MediaBrowser.Model.Session; +using Microsoft.Extensions.Logging; + +namespace Jellyfin.LiveTv +{ + public sealed class RecordingNotifier : IServerEntryPoint + { + private readonly ILiveTvManager _liveTvManager; + private readonly ISessionManager _sessionManager; + private readonly IUserManager _userManager; + private readonly ILogger<RecordingNotifier> _logger; + + public RecordingNotifier( + ISessionManager sessionManager, + IUserManager userManager, + ILogger<RecordingNotifier> logger, + ILiveTvManager liveTvManager) + { + _sessionManager = sessionManager; + _userManager = userManager; + _logger = logger; + _liveTvManager = liveTvManager; + } + + /// <inheritdoc /> + public Task RunAsync() + { + _liveTvManager.TimerCancelled += OnLiveTvManagerTimerCancelled; + _liveTvManager.SeriesTimerCancelled += OnLiveTvManagerSeriesTimerCancelled; + _liveTvManager.TimerCreated += OnLiveTvManagerTimerCreated; + _liveTvManager.SeriesTimerCreated += OnLiveTvManagerSeriesTimerCreated; + + return Task.CompletedTask; + } + + private async void OnLiveTvManagerSeriesTimerCreated(object sender, GenericEventArgs<TimerEventInfo> e) + { + await SendMessage(SessionMessageType.SeriesTimerCreated, e.Argument).ConfigureAwait(false); + } + + private async void OnLiveTvManagerTimerCreated(object sender, GenericEventArgs<TimerEventInfo> e) + { + await SendMessage(SessionMessageType.TimerCreated, e.Argument).ConfigureAwait(false); + } + + private async void OnLiveTvManagerSeriesTimerCancelled(object sender, GenericEventArgs<TimerEventInfo> e) + { + await SendMessage(SessionMessageType.SeriesTimerCancelled, e.Argument).ConfigureAwait(false); + } + + private async void OnLiveTvManagerTimerCancelled(object sender, GenericEventArgs<TimerEventInfo> e) + { + await SendMessage(SessionMessageType.TimerCancelled, e.Argument).ConfigureAwait(false); + } + + private async Task SendMessage(SessionMessageType name, TimerEventInfo info) + { + var users = _userManager.Users.Where(i => i.HasPermission(PermissionKind.EnableLiveTvAccess)).Select(i => i.Id).ToList(); + + try + { + await _sessionManager.SendMessageToUserSessions(users, name, info, CancellationToken.None).ConfigureAwait(false); + } + catch (Exception ex) + { + _logger.LogError(ex, "Error sending message"); + } + } + + /// <inheritdoc /> + public void Dispose() + { + _liveTvManager.TimerCancelled -= OnLiveTvManagerTimerCancelled; + _liveTvManager.SeriesTimerCancelled -= OnLiveTvManagerSeriesTimerCancelled; + _liveTvManager.TimerCreated -= OnLiveTvManagerTimerCreated; + _liveTvManager.SeriesTimerCreated -= OnLiveTvManagerSeriesTimerCreated; + } + } +} |
