소스 검색

Convert RecordingNotifier to IHostedService

Patrick Barron 1 년 전
부모
커밋
24b4d02596
2개의 변경된 파일40개의 추가작업 그리고 35개의 파일을 삭제
  1. 2 0
      Jellyfin.Server/Startup.cs
  2. 38 35
      src/Jellyfin.LiveTv/RecordingNotifier.cs

+ 2 - 0
Jellyfin.Server/Startup.cs

@@ -6,6 +6,7 @@ using System.Net.Mime;
 using System.Text;
 using Emby.Server.Implementations.EntryPoints;
 using Jellyfin.Api.Middleware;
+using Jellyfin.LiveTv;
 using Jellyfin.LiveTv.Extensions;
 using Jellyfin.MediaEncoding.Hls.Extensions;
 using Jellyfin.Networking;
@@ -129,6 +130,7 @@ namespace Jellyfin.Server
             services.AddHostedService<PortForwardingHost>();
             services.AddHostedService<LibraryChangedNotifier>();
             services.AddHostedService<UserDataChangeNotifier>();
+            services.AddHostedService<RecordingNotifier>();
         }
 
         /// <summary>

+ 38 - 35
src/Jellyfin.LiveTv/RecordingNotifier.cs

@@ -1,7 +1,3 @@
-#nullable disable
-
-#pragma warning disable CS1591
-
 using System;
 using System.Linq;
 using System.Threading;
@@ -10,34 +6,44 @@ 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.Hosting;
 using Microsoft.Extensions.Logging;
 
 namespace Jellyfin.LiveTv
 {
-    public sealed class RecordingNotifier : IServerEntryPoint
+    /// <summary>
+    /// <see cref="IHostedService"/> responsible for notifying users when a LiveTV recording is completed.
+    /// </summary>
+    public sealed class RecordingNotifier : IHostedService
     {
-        private readonly ILiveTvManager _liveTvManager;
+        private readonly ILogger<RecordingNotifier> _logger;
         private readonly ISessionManager _sessionManager;
         private readonly IUserManager _userManager;
-        private readonly ILogger<RecordingNotifier> _logger;
+        private readonly ILiveTvManager _liveTvManager;
 
+        /// <summary>
+        /// Initializes a new instance of the <see cref="RecordingNotifier"/> class.
+        /// </summary>
+        /// <param name="logger">The <see cref="ILogger"/>.</param>
+        /// <param name="sessionManager">The <see cref="ISessionManager"/>.</param>
+        /// <param name="userManager">The <see cref="IUserManager"/>.</param>
+        /// <param name="liveTvManager">The <see cref="ILiveTvManager"/>.</param>
         public RecordingNotifier(
+            ILogger<RecordingNotifier> logger,
             ISessionManager sessionManager,
             IUserManager userManager,
-            ILogger<RecordingNotifier> logger,
             ILiveTvManager liveTvManager)
         {
+            _logger = logger;
             _sessionManager = sessionManager;
             _userManager = userManager;
-            _logger = logger;
             _liveTvManager = liveTvManager;
         }
 
         /// <inheritdoc />
-        public Task RunAsync()
+        public Task StartAsync(CancellationToken cancellationToken)
         {
             _liveTvManager.TimerCancelled += OnLiveTvManagerTimerCancelled;
             _liveTvManager.SeriesTimerCancelled += OnLiveTvManagerSeriesTimerCancelled;
@@ -47,29 +53,35 @@ namespace Jellyfin.LiveTv
             return Task.CompletedTask;
         }
 
-        private async void OnLiveTvManagerSeriesTimerCreated(object sender, GenericEventArgs<TimerEventInfo> e)
+        /// <inheritdoc />
+        public Task StopAsync(CancellationToken cancellationToken)
         {
-            await SendMessage(SessionMessageType.SeriesTimerCreated, e.Argument).ConfigureAwait(false);
-        }
+            _liveTvManager.TimerCancelled -= OnLiveTvManagerTimerCancelled;
+            _liveTvManager.SeriesTimerCancelled -= OnLiveTvManagerSeriesTimerCancelled;
+            _liveTvManager.TimerCreated -= OnLiveTvManagerTimerCreated;
+            _liveTvManager.SeriesTimerCreated -= OnLiveTvManagerSeriesTimerCreated;
 
-        private async void OnLiveTvManagerTimerCreated(object sender, GenericEventArgs<TimerEventInfo> e)
-        {
-            await SendMessage(SessionMessageType.TimerCreated, e.Argument).ConfigureAwait(false);
+            return Task.CompletedTask;
         }
 
-        private async void OnLiveTvManagerSeriesTimerCancelled(object sender, GenericEventArgs<TimerEventInfo> e)
-        {
-            await SendMessage(SessionMessageType.SeriesTimerCancelled, e.Argument).ConfigureAwait(false);
-        }
+        private async void OnLiveTvManagerSeriesTimerCreated(object? sender, GenericEventArgs<TimerEventInfo> e)
+            => await SendMessage(SessionMessageType.SeriesTimerCreated, e.Argument).ConfigureAwait(false);
 
-        private async void OnLiveTvManagerTimerCancelled(object sender, GenericEventArgs<TimerEventInfo> e)
-        {
-            await SendMessage(SessionMessageType.TimerCancelled, 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();
+            var users = _userManager.Users
+                .Where(i => i.HasPermission(PermissionKind.EnableLiveTvAccess))
+                .Select(i => i.Id)
+                .ToList();
 
             try
             {
@@ -80,14 +92,5 @@ namespace Jellyfin.LiveTv
                 _logger.LogError(ex, "Error sending message");
             }
         }
-
-        /// <inheritdoc />
-        public void Dispose()
-        {
-            _liveTvManager.TimerCancelled -= OnLiveTvManagerTimerCancelled;
-            _liveTvManager.SeriesTimerCancelled -= OnLiveTvManagerSeriesTimerCancelled;
-            _liveTvManager.TimerCreated -= OnLiveTvManagerTimerCreated;
-            _liveTvManager.SeriesTimerCreated -= OnLiveTvManagerSeriesTimerCreated;
-        }
     }
 }