|
@@ -141,6 +141,19 @@ public class MediaSegmentManager : IMediaSegmentManager
|
|
/// <inheritdoc />
|
|
/// <inheritdoc />
|
|
public async Task<IEnumerable<MediaSegmentDto>> GetSegmentsAsync(Guid itemId, IEnumerable<MediaSegmentType>? typeFilter)
|
|
public async Task<IEnumerable<MediaSegmentDto>> GetSegmentsAsync(Guid itemId, IEnumerable<MediaSegmentType>? typeFilter)
|
|
{
|
|
{
|
|
|
|
+ var baseItem = _libraryManager.GetItemById(itemId);
|
|
|
|
+
|
|
|
|
+ if (baseItem is null)
|
|
|
|
+ {
|
|
|
|
+ _logger.LogError("Tried to request segments for an invalid item");
|
|
|
|
+ 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);
|
|
using var db = await _dbProvider.CreateDbContextAsync().ConfigureAwait(false);
|
|
|
|
|
|
var query = db.MediaSegments
|
|
var query = db.MediaSegments
|
|
@@ -151,6 +164,9 @@ public class MediaSegmentManager : IMediaSegmentManager
|
|
query = query.Where(e => typeFilter.Contains(e.Type));
|
|
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));
|
|
|
|
+
|
|
return query
|
|
return query
|
|
.OrderBy(e => e.StartTicks)
|
|
.OrderBy(e => e.StartTicks)
|
|
.AsNoTracking()
|
|
.AsNoTracking()
|