diff --git a/config/liquidsoap.liq b/config/liquidsoap.liq index fab96fa..52e7d88 100644 --- a/config/liquidsoap.liq +++ b/config/liquidsoap.liq @@ -9,13 +9,24 @@ source_pw = environment.get(default="", "SOURCE_PW") def emit_now_playing(station, m) = filename = m["filename"] if filename != "" then + # decoder-reported metadata may be empty; fall back to request.duration which + # reads it directly from the file. -1.0 means unknown. + meta_dur = m["duration"] + dur_str = + if meta_dur != "" then + meta_dur + else + # request.duration returns float? in liquidsoap 2.3 — unwrap with default -1. + d = null.get(default=-1., request.duration(filename)) + if d > 0. then string(int_of_float(d)) else "" end + end payload = json() payload.add("station", station) payload.add("artist", m["artist"]) payload.add("title", m["title"]) payload.add("album", m["album"]) payload.add("filename", filename) - payload.add("duration", m["duration"]) + payload.add("duration", dur_str) payload.add("started_at", string(int_of_float(time()))) file.write(data=payload.stringify(), atomic=true, temp_dir="/now-playing", "/now-playing/#{station}.json") end