From eefb99a59c39984ad34610525ab89e6274fdc38f Mon Sep 17 00:00:00 2001
From: David Trattnig <david.trattnig@o94.at>
Date: Wed, 11 Mar 2020 12:28:26 +0100
Subject: [PATCH] Clock API.

---
 api.py | 49 +++++++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 45 insertions(+), 4 deletions(-)

diff --git a/api.py b/api.py
index 597540dc..8bff70b7 100644
--- a/api.py
+++ b/api.py
@@ -112,6 +112,7 @@ class EngineApi:
         EngineApi.track_schema = TrackServiceSchema()
         EngineApi.report_schema = ReportSchema(many=True)
         EngineApi.schedule_schema = ScheduleSchema(many=True)
+        EngineApi.clockdata_schema = ClockDataSchema()
 
         # Define API routes
         self.api.add_resource(TrackServiceResource,         config.api_prefix + "/trackservice/")
@@ -120,6 +121,7 @@ class EngineApi:
         self.api.add_resource(TracksByDayResource,          config.api_prefix + "/trackservice/date/<string:date_string>")
         self.api.add_resource(ReportResource,               config.api_prefix + "/report/<string:year_month>")
         self.api.add_resource(UpcomingSchedulesResource,    config.api_prefix + "/schedule/upcoming")
+        self.api.add_resource(ClockDataResource,            config.api_prefix + "/clock")
 
         self.logger.info("Engine API routes successfully set!")
 
@@ -181,10 +183,6 @@ class TrackServiceSchema(ma.Schema):
             "schedule.musicfocus",
             "schedule.is_repetition",
 
-            "schedule.show_id",
-            "schedule.show_name",
-            "schedule.show_hosts",
-
             "track",
             "track_start",
 
@@ -192,6 +190,17 @@ class TrackServiceSchema(ma.Schema):
             )
 
 
+class ClockDataSchema(ma.Schema):
+    class Meta:
+        fields = (
+            "current",
+            "next",
+            "track_id",
+            "track_start",
+            "track"
+            )
+
+
 class ScheduleSchema(ma.Schema):
     class Meta:
         fields = (
@@ -267,7 +276,39 @@ class TrackResource(Resource):
     def get(self, track_id):
         track = TrackService.select_one(track_id)
         return EngineApi.track_schema.dump(track)
+
+
+class ClockDataResource(Resource):
+    logger = None
     
+    def __init__(self):
+        self.logger = logging.getLogger("engine-api")
+
+    def get(self):
+        item = TrackService.select_current()
+        next_schedule = Schedule.select_upcoming(1)
+        if next_schedule:
+            next_schedule = next_schedule[0].as_dict()
+            next_schedule["playlist"] = None
+        else:
+            next_schedule = {}
+
+        clockdata = {
+            "track_id": item.id,
+            "track_start": item.track_start,
+            "track": item.track,
+            "current": {},
+            "next": next_schedule
+        }
+
+        if item.schedule:
+            clockdata["current"] = item.schedule.as_dict()
+            if item.schedule.playlist:
+                clockdata["current"]["playlist"] = item.schedule.playlist[0].as_dict()
+
+        clockdata["current"]["show"] = item.show
+        return EngineApi.clockdata_schema.dump(clockdata)
+
 
 class CurrentTrackResource(Resource):
     logger = None
-- 
GitLab