Files
video-sync/desktop-client/README.md
T

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.