From 38394f40a6787c7dc2fd0140ba665554daee0e33 Mon Sep 17 00:00:00 2001 From: devilreef Date: Thu, 30 Apr 2026 10:55:24 +0600 Subject: [PATCH] fix: compute duration via request.duration when decoder metadata is empty --- config/liquidsoap.liq | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) 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