Repository navigation
Playlist generator: timed inserts, times of day, preview; scheduler: repeating events that insert playlist items - #18
Conversation
…repeating events that insert playlist items Generator - Inserts work like advert / jingle rules: after every N songs, every N minutes (optionally on the clock) or at set times, each limited to hours - Inserts can be a time announcement as well as a category or a rule's files - Times of day: a different pattern for some hours and days (e.g. weekday mornings) - Length can be "until hh:mm" as well as a number of minutes - Song separation (minutes before the same song comes back) - Categories take several genres, a year range and words to leave out - Preview the running order with start times, then put it in, try again or close - Rows are laid out along the clock from where they will start, so the auto-playlist and append follow the real air time - Generator UI moved to genui.rs Scheduler - New action: insert a playlist item (time announcement, text to speech, Track List, container, stream, line input, teaser, pause, command) after the track on air or now, edited with the same dialogs as the Playlist menu - Events can repeat every N minutes / hours until a time (over midnight too) - "Hourly time announcement" shortcut and Duplicate Saved templates and events load as before (new fields default to the old behaviour). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SALpsdH5pZy8hiDxXkvWD3
There was a problem hiding this comment.
MergeGuard review
Risk: 🟠 35/100 — moderate
Findings: 🟠 1 medium
Recommended fixes
src/playout.rs— Strengthen waiting-item comparison to avoid suppressing distinct inserts that happen to share a title. Match on the row kind and compare a stable identity (e.g., file path for Track, URL for Url, kind-only for TimeAnnounce). (confidence 68%)
Open Files changed for 1 inline review thread on the diff.
💡 Use the Fix All MergeGuard Findings checkbox comment on this PR to apply auto-fixes in batch, or reply
@mergeguards fixon any inline finding.
⚠️ This PR may benefit from a deep scan — consider triggering@mergeguards deep-scan.
Reviewed by MergeGuard AI
MergeGuard agent actionsFix all findingsAll issues (2)
Apply auto-fixes for the findings above on this branch:
Or reply with |
…cks) into the generator branch Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SALpsdH5pZy8hiDxXkvWD3
There was a problem hiding this comment.
MergeGuard review
Risk: 🟠 55/100 — moderate
Findings: 🔴 2 high
Recommended fixes
src/config.rs— Ensure Category deserializes old configs by defaulting new fields. (confidence 90%)src/scheduler.rs— Preserve backward compatibility for Event by defaulting newly added fields during deserialization. (confidence 95%)
Open Files changed for 2 inline review threads on the diff.
💡 Use the Fix All MergeGuard Findings checkbox comment on this PR to apply auto-fixes in batch, or reply
@mergeguards fixon any inline finding.
Reviewed by MergeGuard AI
…nd repeating scheduler events Also fixes the event scheduler guide, which said the encoder action counts from #0; the editor shows encoders from 1, like the ENCODER START command. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SALpsdH5pZy8hiDxXkvWD3
There was a problem hiding this comment.
MergeGuard review
Risk: 🟠 35/100 — moderate
Findings: 🟠 1 medium
Recommended fixes
src/pltools.rs— Restore strict permission gating for the item dialog so that users without playlist edit rights cannot edit scheduler event items. Ideally, replace with a dedicated scheduler permission if available. (confidence 62%)
Security review — 🟠 1 medium (1 finding)
Dependency, filesystem & container image checks (OSV + Trivy + container scan) for this pull request.
All items below are also on Files changed as inline threads.
See Files changed for security threads on this diff.
💡 Use the Fix All MergeGuard Findings checkbox comment on this PR to apply auto-fixes in batch, or reply
@mergeguards fixon any inline finding.
Reviewed by MergeGuard AI
…ssion Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SALpsdH5pZy8hiDxXkvWD3
There was a problem hiding this comment.
MergeGuard review
Risk: 🟠 35/100 — moderate
Findings: 🟠 2 medium
Recommended fixes
src/playout.rs— Make duplicate-prevention for inserted playlist items more specific to avoid false positives by also checking artist (or use a more robust equality where possible). (confidence 66%)src/playout.rs— Allow generator outputs that contain only inserts (e.g., time announcements) to be accepted, while keeping a helpful log when there are no music/file tracks. (confidence 64%)
Open Files changed for 2 inline review threads on the diff.
💡 Use the Fix All MergeGuard Findings checkbox comment on this PR to apply auto-fixes in batch, or reply
@mergeguards fixon any inline finding.
Reviewed by MergeGuard AI
The scheduler window and the generator's start time use the station clock (core.now()), like the rest of the app now does when connected to a server. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SALpsdH5pZy8hiDxXkvWD3
Keeps this branch's server update check (selfupdate, ServerCfg.check_updates) as the one source of ServerInfo.latest and drops #19's second update thread; the release page now comes from the same release. AzuraCast calls from the portal need the AzuraCast permission. Playlist Insert/RemoveRows commands need edit_playlists. The generator's category folder picker (moved to genui.rs) goes through App::pick. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01V5uW8ddhUDidYMFx9SLghq
Requested by epell · project thread
For v0.2.9: "Please improve the auto playlist generator massively, add custom times and stuff (similar to advert/jingle generator)" and "Let me insert stuff from the Playlist dropdown on event scheduler and improve event scheduler, e.g. every 1 hour i can put a time announcement".
Playlist generator
Rock, Pop), a year range, and words to leave out (live, remix).app.rsintogenui.rs, laid out in numbered sections like the Advertisement scheduler.Event scheduler
Website
ENCODER START 1, and the guide now says so.Compatibility
Saved templates, inserts and events load as before. New fields default to the old behaviour, and old inserts stay "every N minutes". The server runs the same code, so remote setups work once both sides are on this version.
Testing
cargo clippy --all-targets -D warningson Rust 1.99,cargo fmt --check,cargo test(77 app and 63 server tests), the server smoke test,check_glyphs,check_site,check_versionsand the generated-files check all pass. CI is green.Release notes (for the v0.2.9 CHANGELOG)
New
🤖 Generated with Claude Code
https://claude.ai/code/session_01SALpsdH5pZy8hiDxXkvWD3