Jelajahi Sumber

Added parameter to enable or disable library filter

JPVenson 7 bulan lalu
induk
melakukan
c08d1d5b7f

+ 10 - 8
Jellyfin.Server.Implementations/MediaSegments/MediaSegmentManager.cs

@@ -139,7 +139,7 @@ public class MediaSegmentManager : IMediaSegmentManager
     }
 
     /// <inheritdoc />
-    public async Task<IEnumerable<MediaSegmentDto>> GetSegmentsAsync(Guid itemId, IEnumerable<MediaSegmentType>? typeFilter)
+    public async Task<IEnumerable<MediaSegmentDto>> GetSegmentsAsync(Guid itemId, IEnumerable<MediaSegmentType>? typeFilter, bool filterByProvider = true)
     {
         var baseItem = _libraryManager.GetItemById(itemId);
 
@@ -149,11 +149,6 @@ public class MediaSegmentManager : IMediaSegmentManager
             return [];
         }
 
-        var libraryOptions = _libraryManager.GetLibraryOptions(baseItem);
-        var providers = _segmentProviders
-            .Where(e => !libraryOptions.DisabledMediaSegmentProviders.Contains(GetProviderId(e.Name)))
-            .ToArray();
-
         using var db = await _dbProvider.CreateDbContextAsync().ConfigureAwait(false);
 
         var query = db.MediaSegments
@@ -164,8 +159,15 @@ public class MediaSegmentManager : IMediaSegmentManager
             query = query.Where(e => typeFilter.Contains(e.Type));
         }
 
-        var providerIds = providers.Select(f => GetProviderId(f.Name)).ToArray();
-        query = query.Where(e => providerIds.Contains(e.SegmentProviderId));
+        if (filterByProvider)
+        {
+            var libraryOptions = _libraryManager.GetLibraryOptions(baseItem);
+            var providers = _segmentProviders
+                .Where(e => !libraryOptions.DisabledMediaSegmentProviders.Contains(GetProviderId(e.Name)))
+                .ToArray();
+            var providerIds = providers.Select(f => GetProviderId(f.Name)).ToArray();
+            query = query.Where(e => providerIds.Contains(e.SegmentProviderId));
+        }
 
         return query
             .OrderBy(e => e.StartTicks)

+ 2 - 1
MediaBrowser.Controller/MediaSegements/IMediaSegmentManager.cs

@@ -50,8 +50,9 @@ public interface IMediaSegmentManager
     /// </summary>
     /// <param name="itemId">The id of the <see cref="BaseItem"/>.</param>
     /// <param name="typeFilter">filteres all media segments of the given type to be included. If null all types are included.</param>
+    /// <param name="filterByProvider">When set filteres the segments to only return those that which providers are currently enabled on their library.</param>
     /// <returns>An enumerator of <see cref="MediaSegmentDto"/>'s.</returns>
-    Task<IEnumerable<MediaSegmentDto>> GetSegmentsAsync(Guid itemId, IEnumerable<MediaSegmentType>? typeFilter);
+    Task<IEnumerable<MediaSegmentDto>> GetSegmentsAsync(Guid itemId, IEnumerable<MediaSegmentType>? typeFilter, bool filterByProvider = true);
 
     /// <summary>
     /// Gets information about any media segments stored for the given itemId.