diff --git a/src/engine.liq b/src/engine.liq index 705b0bd08913dce37eff1aa83e1a9d95871757a1..6627542a4fec2ee391fc6a7a0d24ca5d0ef1dc7d 100644 --- a/src/engine.liq +++ b/src/engine.liq @@ -36,68 +36,8 @@ engine_state = { # Include dependency-free functions %include "functions.liq" -##################################### -# EVENTS # -##################################### - -# Updates the playout state -def on_playout_state_change(source_type) = - if source_type == "fallback" then - engine_state.is_fallback := true - else - engine_state.is_fallback := false - end -end - -# Called when some new metadata info is available -def on_metadata_notification(meta) = - # FIXME For some reason stream channels do not pass the `source` property in meta - channel_name = meta["source"] - source_type = eval_source_type(channel_name) - on_playout_state_change(source_type) - - log(level=3, label="metadata", "Raw metadata before POST:\n\n #{meta}\n\n") - - show_name = ref(list.assoc(default="", "show_name", meta)) - show_id = ref(list.assoc(default="", "show_id", meta)) - timeslot_id = list.assoc(default="-1", "timeslot_id", meta) - playlist_id = list.assoc(default="-1", "playlist_id", meta) - playlist_track_num = list.assoc(default="", "playlist_item", meta) - track_start = list.assoc(default=meta["track_start"], "on_air", meta) - track_duration = get_meta_track_duration(meta) - track_type = eval_track_type(meta["track_type"], meta["source"]) - track_artist = list.assoc(default=meta["track_artist"], "artist", meta) - track_album = list.assoc(default=meta["track_album"], "album", meta) - track_title = list.assoc(default=meta["track_title"], "title", meta) - - if source_type == "fallback" then - log(level=3, label="metadata", "Detected FALLBACK channel `#{channel_name}` playing \ - (Show ID: #{!fallback_show_id})") - show_name := !fallback_show_name - show_id := !fallback_show_id - end - - playlog = [ - ("log_source", engine_id), - ("show_name", !show_name), - ("show_id", !show_id), - ("timeslot_id", timeslot_id), - ("playlist_id", playlist_id), - ("track_type", track_type), - ("track_start", track_start), - ("track_duration", "#{track_duration}"), - ("track_title", track_title), - ("track_album", track_album), - ("track_artist", track_artist), - ("track_num", playlist_track_num) - ] - if playlog["show_id"] == "" then - log(level=3, label="metadata", "Skip posting playlog because of missing show ID!") - else - post_playlog(engine_api_playlog, playlog) - end -end - +# Handle events +%include "events.liq" ##################################### # INPUTS # diff --git a/src/events.liq b/src/events.liq new file mode 100644 index 0000000000000000000000000000000000000000..d32956915e4ea2e0cea4bdfe92db21f43c8d4ecd --- /dev/null +++ b/src/events.liq @@ -0,0 +1,77 @@ +# +# Aura Engine (https://gitlab.servus.at/aura/engine) +# +# Copyright (C) 2017-now() - The Aura Engine Team. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + + + +# Updates the playout state +def on_playout_state_change(source_type) = + if source_type == "fallback" then + engine_state.is_fallback := true + else + engine_state.is_fallback := false + end +end + +# Called when some new metadata info is available +def on_metadata_notification(meta) = + # FIXME For some reason stream channels do not pass the `source` property in meta + channel_name = meta["source"] + source_type = eval_source_type(channel_name) + on_playout_state_change(source_type) + + log(level=3, label="metadata", "Raw metadata before POST:\n\n #{meta}\n\n") + + show_name = ref(list.assoc(default="", "show_name", meta)) + show_id = ref(list.assoc(default="", "show_id", meta)) + timeslot_id = list.assoc(default="-1", "timeslot_id", meta) + playlist_id = list.assoc(default="-1", "playlist_id", meta) + playlist_track_num = list.assoc(default="", "playlist_item", meta) + track_start = list.assoc(default=meta["track_start"], "on_air", meta) + track_duration = get_meta_track_duration(meta) + track_type = eval_track_type(meta["track_type"], meta["source"]) + track_artist = list.assoc(default=meta["track_artist"], "artist", meta) + track_album = list.assoc(default=meta["track_album"], "album", meta) + track_title = list.assoc(default=meta["track_title"], "title", meta) + + if source_type == "fallback" then + log(level=3, label="metadata", "Detected FALLBACK channel `#{channel_name}` playing \ + (Show ID: #{!fallback_show_id})") + show_name := !fallback_show_name + show_id := !fallback_show_id + end + + playlog = [ + ("log_source", engine_id), + ("show_name", !show_name), + ("show_id", !show_id), + ("timeslot_id", timeslot_id), + ("playlist_id", playlist_id), + ("track_type", track_type), + ("track_start", track_start), + ("track_duration", "#{track_duration}"), + ("track_title", track_title), + ("track_album", track_album), + ("track_artist", track_artist), + ("track_num", playlist_track_num) + ] + if playlog["show_id"] == "" then + log(level=3, label="metadata", "Skip posting playlog because of missing show ID!") + else + post_playlog(engine_api_playlog, playlog) + end +end \ No newline at end of file