134 lines
3.2 KiB
Markdown
134 lines
3.2 KiB
Markdown
# 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
|