From 39747ee80b2f3f59274f54eeb60b56139936a942 Mon Sep 17 00:00:00 2001 From: Niels van Velzen Date: Sun, 22 Sep 2024 18:25:25 +0200 Subject: Fix media segment operation name (#12682) --- Jellyfin.Api/Controllers/MediaSegmentsController.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Jellyfin.Api/Controllers/MediaSegmentsController.cs') diff --git a/Jellyfin.Api/Controllers/MediaSegmentsController.cs b/Jellyfin.Api/Controllers/MediaSegmentsController.cs index e97704d48..3dc5167a2 100644 --- a/Jellyfin.Api/Controllers/MediaSegmentsController.cs +++ b/Jellyfin.Api/Controllers/MediaSegmentsController.cs @@ -45,7 +45,7 @@ public class MediaSegmentsController : BaseJellyfinApiController [HttpGet("{itemId}")] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status404NotFound)] - public async Task>> GetSegmentsAsync( + public async Task>> GetItemSegments( [FromRoute, Required] Guid itemId, [FromQuery] IEnumerable? includeSegmentTypes = null) { -- cgit v1.2.3 From 27b044493a24df6abe92c811c8e6dbdcb316b6aa Mon Sep 17 00:00:00 2001 From: JPVenson Date: Tue, 19 Nov 2024 15:43:17 -0500 Subject: Backport pull request #12916 from jellyfin/release-10.10.z Added query filter to disregard disabled Providers Original-merge: 38c08c4fadf9c44625c0baa49929f7e905efdf70 Merged-by: joshuaboniface Backported-by: Joshua M. Boniface --- .../Controllers/MediaSegmentsController.cs | 2 +- .../MediaSegments/MediaSegmentManager.cs | 38 +++++++++++++++++++--- .../MediaSegements/IMediaSegmentManager.cs | 12 ++++++- 3 files changed, 46 insertions(+), 6 deletions(-) (limited to 'Jellyfin.Api/Controllers/MediaSegmentsController.cs') diff --git a/Jellyfin.Api/Controllers/MediaSegmentsController.cs b/Jellyfin.Api/Controllers/MediaSegmentsController.cs index 3dc5167a2..2d1d4e2c8 100644 --- a/Jellyfin.Api/Controllers/MediaSegmentsController.cs +++ b/Jellyfin.Api/Controllers/MediaSegmentsController.cs @@ -55,7 +55,7 @@ public class MediaSegmentsController : BaseJellyfinApiController return NotFound(); } - var items = await _mediaSegmentManager.GetSegmentsAsync(item.Id, includeSegmentTypes).ConfigureAwait(false); + var items = await _mediaSegmentManager.GetSegmentsAsync(item, includeSegmentTypes).ConfigureAwait(false); return Ok(new QueryResult(items.ToArray())); } } diff --git a/Jellyfin.Server.Implementations/MediaSegments/MediaSegmentManager.cs b/Jellyfin.Server.Implementations/MediaSegments/MediaSegmentManager.cs index d641f521b..a044fec0d 100644 --- a/Jellyfin.Server.Implementations/MediaSegments/MediaSegmentManager.cs +++ b/Jellyfin.Server.Implementations/MediaSegments/MediaSegmentManager.cs @@ -139,23 +139,53 @@ public class MediaSegmentManager : IMediaSegmentManager } /// - public async Task> GetSegmentsAsync(Guid itemId, IEnumerable? typeFilter) + public async Task> GetSegmentsAsync(Guid itemId, IEnumerable? typeFilter, bool filterByProvider = true) + { + var baseItem = _libraryManager.GetItemById(itemId); + + if (baseItem is null) + { + _logger.LogError("Tried to request segments for an invalid item"); + return []; + } + + return await GetSegmentsAsync(baseItem, typeFilter, filterByProvider).ConfigureAwait(false); + } + + /// + public async Task> GetSegmentsAsync(BaseItem item, IEnumerable? typeFilter, bool filterByProvider = true) { using var db = await _dbProvider.CreateDbContextAsync().ConfigureAwait(false); var query = db.MediaSegments - .Where(e => e.ItemId.Equals(itemId)); + .Where(e => e.ItemId.Equals(item.Id)); if (typeFilter is not null) { query = query.Where(e => typeFilter.Contains(e.Type)); } + if (filterByProvider) + { + var libraryOptions = _libraryManager.GetLibraryOptions(item); + var providerIds = _segmentProviders + .Where(e => !libraryOptions.DisabledMediaSegmentProviders.Contains(GetProviderId(e.Name))) + .Select(f => GetProviderId(f.Name)) + .ToArray(); + if (providerIds.Length == 0) + { + return []; + } + + query = query.Where(e => providerIds.Contains(e.SegmentProviderId)); + } + return query .OrderBy(e => e.StartTicks) .AsNoTracking() - .ToImmutableList() - .Select(Map); + .AsEnumerable() + .Select(Map) + .ToArray(); } private static MediaSegmentDto Map(MediaSegment segment) diff --git a/MediaBrowser.Controller/MediaSegements/IMediaSegmentManager.cs b/MediaBrowser.Controller/MediaSegements/IMediaSegmentManager.cs index 010d7edb4..672f27eca 100644 --- a/MediaBrowser.Controller/MediaSegements/IMediaSegmentManager.cs +++ b/MediaBrowser.Controller/MediaSegements/IMediaSegmentManager.cs @@ -50,8 +50,18 @@ public interface IMediaSegmentManager /// /// The id of the . /// filteres all media segments of the given type to be included. If null all types are included. + /// When set filteres the segments to only return those that which providers are currently enabled on their library. /// An enumerator of 's. - Task> GetSegmentsAsync(Guid itemId, IEnumerable? typeFilter); + Task> GetSegmentsAsync(Guid itemId, IEnumerable? typeFilter, bool filterByProvider = true); + + /// + /// Obtains all segments accociated with the itemId. + /// + /// The . + /// filteres all media segments of the given type to be included. If null all types are included. + /// When set filteres the segments to only return those that which providers are currently enabled on their library. + /// An enumerator of 's. + Task> GetSegmentsAsync(BaseItem item, IEnumerable? typeFilter, bool filterByProvider = true); /// /// Gets information about any media segments stored for the given itemId. -- cgit v1.2.3