fix delete old segments (#1536)

* code cleanup

* ignore errors deleting old hls segments
This commit is contained in:
Jason Dove
2024-01-04 10:42:04 -06:00
committed by GitHub
parent 18ed20e203
commit c18be5559b
71 changed files with 207 additions and 187 deletions
+14 -12
View File
@@ -424,11 +424,12 @@ public class PlayoutBuilder : IPlayoutBuilder
cancellationToken);
collectionEnumerators.Add(collectionKey, enumerator);
}
var collectionItemCount = collectionMediaItems.Map((k, v) => (k, v.Count)).Values.ToDictionary();
var scheduleItemsFillGroupEnumerators = new Dictionary<int, IScheduleItemsEnumerator>();
foreach (ProgramScheduleItem scheduleItem in sortedScheduleItems.Where(si => si.FillWithGroupMode is not FillWithGroupMode.None))
foreach (ProgramScheduleItem scheduleItem in sortedScheduleItems.Where(
si => si.FillWithGroupMode is not FillWithGroupMode.None))
{
var collectionKey = CollectionKey.ForScheduleItem(scheduleItem);
List<MediaItem> mediaItems = await MediaItemsForCollection.Collect(
@@ -439,14 +440,15 @@ public class PlayoutBuilder : IPlayoutBuilder
var fakeCollections = _mediaCollectionRepository.GroupIntoFakeCollections(mediaItems)
.Filter(c => c.ShowId > 0 || c.ArtistId > 0)
.ToList();
List<ProgramScheduleItem> fakeScheduleItems = [];
List<ProgramScheduleItem> fakeScheduleItems = []
;
// this will be used to clone a schedule item
MethodInfo generic = typeof(JsonConvert).GetMethods()
.FirstOrDefault(
x => x.Name.Equals("DeserializeObject", StringComparison.OrdinalIgnoreCase) && x.IsGenericMethod &&
x.GetParameters().Length == 1)?.MakeGenericMethod(scheduleItem.GetType());
foreach (CollectionWithItems fakeCollection in fakeCollections)
{
var key = new CollectionKey
@@ -473,7 +475,7 @@ public class PlayoutBuilder : IPlayoutBuilder
cancellationToken);
collectionEnumerators.Add(key, enumerator);
// this makes multiple (0) work - since it needs the number of items in the collection
collectionItemCount.Add(key, fakeCollection.MediaItems.Count);
}
@@ -572,7 +574,7 @@ public class PlayoutBuilder : IPlayoutBuilder
// get the schedule item out of the sorted list
ProgramScheduleItem scheduleItem = playoutBuilderState.ScheduleItemsEnumerator.Current;
// replace with the fake schedule item when filling with group
if (scheduleItem.FillWithGroupMode is not FillWithGroupMode.None)
{
@@ -672,7 +674,7 @@ public class PlayoutBuilder : IPlayoutBuilder
activeSchedule,
collectionEnumerators,
saveAnchorDate);
// build fill group indices
playout.FillGroupIndices = BuildFillGroupIndices(playout, scheduleItemsFillGroupEnumerators);
@@ -684,7 +686,7 @@ public class PlayoutBuilder : IPlayoutBuilder
Dictionary<int, IScheduleItemsEnumerator> scheduleItemsFillGroupEnumerators)
{
var result = playout.FillGroupIndices.ToList();
foreach ((int programScheduleItemId, IScheduleItemsEnumerator enumerator) in scheduleItemsFillGroupEnumerators)
{
Option<PlayoutScheduleItemFillGroupIndex> maybeFgi = Optional(
@@ -694,7 +696,7 @@ public class PlayoutBuilder : IPlayoutBuilder
{
fgi.EnumeratorState = enumerator.State;
}
if (maybeFgi.IsNone)
{
var fgi = new PlayoutScheduleItemFillGroupIndex
@@ -703,7 +705,7 @@ public class PlayoutBuilder : IPlayoutBuilder
ProgramScheduleItemId = programScheduleItemId,
EnumeratorState = enumerator.State
};
result.Add(fgi);
}
}
@@ -223,7 +223,7 @@ public abstract class PlayoutModeSchedulerBase<T> : IPlayoutModeScheduler<T> whe
Logger.LogError("Multiple pad-to-nearest-minute values are invalid; no filler will be used");
return new List<PlayoutItem> { playoutItem };
}
// missing pad-to-nearest-minute value is invalid; use no filler
FillerPreset invalidPadFiller = allFiller
.FirstOrDefault(f => f.FillerMode == FillerMode.Pad && f.PadToNearestMinute.HasValue == false);
@@ -11,10 +11,8 @@ public class PlayoutModeSchedulerMultiple : PlayoutModeSchedulerBase<ProgramSche
private readonly Map<CollectionKey, int> _collectionItemCount;
public PlayoutModeSchedulerMultiple(Map<CollectionKey, int> collectionItemCount, ILogger logger)
: base(logger)
{
: base(logger) =>
_collectionItemCount = collectionItemCount;
}
public override Tuple<PlayoutBuilderState, List<PlayoutItem>> Schedule(
PlayoutBuilderState playoutBuilderState,
@@ -15,7 +15,8 @@ public class RandomizedMediaCollectionEnumerator : IMediaCollectionEnumerator
{
_mediaItems = mediaItems;
_lazyMinimumDuration =
new Lazy<Option<TimeSpan>>(() => _mediaItems.Bind(i => i.GetNonZeroDuration()).OrderBy(identity).HeadOrNone());
new Lazy<Option<TimeSpan>>(
() => _mediaItems.Bind(i => i.GetNonZeroDuration()).OrderBy(identity).HeadOrNone());
_random = new Random(state.Seed);
State = new CollectionEnumeratorState { Seed = state.Seed };
@@ -34,7 +34,8 @@ public class ShuffleInOrderCollectionEnumerator : IMediaCollectionEnumerator
_random = new Random(state.Seed);
_shuffled = Shuffle(_collections, _random);
_lazyMinimumDuration =
new Lazy<Option<TimeSpan>>(() => _shuffled.Bind(i => i.GetNonZeroDuration()).OrderBy(identity).HeadOrNone());
new Lazy<Option<TimeSpan>>(
() => _shuffled.Bind(i => i.GetNonZeroDuration()).OrderBy(identity).HeadOrNone());
State = new CollectionEnumeratorState { Seed = state.Seed };
while (State.Index < state.Index)
@@ -31,7 +31,8 @@ public class ShuffledMediaCollectionEnumerator : IMediaCollectionEnumerator
_random = new CloneableRandom(state.Seed);
_shuffled = Shuffle(_mediaItems, _random);
_lazyMinimumDuration =
new Lazy<Option<TimeSpan>>(() => _shuffled.Bind(i => i.GetNonZeroDuration()).OrderBy(identity).HeadOrNone());
new Lazy<Option<TimeSpan>>(
() => _shuffled.Bind(i => i.GetNonZeroDuration()).OrderBy(identity).HeadOrNone());
State = new CollectionEnumeratorState { Seed = state.Seed };
while (State.Index < state.Index)