Browse Source

basic block duration enforcement (#1556)

pull/1557/head
Jason Dove 2 years ago committed by GitHub
parent
commit
2ce8db9e01
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      ErsatzTV.Application/Scheduling/Commands/ReplaceBlockItemsHandler.cs
  2. 36
      ErsatzTV.Core/Scheduling/BlockScheduling/BlockPlayoutBuilder.cs

4
ErsatzTV.Application/Scheduling/Commands/ReplaceBlockItemsHandler.cs

@ -68,8 +68,8 @@ public class ReplaceBlockItemsHandler(IDbContextFactory<TvContext> dbContextFact @@ -68,8 +68,8 @@ public class ReplaceBlockItemsHandler(IDbContextFactory<TvContext> dbContextFact
private static Validation<BaseError, Block> MinutesMustBeValid(ReplaceBlockItems request, Block block) =>
Optional(block)
.Filter(_ => request.Minutes > 0 && request.Minutes % 15 == 0)
.ToValidation<BaseError>("Block Minutes must be a positive multiple of 15");
.Filter(_ => request.Minutes > 0 && request.Minutes % 15 == 0 && request.Minutes <= 24 * 60)
.ToValidation<BaseError>("Block duration must be between 15 minutes and 24 hours");
private static Validation<BaseError, Block> CollectionTypesMustBeValid(ReplaceBlockItems request, Block block) =>
request.Items.Map(item => CollectionTypeMustBeValid(item, block)).Sequence().Map(_ => block);

36
ErsatzTV.Core/Scheduling/BlockScheduling/BlockPlayoutBuilder.cs

@ -56,14 +56,29 @@ public class BlockPlayoutBuilder( @@ -56,14 +56,29 @@ public class BlockPlayoutBuilder(
BlockPlayoutChangeDetection.RemoveItemAndHistory(playout, playoutItem);
}
DateTimeOffset currentTime = start;
foreach (EffectiveBlock effectiveBlock in updatedEffectiveBlocks)
{
logger.LogDebug(
"Will schedule block {Block} at {Start}",
effectiveBlock.Block.Name,
effectiveBlock.Start);
if (currentTime < effectiveBlock.Start)
{
currentTime = effectiveBlock.Start;
logger.LogDebug(
"Will schedule block {Block} at {Start}",
effectiveBlock.Block.Name,
effectiveBlock.Start);
}
else
{
logger.LogDebug(
"Will schedule block {Block} with start {Start} at {ActualStart}",
effectiveBlock.Block.Name,
effectiveBlock.Start,
currentTime);
}
DateTimeOffset currentTime = effectiveBlock.Start;
DateTimeOffset blockFinish = effectiveBlock.Start.AddMinutes(effectiveBlock.Block.Minutes);
foreach (BlockItem blockItem in effectiveBlock.Block.Items.OrderBy(i => i.Index))
{
@ -73,6 +88,17 @@ public class BlockPlayoutBuilder( @@ -73,6 +88,17 @@ public class BlockPlayoutBuilder(
continue;
}
if (currentTime >= blockFinish)
{
logger.LogDebug(
"Current time {Time} for block {Block} is beyond block finish {Finish}; will stop with this block's items",
currentTime,
effectiveBlock.Block.Name,
blockFinish);
break;
}
// check for playout history for this collection
string historyKey = HistoryDetails.KeyForBlockItem(blockItem);
//logger.LogDebug("History key for block item {Item} is {Key}", blockItem.Id, historyKey);

Loading…
Cancel
Save