Skip to content

0.2.9: fix red playlist rows, track editor and clocks on a server; screen scaling options - #15

Merged
epell-development merged 3 commits into
mainfrom
claude/project-thread-q38aq6
Oct 26, 2026
Merged

epell-development merged 3 commits into
mainfrom
claude/project-thread-q38aq6

Conversation

@epell-development

Copy link
Copy Markdown
Owner

Requested by epell · project thread

Fixes the App "Bugs" section of the 0.2.9 list (the cart wall picking local files is handled in the server-integration PR).

What changed

  • All playlist rows red when connected to a server. The app was checking the server's file paths on its own disk. Now the server sends its list of missing playlist files with the state poll (missing/missing_rev in Snapshot, checked every ~2 s in Revs::refresh), and a mirror colours rows from that (Playout::row_missing). Locally nothing changes.
  • Track editor stuck on "analysing…" when connected. New POST /api/v1/wave {path}: the server analyses the file (on its own thread, up to 3 at once, 202 while busy) and returns the waveform (u16 levels) plus the cues it uses. Only files in the server's library or playlists are allowed. link.rs has a fetcher thread and the mirror's request_analysis goes there. Cues set by hand in the app are kept in the mirror as well as sent to the server, so the editor shows them straight away. If a file can't be analysed (locally or on the server), the editor now says why instead of spinning forever.
  • Clocks out of sync when connected. Live carries the server's clock (now_ms). The app estimates the offset from the quickest recent poll, and every clock (status bar, player, studio clock, hour-marker countdown, start times, scheduler) uses Playout::now(), which is the station's time. The on-air position is counted on between polls and only jumps on a seek or a track change, so elapsed/remaining tick in step with the clock.
  • UI size changing between monitors. Settings → Appearance has a new choice: Follow each screen's display scaling (as before, the default), Same size in pixels on every screen, or Fit each screen like 1920×1080 (the layout looks the way it does on a 1080p screen at 100%, also on 1440p, 4K or a 125% laptop). Ctrl +/- zoom still works. Windows are never moved or resized.

Testing

  • cargo build has no new warnings (the delay warning in the server test was already there), cargo test passes on both binaries, tools/check_glyphs.py passes, and lang/template.json has been regenerated.
  • New tests: server::tests::app_sees_the_servers_files_and_clock (missing rows, waveform from the server, errors for unreadable or off-list files, clock offset), plus sync tests for waveform round trips, position interpolation and hand-set cues on a mirror.
  • Not tested on real hardware: monitor switching with different DPI, and an app and server on separate machines.

Known limits

  • In the track editor, Play and Preview mix still play files from this computer, so they fail when the file only exists on the server.

CHANGELOG lines (for the release)

Fixed

  • Connected to a server: playlist rows are red only when the file is missing on the server.
  • Connected to a server: the track editor shows the waveform and cues (worked out on the server).
  • The track editor says why a file can't be analysed instead of showing "analysing…" for ever.
  • Connected to a server: every clock shows the server's time, and elapsed/remaining tick together with it.

New

  • Appearance: choose how the interface size applies on other screens (follow display scaling, same size in pixels, or fit each screen like 1920×1080).

Generated by Claude Code

…ks; screen scaling

- Playlist rows are red only when the file is missing on the server (the
  server sends its list of missing playlist files with the state poll).
- The track editor gets waveforms and cues from the server (POST
  /api/v1/wave), and shows why when a file can't be analysed instead of
  spinning on "analysing…" for ever (locally too).
- The mirror follows the server's clock and counts the on-air position on
  between polls, so the clock, elapsed/remaining and start times tick
  together.
- Appearance: choose how the interface size applies on other screens
  (follow display scaling, same pixels everywhere, or fit each screen
  like 1920x1080).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wktb5zD7vpunQtvFHx6adf
@epell-development epell-development self-assigned this Oct 25, 2026

@mergeguards mergeguards Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

MergeGuard review
Risk: 🟠 35/100 — moderate
Findings: 🟠 1 medium
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 fix on any inline finding.


Reviewed by MergeGuard AI

Comment thread src/link.rs
@mergeguards

mergeguards Bot commented Oct 25, 2026 •

Copy link
Copy Markdown

MergeGuard agent actions

Fix all findings

All issues (1)
  • medium · src/link.rs:275 — Wave source is set on the mirror playout, but the sender is created before the mirror is fully initialized. If set_wave_source is called during construction, the mirror's remote_waves field may…

Apply auto-fixes for the findings above on this branch:

  • Fix All MergeGuard Findings

Or reply with @mergeguards fix-all on this pull request.

…ir own folder

The data folder is set once per test process. The new test could become it and then
delete it while the HTTPS test was still using it (macOS CI).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wktb5zD7vpunQtvFHx6adf

@mergeguards mergeguards Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ MergeGuard — new commits are on this pull request.

Re-scan the latest diff: paste this line by itself (copy/paste is fine) — either on the Conversation tab (Add a comment) or on Files changed as a comment on the diff:

@mergeguard-followup

@mergeguards mergeguards Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

MergeGuard review
Risk: 🟠 35/100 — moderate
Findings: 🟠 1 medium
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 fix on any inline finding.


Reviewed by MergeGuard AI

Comment thread src/link.rs
…pendent

- clippy 1.99: is_multiple_of in Revs::refresh
- Server tests: each station starts with exactly its own rows. Playout::new
  loads the playlists saved in the data folder, which the tests running at
  the same time share, so a station could start with another test's rows
  and the "first copy" / "playlist over HTTPS" waits never matched (seen on
  macOS CI, and on main with two cores).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wktb5zD7vpunQtvFHx6adf

@mergeguards mergeguards Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ MergeGuard — new commits are on this pull request.

Re-scan the latest diff: paste this line by itself (copy/paste is fine) — either on the Conversation tab (Add a comment) or on Files changed as a comment on the diff:

@mergeguard-followup

@mergeguards mergeguards Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

MergeGuard review
Risk: 🟠 35/100 — moderate
Findings: 🟠 1 medium
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 fix on any inline finding.


Reviewed by MergeGuard AI

Comment thread src/link.rs
@epell-development
epell-development merged commit 63a1cd6 into main Oct 26, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants