Add desktop ready checks, smarter chat scrolling, and fight-night reactions

This commit is contained in:
Peter Stockings
2026-10-05 15:46:55 +11:00
parent 19576de166
commit f3eeda71e6
13 changed files with 1228 additions and 10 deletions
+56
View File
@@ -0,0 +1,56 @@
# VideoSync desktop client
## Chat
Chat follows new messages while you are near the bottom. Scroll up to read older
messages without losing your place. Incoming messages appear beneath a **New
messages** divider, and **Jump to latest** shows how many have arrived. Clicking
it, or scrolling back to the bottom, resumes following messages.
## Ready checks
Send `/ready` in chat to start a check for everyone in the room. Playback pauses
and a ready panel appears above chat. Each person clicks **I'm ready**; they can
change their answer with **Not ready**. When everyone is connected and ready,
the person who started the check can click **Start together**. They can also
cancel the check. Repeating `/ready` leaves an existing check and its votes intact.
New participants must confirm readiness. Disconnecting clears that person's
vote; reconnecting restores the panel so they can confirm again. Ordinary play
controls dismiss an active check and continue playback.
Ready checks require the updated server and desktop clients. The web client
does not yet have ready-check controls.
## Fight-night commands
- `/ko` — K.O.: That's a wrap.
- `/bell` — DING!: Back to your corners.
- `/tap` — TAP!: Someone's had enough.
- `/robbery` — a reaction plus a 30-second room vote on the decision.
Reactions slide into the bottom of the video for 2.2 seconds and keep playback
running. A shared 3-second cooldown limits room-wide effects. Reaction events
stay in chat history; joining or reconnecting does not replay animations.
Quiet sound effects play automatically with visible reactions. Sounds are
original synthesized effects cached locally, with no external downloads. Overlays and sound are
suppressed while the player is hidden, minimized, or another application is active.
Reactions also work while the detached chat window is focused.
Robbery votes allow one answer per person, which you can change before the vote
closes. The result remains visible after closing and can be dismissed. Joining
or reconnecting restores the current vote. Fight commands require the updated
server and desktop clients; web clients currently see the chat reaction only.
## Tests
With `pytest`, `pytest-qt`, and Bun installed, run from this directory:
```powershell
$env:QT_QPA_PLATFORM = 'offscreen'
.\.venv\Scripts\python.exe -m pytest test_chat.py test_sync_client.py test_ready_server.py test_fight_reactions.py test_fight_server.py -q
```
The ready-check integration test starts an isolated local server; it does not
contact the production service. VLC playback is mocked in the chat UI tests.