# ReTeamSpeak Desktop TeamSpeak 3 client built with `iced` and `tsclientlib` for Windows, Linux, and macOS. ## Current Direction - UI: `iced` - TeamSpeak protocol + state sync: `tsclientlib` - Protocol declarations reference: `refercence/tsdeclarations/` - Old in-tree protocol/audio/database/Tauri implementation has been removed ## Current User-Facing Features - Connect to a TeamSpeak server by address and port - Use a nickname and optional server password - Browse channels and join a channel - Receive live server/channel/client state updates - Send and receive channel chat messages - Mute microphone state and sync it to TeamSpeak - Mute speaker/output state and sync it to TeamSpeak - Toggle headset/output hardware state and sync it to TeamSpeak - Toggle AFK state and sync it to TeamSpeak - Import TeamSpeak identity from an exported identity string or file - Select input and output audio devices - Push-to-talk and continuous voice modes - Noise cancellation selection in settings - Local per-user mute and volume controls in the channel tree - Persistent bookmarks, favorites, recents, and settings ## Current Gaps - Remote audio playback still needs runtime validation against a real TeamSpeak server - The legacy `src/README.md` and root `Dockerfile` still need to be reconciled with the current app layout ## Build Workspace root for cargo commands: `src/` ### Default build ```bash cd src cargo check -p re-teamspeak ``` ### Audio Build Host builds need system audio libraries and a Rust toolchain new enough for `sonora`. On Linux that generally means `cmake`, `pkg-config`, `libasound2-dev`, and `libopus-dev`. Direct host build: ```bash cd src cargo check -p re-teamspeak ``` Repeatable Podman build: ```bash ./scripts/check-audio-podman.sh ``` ### Run the app in Podman From a desktop shell with `WAYLAND_DISPLAY` or `DISPLAY` set: ```bash ./scripts/run-audio-podman.sh ``` The runtime wrapper will try to pass through: - `/dev/snd` - `/dev/dri` - PulseAudio socket - PipeWire socket - user D-Bus socket - Wayland socket or X11 socket If you want to validate the container wiring without launching the GUI app, pass a custom command: ```bash ./scripts/run-audio-podman.sh -- /usr/bin/env ``` Override image or features when needed: ```bash RETEAMSPEAK_AUDIO_IMAGE=docker.io/library/rust:1.91-bookworm \ ./scripts/check-audio-podman.sh ``` Equivalent raw Podman command: ```bash podman run --rm -v "$(pwd):/workspace:Z" -w /workspace/src \ docker.io/library/rust:1.91-bookworm bash -lc ' apt-get update >/dev/null && apt-get install -y --no-install-recommends pkg-config libasound2-dev libopus-dev >/dev/null && /usr/local/cargo/bin/cargo check -p re-teamspeak ' ``` ## Repository Layout ```text src/ ├── Cargo.toml └── iced-app/ ├── Cargo.toml └── src/ ├── main.rs ├── audio.rs ├── identity.rs ├── icons.rs ├── noise_cancel.rs ├── persistence.rs ├── theme.rs ├── types.rs └── view.rs ``` ## Reference Material - `refercence/tsclientlib/` - `refercence/tsdeclarations/` - `docs/protocol.md` - `docs/protocol_stack.md` ## License MIT OR Apache-2.0