79 lines
3.8 KiB
Markdown
79 lines
3.8 KiB
Markdown
# VideoSync desktop client
|
|
|
|
## Saved preferences
|
|
|
|
The client remembers your display name, volume, window geometry, chat sidebar
|
|
visibility and width, highlight panel visibility, and last selected media folder.
|
|
Preferences are stored locally using Qt's platform settings store. File dialogs
|
|
for both creating and joining rooms start in the remembered folder. The server
|
|
address remains fixed. Detached chat opens docked on the next launch.
|
|
|
|
## Active sessions
|
|
|
|
The lobby checks for listed rooms at startup and every 15 seconds while open.
|
|
Select a session and click **Choose file & join**, or double-click it, to use the
|
|
existing file verification flow. Enter your display name first. **Refresh** checks
|
|
immediately; joining by code remains available when discovery fails.
|
|
|
|
New rooms are listed by default. Clear **List room in active sessions** before
|
|
creating a room to keep it out of the list; anyone with its code can still join.
|
|
Only rooms with connected participants appear. Discovery requires the updated
|
|
server's `/api/rooms` endpoint; older clients also create listed rooms by default.
|
|
|
|
## 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` — a large arcade-style K.O. with gold lettering, red outline, and an impact animation.
|
|
- `/bell` — DING!: Back to your corners.
|
|
- `/tap` — TAP!: Someone's had enough.
|
|
- `/robbery` — a reaction plus a 30-second room vote on the decision.
|
|
|
|
The K.O. appears across the center of the video; other reactions slide into the
|
|
bottom. Effects clear after 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 or minimized. Visible players receive
|
|
reactions even without keyboard focus, without activating the player window.
|
|
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.
|