< Summary - Jellyfin

Information
Class: Jellyfin.LiveTv.Recordings.RecordingNotifier
Assembly: Jellyfin.LiveTv
File(s): /srv/git/jellyfin/src/Jellyfin.LiveTv/Recordings/RecordingNotifier.cs
Line coverage
100%
Covered lines: 15
Uncovered lines: 0
Coverable lines: 15
Total lines: 96
Line coverage: 100%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Coverage history

Coverage history 0 25 50 75 100

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
StartAsync(...)100%11100%
StopAsync(...)100%11100%

File(s)

/srv/git/jellyfin/src/Jellyfin.LiveTv/Recordings/RecordingNotifier.cs

#LineLine coverage
 1using System;
 2using System.Linq;
 3using System.Threading;
 4using System.Threading.Tasks;
 5using Jellyfin.Data.Enums;
 6using Jellyfin.Data.Events;
 7using MediaBrowser.Controller.Library;
 8using MediaBrowser.Controller.LiveTv;
 9using MediaBrowser.Controller.Session;
 10using MediaBrowser.Model.Session;
 11using Microsoft.Extensions.Hosting;
 12using Microsoft.Extensions.Logging;
 13
 14namespace Jellyfin.LiveTv.Recordings
 15{
 16    /// <summary>
 17    /// <see cref="IHostedService"/> responsible for notifying users when a LiveTV recording is completed.
 18    /// </summary>
 19    public sealed class RecordingNotifier : IHostedService
 20    {
 21        private readonly ILogger<RecordingNotifier> _logger;
 22        private readonly ISessionManager _sessionManager;
 23        private readonly IUserManager _userManager;
 24        private readonly ILiveTvManager _liveTvManager;
 25
 26        /// <summary>
 27        /// Initializes a new instance of the <see cref="RecordingNotifier"/> class.
 28        /// </summary>
 29        /// <param name="logger">The <see cref="ILogger"/>.</param>
 30        /// <param name="sessionManager">The <see cref="ISessionManager"/>.</param>
 31        /// <param name="userManager">The <see cref="IUserManager"/>.</param>
 32        /// <param name="liveTvManager">The <see cref="ILiveTvManager"/>.</param>
 33        public RecordingNotifier(
 34            ILogger<RecordingNotifier> logger,
 35            ISessionManager sessionManager,
 36            IUserManager userManager,
 37            ILiveTvManager liveTvManager)
 38        {
 2239            _logger = logger;
 2240            _sessionManager = sessionManager;
 2241            _userManager = userManager;
 2242            _liveTvManager = liveTvManager;
 2243        }
 44
 45        /// <inheritdoc />
 46        public Task StartAsync(CancellationToken cancellationToken)
 47        {
 2248            _liveTvManager.TimerCancelled += OnLiveTvManagerTimerCancelled;
 2249            _liveTvManager.SeriesTimerCancelled += OnLiveTvManagerSeriesTimerCancelled;
 2250            _liveTvManager.TimerCreated += OnLiveTvManagerTimerCreated;
 2251            _liveTvManager.SeriesTimerCreated += OnLiveTvManagerSeriesTimerCreated;
 52
 2253            return Task.CompletedTask;
 54        }
 55
 56        /// <inheritdoc />
 57        public Task StopAsync(CancellationToken cancellationToken)
 58        {
 2259            _liveTvManager.TimerCancelled -= OnLiveTvManagerTimerCancelled;
 2260            _liveTvManager.SeriesTimerCancelled -= OnLiveTvManagerSeriesTimerCancelled;
 2261            _liveTvManager.TimerCreated -= OnLiveTvManagerTimerCreated;
 2262            _liveTvManager.SeriesTimerCreated -= OnLiveTvManagerSeriesTimerCreated;
 63
 2264            return Task.CompletedTask;
 65        }
 66
 67        private async void OnLiveTvManagerSeriesTimerCreated(object? sender, GenericEventArgs<TimerEventInfo> e)
 68            => await SendMessage(SessionMessageType.SeriesTimerCreated, e.Argument).ConfigureAwait(false);
 69
 70        private async void OnLiveTvManagerTimerCreated(object? sender, GenericEventArgs<TimerEventInfo> e)
 71            => await SendMessage(SessionMessageType.TimerCreated, e.Argument).ConfigureAwait(false);
 72
 73        private async void OnLiveTvManagerSeriesTimerCancelled(object? sender, GenericEventArgs<TimerEventInfo> e)
 74            => await SendMessage(SessionMessageType.SeriesTimerCancelled, e.Argument).ConfigureAwait(false);
 75
 76        private async void OnLiveTvManagerTimerCancelled(object? sender, GenericEventArgs<TimerEventInfo> e)
 77            => await SendMessage(SessionMessageType.TimerCancelled, e.Argument).ConfigureAwait(false);
 78
 79        private async Task SendMessage(SessionMessageType name, TimerEventInfo info)
 80        {
 81            var users = _userManager.Users
 82                .Where(i => i.HasPermission(PermissionKind.EnableLiveTvAccess))
 83                .Select(i => i.Id)
 84                .ToList();
 85
 86            try
 87            {
 88                await _sessionManager.SendMessageToUserSessions(users, name, info, CancellationToken.None).ConfigureAwai
 89            }
 90            catch (Exception ex)
 91            {
 92                _logger.LogError(ex, "Error sending message");
 93            }
 94        }
 95    }
 96}