From 13588aafbd8b0cae6542d8b8e4e06aa05bba5d55 Mon Sep 17 00:00:00 2001 From: David Trattnig <david.trattnig@o94.at> Date: Wed, 2 Sep 2020 11:48:31 +0200 Subject: [PATCH] No caching of current playlist. engine-clock#1 --- modules/plugins/trackservice.py | 120 +++++++++++++++----------------- modules/scheduling/scheduler.py | 11 +++ 2 files changed, 69 insertions(+), 62 deletions(-) diff --git a/modules/plugins/trackservice.py b/modules/plugins/trackservice.py index 3da5fee2..5cefc667 100644 --- a/modules/plugins/trackservice.py +++ b/modules/plugins/trackservice.py @@ -23,6 +23,7 @@ import requests from modules.base.utils import SimpleUtil as SU +from modules.base.models import Playlist class TrackServiceHandler(): @@ -32,7 +33,6 @@ class TrackServiceHandler(): logger = None config = None soundsystem = None - last_playlist = None def __init__(self, config, soundsystem): @@ -85,64 +85,60 @@ class TrackServiceHandler(): """ Posts the current and next show information to the Engine API. """ - current_playlist = entry.playlist - if current_playlist == self.last_playlist: - self.logger.info("Playlist didn't change since last update.") - else: - self.last_playlist = current_playlist - current_schedule = current_playlist.schedule - next_schedule = self.soundsystem.scheduler.get_next_schedules(1) - if next_schedule: next_schedule = next_schedule[0] - - data = dict() - data["engine_source"] = self.config.get("api_engine_number") - - if current_playlist: - data["current_playlist"] = dict() - data["current_playlist"]["playlist_id"] = current_playlist.playlist_id - data["current_playlist"]["entries"] = [] - for e in current_playlist.entries: - entry = dict() - entry["track_start"] = e.entry_start - entry["track_artist"] = e.meta_data.artist - entry["track_album"] = e.meta_data.album - entry["track_title"] = e.meta_data.title - entry["track_num"] = e.entry_num - entry["track_duration"] = e.duration - entry["track_type"] = e.get_type().numeric - entry = SU.clean_dictionary(entry) - data["current_playlist"]["entries"].append(entry) - - if current_schedule: - cs = dict() - cs["schedule_id"] = current_schedule.schedule_id - cs["schedule_start"] = current_schedule.schedule_start - cs["schedule_end"] = current_schedule.schedule_end - cs["show_id"] = current_schedule.show_id - cs["show_name"] = current_schedule.show_name - cs["playlist_id"] = current_schedule.playlist_id - cs["fallback_type"] = current_schedule.fallback_state.id - cs = SU.clean_dictionary(cs) - data["current_schedule"] = cs - - if next_schedule: - ns = dict() - ns["schedule_id"] = next_schedule.schedule_id - ns["schedule_start"] = next_schedule.schedule_start - ns["schedule_end"] = next_schedule.schedule_end - ns["show_id"] = next_schedule.show_id - ns["show_name"] = next_schedule.show_name - ns["playlist_id"] = next_schedule.playlist_id - ns["fallback_type"] = next_schedule.fallback_state.id - ns = SU.clean_dictionary(ns) - data["next_schedule"] = ns - - - data = SU.clean_dictionary(data) - - self.logger.info("Posting clock info update to Engine API...") - url = self.config.get("api_engine_store_clock") - headers = {'content-type': 'application/json'} - body = json.dumps(data, indent=4, sort_keys=True, default=str) - response = requests.put(url, data=body, headers=headers) - self.logger.info("Engine API response: %s" % response.status_code) \ No newline at end of file + current_playlist = self.soundsystem.scheduler.get_active_playlist() + current_schedule = current_playlist.schedule + next_schedule = self.soundsystem.scheduler.get_next_schedules(1) + if next_schedule: next_schedule = next_schedule[0] + + data = dict() + data["engine_source"] = self.config.get("api_engine_number") + + if current_playlist: + data["current_playlist"] = dict() + data["current_playlist"]["playlist_id"] = current_playlist.playlist_id + data["current_playlist"]["entries"] = [] + for e in current_playlist.entries: + entry = dict() + entry["track_start"] = e.entry_start + entry["track_artist"] = e.meta_data.artist + entry["track_album"] = e.meta_data.album + entry["track_title"] = e.meta_data.title + entry["track_num"] = e.entry_num + entry["track_duration"] = e.duration + entry["track_type"] = e.get_type().numeric + entry = SU.clean_dictionary(entry) + data["current_playlist"]["entries"].append(entry) + + if current_schedule: + cs = dict() + cs["schedule_id"] = current_schedule.schedule_id + cs["schedule_start"] = current_schedule.schedule_start + cs["schedule_end"] = current_schedule.schedule_end + cs["show_id"] = current_schedule.show_id + cs["show_name"] = current_schedule.show_name + cs["playlist_id"] = current_schedule.playlist_id + cs["fallback_type"] = current_schedule.fallback_state.id + cs = SU.clean_dictionary(cs) + data["current_schedule"] = cs + + if next_schedule: + ns = dict() + ns["schedule_id"] = next_schedule.schedule_id + ns["schedule_start"] = next_schedule.schedule_start + ns["schedule_end"] = next_schedule.schedule_end + ns["show_id"] = next_schedule.show_id + ns["show_name"] = next_schedule.show_name + ns["playlist_id"] = next_schedule.playlist_id + ns["fallback_type"] = next_schedule.fallback_state.id + ns = SU.clean_dictionary(ns) + data["next_schedule"] = ns + + + data = SU.clean_dictionary(data) + + self.logger.info("Posting clock info update to Engine API...") + url = self.config.get("api_engine_store_clock") + headers = {'content-type': 'application/json'} + body = json.dumps(data, indent=4, sort_keys=True, default=str) + response = requests.put(url, data=body, headers=headers) + self.logger.info("Engine API response: %s" % response.status_code) \ No newline at end of file diff --git a/modules/scheduling/scheduler.py b/modules/scheduling/scheduler.py index 1689dcef..05f4c543 100644 --- a/modules/scheduling/scheduler.py +++ b/modules/scheduling/scheduler.py @@ -343,6 +343,17 @@ class AuraScheduler(threading.Thread): return next_schedules + def get_active_playlist(self): + """ + Retrieves the currently playing playlist. + + Returns: + (Playlist): The resolved playlist + """ + schedule = self.get_active_schedule() + playlist = self.fallback_manager.resolve_playlist(schedule) + return playlist + # FIXME Review relevance. def get_act_programme_as_string(self): -- GitLab