Add desktop ready checks, smarter chat scrolling, and fight-night reactions
This commit is contained in:
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user