stream: let listeners remove a track from the queue
Some checks failed
continuous-integration/drone/push Build is failing

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
nemunaire 2026-07-04 15:18:58 +08:00
commit 976f009297
5 changed files with 125 additions and 2 deletions

View file

@ -316,6 +316,29 @@ harbor.http.register(
end
)
# Retirer un morceau de la file d'attente. Symétrique de /enqueue : le player
# n'a pas accès au réseau interne, on relaie donc la demande (l'`id` opaque
# fourni par /queue) vers l'ingest, qui retire l'entrée correspondante. On
# renvoie tel quel son code et son corps JSON ({removed: true} ou une erreur).
ingest_dequeue_url = "http://ingest:8080/dequeue"
harbor.http.register(
port=8000, method="POST", "/dequeue",
fun(req, resp) -> begin
id = list.assoc(default="", "id", req.query)
if id == "" then
resp.status_code(400)
resp.data("missing id")
else
body = http.post(
data="", timeout=10.0, "#{ingest_dequeue_url}?id=#{url.encode(id)}"
)
resp.status_code(body.status_code)
resp.content_type("application/json; charset=utf-8")
resp.data(string.trim(body) ^ "\n")
end
end
)
# Passer au morceau suivant : on saute le morceau en cours sur la source
# diffusée. request.dynamic a déjà préchargé le suivant, donc l'enchaînement
# est immédiat (le prochain /next est demandé au daemon dans la foulée).