stream: show the source provider of the current track

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
nemunaire 2026-07-04 11:04:45 +08:00
commit bfa7cc1046
3 changed files with 40 additions and 5 deletions

View file

@ -71,6 +71,11 @@ backup = playlist(
mode="randomize", reload_mode="watch", mime_type="audio/x-mpegurl",
check_next=audio_only, fallback_file
)
# Les morceaux du secours sont rejoués depuis le cache local (déjà diffusés) et
# n'ont pas d'annotation d'origine. On les étiquette explicitement pour que le
# player affiche « via le cache local » plutôt que rien quand on retombe sur ce
# filet (ingest injoignable, file vide pendant le préchargement…).
backup = metadata.map(fun(_) -> [("origin", "cache")], backup)
# File de rejeu ponctuel : normalement vide (donc non prête, transparente). Le
# endpoint /restart-track y pousse le morceau courant pour le rejouer depuis le
@ -198,8 +203,8 @@ radio.on_metadata(
now_playing := m
# `file` : nom de base du fichier à l'antenne, servant de jeton de
# téléchargement (/download?file=…). Vide si la métadonnée manque.
entry = {title=m["title"], artist=m["artist"], url=m["url"], file=path.basename(m["filename"])}
head = list.hd(default={title="", artist="", url="", file=""}, history())
entry = {title=m["title"], artist=m["artist"], url=m["url"], origin=m["origin"], file=path.basename(m["filename"])}
head = list.hd(default={title="", artist="", url="", origin="", file=""}, history())
is_dup = head.title == entry.title and head.artist == entry.artist
if not is_dup and (entry.title != "" or entry.artist != "") then
history := list.prefix(history_max, list.add(entry, history()))
@ -239,7 +244,7 @@ harbor.http.register(
port=8000, method="GET", "/nowplaying",
fun(_, resp) -> begin
m = now_playing()
resp.json({title=m["title"], artist=m["artist"], url=m["url"]})
resp.json({title=m["title"], artist=m["artist"], url=m["url"], origin=m["origin"]})
end
)