2
0
Эх сурвалжийг харах

Convert LibraryChangedNotifier to IHostedService

Patrick Barron 1 жил өмнө
parent
commit
4e02d8aa21

+ 23 - 22
Emby.Server.Implementations/EntryPoints/LibraryChangedNotifier.cs

@@ -13,19 +13,19 @@ using MediaBrowser.Controller.Configuration;
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Entities.Audio;
 using MediaBrowser.Controller.Library;
-using MediaBrowser.Controller.Plugins;
 using MediaBrowser.Controller.Providers;
 using MediaBrowser.Controller.Session;
 using MediaBrowser.Model.Entities;
 using MediaBrowser.Model.Session;
+using Microsoft.Extensions.Hosting;
 using Microsoft.Extensions.Logging;
 
 namespace Emby.Server.Implementations.EntryPoints;
 
 /// <summary>
-/// A <see cref="IServerEntryPoint"/> that notifies users when libraries are updated.
+/// A <see cref="IHostedService"/> responsible for notifying users when libraries are updated.
 /// </summary>
-public sealed class LibraryChangedNotifier : IServerEntryPoint
+public sealed class LibraryChangedNotifier : IHostedService, IDisposable
 {
     private readonly ILibraryManager _libraryManager;
     private readonly IServerConfigurationManager _configurationManager;
@@ -70,7 +70,7 @@ public sealed class LibraryChangedNotifier : IServerEntryPoint
     }
 
     /// <inheritdoc />
-    public Task RunAsync()
+    public Task StartAsync(CancellationToken cancellationToken)
     {
         _libraryManager.ItemAdded += OnLibraryItemAdded;
         _libraryManager.ItemUpdated += OnLibraryItemUpdated;
@@ -83,6 +83,20 @@ public sealed class LibraryChangedNotifier : IServerEntryPoint
         return Task.CompletedTask;
     }
 
+    /// <inheritdoc />
+    public Task StopAsync(CancellationToken cancellationToken)
+    {
+        _libraryManager.ItemAdded -= OnLibraryItemAdded;
+        _libraryManager.ItemUpdated -= OnLibraryItemUpdated;
+        _libraryManager.ItemRemoved -= OnLibraryItemRemoved;
+
+        _providerManager.RefreshCompleted -= OnProviderRefreshCompleted;
+        _providerManager.RefreshStarted -= OnProviderRefreshStarted;
+        _providerManager.RefreshProgress -= OnProviderRefreshProgress;
+
+        return Task.CompletedTask;
+    }
+
     private void OnProviderRefreshProgress(object? sender, GenericEventArgs<Tuple<BaseItem, double>> e)
     {
         var item = e.Argument.Item1;
@@ -137,9 +151,7 @@ public sealed class LibraryChangedNotifier : IServerEntryPoint
     }
 
     private void OnProviderRefreshStarted(object? sender, GenericEventArgs<BaseItem> e)
-    {
-        OnProviderRefreshProgress(sender, new GenericEventArgs<Tuple<BaseItem, double>>(new Tuple<BaseItem, double>(e.Argument, 0)));
-    }
+        => OnProviderRefreshProgress(sender, new GenericEventArgs<Tuple<BaseItem, double>>(new Tuple<BaseItem, double>(e.Argument, 0)));
 
     private void OnProviderRefreshCompleted(object? sender, GenericEventArgs<BaseItem> e)
     {
@@ -342,7 +354,7 @@ public sealed class LibraryChangedNotifier : IServerEntryPoint
         return item.SourceType == SourceType.Library;
     }
 
-    private IEnumerable<string> GetTopParentIds(List<BaseItem> items, List<Folder> allUserRootChildren)
+    private static IEnumerable<string> GetTopParentIds(List<BaseItem> items, List<Folder> allUserRootChildren)
     {
         var list = new List<string>();
 
@@ -363,7 +375,7 @@ public sealed class LibraryChangedNotifier : IServerEntryPoint
         return list.Distinct(StringComparer.Ordinal);
     }
 
-    private IEnumerable<T> TranslatePhysicalItemToUserLibrary<T>(T item, User user, bool includeIfNotFound = false)
+    private T[] TranslatePhysicalItemToUserLibrary<T>(T item, User user, bool includeIfNotFound = false)
         where T : BaseItem
     {
         // If the physical root changed, return the user root
@@ -384,18 +396,7 @@ public sealed class LibraryChangedNotifier : IServerEntryPoint
     /// <inheritdoc />
     public void Dispose()
     {
-        _libraryManager.ItemAdded -= OnLibraryItemAdded;
-        _libraryManager.ItemUpdated -= OnLibraryItemUpdated;
-        _libraryManager.ItemRemoved -= OnLibraryItemRemoved;
-
-        _providerManager.RefreshCompleted -= OnProviderRefreshCompleted;
-        _providerManager.RefreshStarted -= OnProviderRefreshStarted;
-        _providerManager.RefreshProgress -= OnProviderRefreshProgress;
-
-        if (_libraryUpdateTimer is not null)
-        {
-            _libraryUpdateTimer.Dispose();
-            _libraryUpdateTimer = null;
-        }
+        _libraryUpdateTimer?.Dispose();
+        _libraryUpdateTimer = null;
     }
 }

+ 2 - 0
Jellyfin.Server/Startup.cs

@@ -4,6 +4,7 @@ using System.Net.Http;
 using System.Net.Http.Headers;
 using System.Net.Mime;
 using System.Text;
+using Emby.Server.Implementations.EntryPoints;
 using Jellyfin.Api.Middleware;
 using Jellyfin.LiveTv.Extensions;
 using Jellyfin.MediaEncoding.Hls.Extensions;
@@ -126,6 +127,7 @@ namespace Jellyfin.Server
 
             services.AddHostedService<AutoDiscoveryHost>();
             services.AddHostedService<PortForwardingHost>();
+            services.AddHostedService<LibraryChangedNotifier>();
         }
 
         /// <summary>