diff --git a/src/core/events.py b/src/core/events.py index 2a2dcb87394a3f6b6735d6ec9b3cd4a2311aa6cb..8652ae4d361868e6dd0efb6cc85c854d40ec6afa 100644 --- a/src/core/events.py +++ b/src/core/events.py @@ -204,6 +204,19 @@ class EngineEventDispatcher(): thread.start() + def on_timeslot_end(self, timeslot): + """ + Called when a timeslot ends. + """ + def func(self, timeslot): + self.logger.debug("on_timeslot_end(..)") + self.fallback_manager.on_timeslot_end(timeslot) + self.call_event("on_timeslot_end", timeslot) + + thread = Thread(target = func, args = (self, timeslot)) + thread.start() + + def on_play(self, entry): """ Event Handler which is called by the engine when some entry is actually playing. diff --git a/src/scheduling/scheduler.py b/src/scheduling/scheduler.py index 198524e848b365c7d0298a326677cb223256127f..ebabe85454d91e4ca70b0d9e85d2a8fd1d9d71b4 100644 --- a/src/scheduling/scheduler.py +++ b/src/scheduling/scheduler.py @@ -52,7 +52,7 @@ class EntryQueueState(Enum): class TimeslotCommand(EngineExecutor): """ - Command for triggering start of timeslot events. + Command for triggering start and end of timeslot events. """ engine = None @@ -68,8 +68,13 @@ class TimeslotCommand(EngineExecutor): def do_start_timeslot(timeslot): self.logger.info(SU.cyan(f"=== on_timeslot_start('{timeslot}') ===")) self.engine.event_dispatcher.on_timeslot_start(timeslot) - - super().__init__("TIMESLOT", None, timeslot.start_unix, do_start_timeslot, timeslot) + + def do_end_timeslot(timeslot): + self.logger.info(SU.cyan(f"=== on_timeslot_end('{timeslot}') ===")) + self.engine.event_dispatcher.on_timeslot_end(timeslot) + + child_timer = EngineExecutor("TIMESLOT", None, timeslot.end_unix, do_end_timeslot, timeslot) + super().__init__("TIMESLOT", child_timer, timeslot.start_unix, do_start_timeslot, timeslot)