Enhance GridScheduleGenerator to prevent reopening aired slots during rebuilds
Updated the GridScheduleGenerator to include logic that checks if a slot has already aired before planning it again, preventing duplicate scheduling of programs. Introduced a new method, LoadAiredSlotWindowsAsync, to retrieve aired time windows and updated the planning logic accordingly. Added integration tests to verify that slots that have already aired are not reopened during rebuilds, ensuring accurate scheduling behavior. Updated documentation to reflect these changes.
This commit is contained in:
@@ -453,6 +453,15 @@ SlotState
|
||||
готовым) — остаётся сохранённое состояние: слот в эфире уже был, и откат в начало группы виден
|
||||
зрителю.
|
||||
|
||||
**Выход, который уже состоялся, не переигрывается.** Курсора для этого мало: он говорит, на чём
|
||||
слот остановился, но не говорит, что этот его выход уже был. Пересборка посреди длинного фильма
|
||||
попадала ровно в эту щель — кино объявленных 21:00 идёт до 23:14, окно слота 21:00–23:15, точка
|
||||
продолжения 23:14 внутри окна, и планировщик открывал слот заново, ставя вторую полнометражку
|
||||
подряд. Поэтому экземпляры слотов, чьи отрезки уже заняты записями в уцелевшей ленте, из плана
|
||||
выбрасываются: сравниваются отрезки, а не старты (сетка эластичная, и кино законно начинается
|
||||
в 20:55), а вид записи не важен — слот, чьё время закрыл фон, свой выход тоже отработал.
|
||||
Фоновых слотов это не касается: они играют не по своему окну, а в чужих паузах.
|
||||
|
||||
Из этого следует: `SchedulerOptions.RetentionHours` (сейчас 24 часа) заменяется на `RetentionDays`,
|
||||
дефолт 90. Значение обязано покрывать максимальный `cooldownDays` среди правил канала и максимальный
|
||||
`daysAgo` среди слотов повтора — иначе остывание начнёт врать, а повторы находить нечего. Валидация
|
||||
|
||||
Reference in New Issue
Block a user