fix: compute duration via request.duration when decoder metadata is empty

This commit is contained in:
devilreef 2026-04-30 10:55:24 +06:00
parent 8d00c10b9f
commit 38394f40a6
Signed by: devilreef
SSH key fingerprint: SHA256:UZisRr4iuXx+IhkbZnR655L2RWAT6o2rgbGv5F/6m3Y

View file

@ -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