From 09e044428d7e5005841729ca20c3311a09c5ad9d Mon Sep 17 00:00:00 2001
From: David Trattnig <david.trattnig@o94.at>
Date: Sat, 31 Oct 2020 21:31:26 +0100
Subject: [PATCH] Event for end of timeslot. #38

---
 src/core/events.py          | 13 +++++++++++++
 src/scheduling/scheduler.py | 11 ++++++++---
 2 files changed, 21 insertions(+), 3 deletions(-)

diff --git a/src/core/events.py b/src/core/events.py
index 2a2dcb87..8652ae4d 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 198524e8..ebabe854 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)
 
 
 
-- 
GitLab