No description
  • Rust 74%
  • Vue 14.6%
  • Shell 5.6%
  • TypeScript 4.7%
  • Dockerfile 0.5%
  • Other 0.6%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
CherryGaySoda c0c4536034
All checks were successful
/ deploy (push) Successful in 7m1s
Don't repeat a pending pick Liquidsoap already queued and played
ce2b234 fixed the concurrent-call race, but a second, distinct bug
produces the same "plays twice" symptom: Liquidsoap's request.dynamic.list
refills its queue by calling /internal/:slug/next on a schedule
independent of when its separate on_metadata hook gets around to
confirming the previous pick via /playing. Those two calls are
sequential, not concurrent, so the row lock doesn't help -- if the queue
refill asks again long before the confirm arrives, next_track faithfully
replayed the same pending pick, and Liquidsoap's request.create(uri)
built a genuine second, full-length playback for it.

Added stations.rotation_pending_set_at (new migration) to timestamp when
a pending pull was first served. Past a 15s grace window (comfortably
above Liquidsoap's retry_delay=3.0), a re-ask for the same pending pick
now self-confirms it into play_history and draws a fresh one instead of
repeating it. Extracted confirm_in_conn as the shared, idempotent core of
"record a play, close the previous one, clear the pending marker" --
idempotent specifically so the real, now-redundant /playing POST for a
self-confirmed pick is a no-op rather than double-recording the play or
clobbering a newer pending pick drawn in the meantime.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-15 21:47:52 +11:00
.forgejo/workflows Enable the idle gate on the CI deploy 2026-10-15 18:49:42 +11:00
deploy-rs Redesign the listener-facing UI: design system, Now Playing deck overhaul 2026-10-15 19:35:30 +11:00
scripts/git-hooks Initial import of Tidal Radio RS extraction 2026-10-06 17:40:10 +11:00
server-rs Don't repeat a pending pick Liquidsoap already queued and played 2026-10-15 21:47:52 +11:00
web-ui-vue Redesign the listener-facing UI: design system, Now Playing deck overhaul 2026-10-15 19:35:30 +11:00
.gitignore Initial import of Tidal Radio RS extraction 2026-10-06 17:40:10 +11:00
DEVELOPMENT.md Redesign the listener-facing UI: design system, Now Playing deck overhaul 2026-10-15 19:35:30 +11:00
howdownloader.md Initial import of Tidal Radio RS extraction 2026-10-06 17:40:10 +11:00
Makefile Initial import of Tidal Radio RS extraction 2026-10-06 17:40:10 +11:00
PLAN.md Initial import of Tidal Radio RS extraction 2026-10-06 17:40:10 +11:00
UI_DESIGN.md Redesign the listener-facing UI: design system, Now Playing deck overhaul 2026-10-15 19:35:30 +11:00