Browse Source

Add playout schedule priority

pull/2682/head
Carson Kompon 8 months ago committed by Jason Dove
parent
commit
957b607a3b
No known key found for this signature in database
  1. 5
      ErsatzTV.Core/Scheduling/YamlScheduling/Models/YamlPlayoutSchedule.cs
  2. 9
      ErsatzTV.Core/Scheduling/YamlScheduling/SequentialPlayoutBuilder.cs
  3. 5
      ErsatzTV/Resources/sequential-schedule.schema.json

5
ErsatzTV.Core/Scheduling/YamlScheduling/Models/YamlPlayoutSchedule.cs

@ -12,6 +12,11 @@ public class YamlPlayoutSchedule @@ -12,6 +12,11 @@ public class YamlPlayoutSchedule
[YamlMember(Alias = "end_date", ApplyNamingConventions = false)]
public string EndDate { get; set; }
/// <summary>
/// Priority for schedule matching. Higher values are checked first. Default is 0.
/// </summary>
public int Priority { get; set; } = 0;
public List<YamlPlayoutInstruction> Reset { get; set; } = [];
public List<YamlPlayoutInstruction> Playout { get; set; } = [];

9
ErsatzTV.Core/Scheduling/YamlScheduling/SequentialPlayoutBuilder.cs

@ -743,6 +743,7 @@ public class SequentialPlayoutBuilder( @@ -743,6 +743,7 @@ public class SequentialPlayoutBuilder(
/// <summary>
/// Finds the active schedule for the given date, or returns null if no schedule matches.
/// Schedules are checked in priority order (highest first), then by definition order.
/// </summary>
private static YamlPlayoutSchedule GetActiveSchedule(YamlPlayoutDefinition definition, DateTimeOffset date)
{
@ -751,7 +752,13 @@ public class SequentialPlayoutBuilder( @@ -751,7 +752,13 @@ public class SequentialPlayoutBuilder(
return null;
}
foreach (YamlPlayoutSchedule schedule in definition.Schedules)
// Sort by priority (descending), then by original order
var sortedSchedules = definition.Schedules
.Select((schedule, index) => (schedule, index))
.OrderByDescending(x => x.schedule.Priority)
.ThenBy(x => x.index);
foreach ((YamlPlayoutSchedule schedule, int _) in sortedSchedules)
{
if (IsDateInSchedule(schedule, date))
{

5
ErsatzTV/Resources/sequential-schedule.schema.json

@ -86,6 +86,11 @@ @@ -86,6 +86,11 @@
"description": "End date in MM-DD (e.g., '01-31') or YYYY-MM-DD format (e.g., '2024-12-25'). MM-DD dates recur annually, YYYY-MM-DD dates are one-time events.",
"pattern": "^((\\d{4}-)?(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01]))$"
},
"priority": {
"type": "integer",
"description": "Priority for schedule matching. Higher values are checked first. Default is 0. Use this when schedules overlap (e.g., a specific date within a broader range).",
"default": 0
},
"reset": {
"description": "Reset instructions for this scheduled playout",
"type": "array",

Loading…
Cancel
Save