From 719ae32298b037dfd263347eecf13f82f372244d Mon Sep 17 00:00:00 2001
From: David Trattnig <david@subsquare.at>
Date: Tue, 12 Jul 2022 12:36:43 +0200
Subject: [PATCH] Feat: Additional meta fields for fallback data

---
 src/engine.liq    | 13 +++++++------
 src/functions.liq | 16 ++++++++++++++++
 2 files changed, 23 insertions(+), 6 deletions(-)

diff --git a/src/engine.liq b/src/engine.liq
index 43c3e94..c8ce6d2 100644
--- a/src/engine.liq
+++ b/src/engine.liq
@@ -44,12 +44,12 @@ def on_metadata_notification(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_duration = int_of_float(request.duration(meta["filename"]))
-    track_type = (eval_track_type(meta["track_type"], meta["source"]))
-    track_start = meta["on_air"]
-    track_artist = meta["artist"]
-    track_album = meta["album"]
-    track_title = meta["title"]
+    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)
 
     source_type = eval_source_type(meta["source"])
     if source_type == "fallback" then
@@ -121,6 +121,7 @@ stripped_stream = blank.strip(
     )
 
 output_source = attach_fallback_source(stripped_stream)
+output_source.on_metadata(on_metadata_notification)
 
 
 #####################################
diff --git a/src/functions.liq b/src/functions.liq
index 6696da8..15d8e6d 100644
--- a/src/functions.liq
+++ b/src/functions.liq
@@ -18,6 +18,22 @@
 
 
 
+# Reads the track duration
+#   a.) when available from the file
+#   b.) as a fallback from the meta field "track_duration"
+#
+# Returns
+#   (int) duration in seconds
+def get_meta_track_duration(meta) =
+    track_duration = int_of_float(request.duration(meta["filename"]))
+    if track_duration != -1 then
+        track_duration
+    else
+        int_of_string(meta["track_duration"])
+    end
+end
+
+
 # Posts a playlog to the Engine API
 def post_playlog(api_url, data) =
     json_data = json()
-- 
GitLab