Commit Graph
25 Commits
Author SHA1 Message Date
ReTeamSpeak abf380476f refactor: remove legacy tauri stack and update iced docs 2026-05-13 13:35:22 +09:00
ReTeamSpeak 4a54f6667c feat: continuous talk mode with voice activation (VAD)
Continuous Talk:
- Voice Activity Detection with energy-based detection
- Smoothing window (5 frames) to avoid false triggers
- Hangover timer (15 frames / 300ms) to keep transmitting during pauses
- Hysteresis: threshold * 0.7 to stop, threshold to start
- Configurable threshold (default 0.005)

Talk Modes:
- Push-to-Talk: hold V key to talk (existing)
- Continuous: mic always on, VAD auto-starts/stops transmission
- Toggle between modes in Settings page

Architecture:
- VoiceActivation struct with state machine (Silent/Speaking/Hangover)
- Subscription monitors mic input in continuous mode
- MicSamples messages feed VAD, which triggers StartContinuous/StopContinuous
- start_transmission/stop_transmission helper functions (shared by PTT and VAD)
- Mic lifecycle managed by subscription (starts on mode enable, stops on disable)

69 tests passing, clippy clean on both builds
2026-05-13 11:08:16 +09:00
ReTeamSpeak 190fcf2a7e feat: push-to-talk with mic capture and Opus encoding
Push-to-Talk:
- Hold V key to activate microphone
- cpal input stream captures mono 48kHz f32 samples
- Opus encoder (audiopus) encodes 20ms frames
- Encoded packets sent via SyncConnectionHandle -> con.send_audio()
- End-of-transmission packet sent on PTT release
- Microphone struct for mic lifecycle management
- OpusEncoderState with sample buffering and frame splitting

Audio:
- Replaced opus crate with audiopus (matches tsclientlib)
- Microphone start/stop with device selection
- PTT keyboard event subscription (V key hold/release)
- Audio gated behind 'audio' feature (needs ALSA/cmake)

69 tests passing, clippy clean on both audio and non-audio builds
2026-05-13 10:54:58 +09:00
ReTeamSpeak 61f2d5bdb6 feat: Apple-style dark UI, bookmark CRUD, join channel, settings
UI Redesign:
- Custom dark theme with Apple-inspired palette (SIDEBAR_BG, BG_PRIMARY, etc.)
- Rounded cards with subtle shadows and depth
- Styled inputs with focus/hover states
- Styled buttons (primary, secondary, danger, nav, bookmark)
- Proper visual hierarchy with generous whitespace
- Sidebar with dark background, cards with elevated surfaces

Features:
- Bookmark CRUD: add new server, delete existing
- Join channel: click channel in list to move to it
- Settings page with audio device info placeholder
- ServerQuery: configurable command input
- Chat messages with invoker name display
- Channel list shows current channel highlighted
- Client list with mute indicators
- Error display with danger styling
- Identity level progress indicator

Architecture:
- Custom theme module (theme.rs) with all styles
- Bookmark editing form in sidebar
- Channel click handler sends client_move command
- 69 tests passing, clippy clean
2026-05-13 10:31:07 +09:00
ReTeamSpeak 073095b06a feat: audio playback, device selector, i18n fixes
Audio:
- Add AudioPlayback with channel-based cpal output (avoids Send issue)
- Add AudioCapture stub with input device enumeration
- Audio gated behind 'audio' feature flag (needs ALSA/cmake)
- list_output_devices() / list_input_devices() for device selection
- StreamItem::Audio packets forwarded via mpsc channel to cpal callback

i18n:
- Replace all Chinese error messages with English in tsdb
- Replace all Chinese comments/doc strings with English in tscore
- All user-facing strings now in English

Build:
- Add Containerfile.build for containerized builds with audio deps
- CMAKE_POLICY_VERSION_MINIMUM=3.5 workaround for audiopus_sys
- tsclientlib audio feature enabled in workspace (needs cmake)
- 69 tests passing, clippy clean on both audio and non-audio builds
2026-05-13 00:53:08 +09:00
ReTeamSpeak 0d805269b5 fix: subscription event loop, session_id for reconnect, audio feature gate
- Fix event_rx consumed by take() - now locks and polls each time
- Add session_id to restart subscription on reconnect
- Remove duplicate code in Connect handler
- Gate audio behind optional cpal feature (needs ALSA dev libs)
- tsclientlib audio feature disabled in workspace (needs cmake)
- 69 tests passing, clippy clean
2026-05-12 23:06:19 +09:00
ReTeamSpeak 2bbd1c41fd fix: use git dependency for tsclientlib (CI submodule compat)
Switch from path dependency to git dependency for tsclientlib/tsproto-packets
so CI can fetch them without needing git submodule initialization.
2026-05-12 22:24:24 +09:00
ReTeamSpeak 55c9b9fec8 refactor: switch to tsclientlib for TeamSpeak protocol
- Replace custom Session/SessionHandle with tsclientlib SyncConnection
- SyncConnection runs in background task, forwards events via mpsc
- iced subscription reads events from mpsc channel
- SendChannelMessage sends via SyncConnectionHandle::with_connection
- Disconnect sends DisconnectOptions via handle
- State refresh reads data::Connection (clients, channels, server)
- Keep tscore QueryClient for ServerQuery panel
- Add tsclientlib as path dependency (from refercence/)
- CI checkout with submodules: recursive for tsdeclarations
- 69 tests passing, clippy clean
2026-05-12 22:10:45 +09:00
ReTeamSpeak dce2f90544 fix: clippy warnings and CI Node.js deprecation
- Remove unused imports in session.rs, buffer.rs, engine.rs
- Allow dead_code on intentionally unused fields (decoder, received_at)
- Allow enum_variant_names on Message enum
- Add FORCE_JAVASCRIPT_ACTIONS_TO_NODE24 to CI env
2026-05-12 21:32:29 +09:00
ReTeamSpeak b816b1308f fix: wire SessionHandle, event subscription, and message sending
- Store SessionHandle in Arc<Mutex> instead of dropping it
- Implement iced subscription with stream::channel to forward SessionEvent
- SendChannelMessage now sends via SessionHandle
- Disconnect sends clientdisconnect command then clears state
- ServerQuery panel now executes 'help' command via QueryClient
- Remove tracing_subscriber to avoid console window on Windows
- Request channel/client lists on connect
- Show connection errors and query responses in UI
2026-05-12 21:12:22 +09:00
ReTeamSpeak c4113373c8 feat: replace Tauri with iced for native cross-platform GUI
- Create iced-app crate with pure Rust GUI using iced 0.13
- Implement server list, connect form, channel/user panels, messaging
- Implement ServerQuery panel for direct server queries
- Add VoiceEngine in tsaudio for decode/buffer/playback pipeline
- Update CI to build iced binary (no frontend build step needed)
- Remove Tauri dependency from workspace
- 69 tests passing across all crates
2026-05-12 20:35:24 +09:00
ReTeamSpeak c878d74a6a feat: add voice packet handling to session
- Add VoiceData event to SessionEvent (codec, packet_id, audio_data, is_whisper)
- Session detects Voice/VoiceWhisper packets and emits VoiceData events
- Add shared_secret() and key_cache_mut() accessors to Client
- Voice packets bypass command processing for lower latency
- 67 tests passing across all crates
2026-05-12 20:15:56 +09:00
ReTeamSpeak 25af2cb295 feat: implement voice packet parsing, Opus codec, jitter buffer, and cpal playback
Voice packet parsing (tscore/protocol/voice.rs):
- VoicePacket and WhisperPacket types with parse/serialize
- Codec type, sample rate, channel count detection
- Tests for roundtrip and error cases

Opus codec (tsaudio/codec.rs):
- Real Opus encoder/decoder with opus crate (behind feature gate)
- 48kHz mono/stereo support
- Encode/decode with proper error handling

Jitter buffer (tsaudio/buffer.rs):
- Sequence number based reordering
- Adaptive output timing (20ms intervals)
- Packet loss handling with fallback to oldest frame
- Tests for basic and reorder scenarios

cpal playback (tsaudio/playback.rs):
- Default output device detection
- f32 and i16 sample format support
- Ring buffer for smooth playback
- Device listing

AudioFrame enhanced with sequence and codec fields.
2026-05-12 20:08:23 +09:00
ReTeamSpeak d34f5dd952 refactor: handle_data now returns HandleResult with parsed events
- Add CommandEvent enum (InitServer, ChannelList, ClientList, TextMessage, etc.)
- Add HandleResult struct with responses and events
- handle_data returns HandleResult instead of Vec<Vec<u8>>
- Session uses HandleResult for real event emission
- Update socket.rs and tests for new return type
2026-05-12 19:53:22 +09:00
ReTeamSpeak ace2f5deed feat: add session event polling, channel/client list, and text messages
- Add SessionEvent enum with Connected, ChannelList, ClientList, ServerInfo, TextMessage, ClientEntered, ClientLeft, ClientMoved
- Add poll_events, request_channel_list, request_client_list Tauri commands
- Session now parses initserver, channellist, clientlist, notify* commands and emits events
- Frontend polls events every 500ms when connected
- Frontend displays server info, channel list, client list, and text messages
2026-05-12 19:25:02 +09:00
ReTeamSpeak 7a767e9d2e fix: add Tauri template icons for Windows/macOS/Linux builds 2026-05-12 19:12:39 +09:00
ReTeamSpeak a1410b541b ci: revert FORCE_JAVASCRIPT_ACTIONS_TO_NODE24, let v4 actions run on Node.js 20 2026-05-12 18:58:34 +09:00
ReTeamSpeak 364b24bf19 ci: opt into Node.js 24 and fix checkout in opencode workflow 2026-05-12 18:47:36 +09:00
ReTeamSpeak 460ce6bb66 ci: restore full GitHub Actions workflow with v4 actions and multi-OS matrix 2026-05-12 18:43:24 +09:00
ReTeamSpeak 820449001a fix(ci): simplify workflow to Ubuntu-only runners for Gitea Actions
CI/CD / Test (push) Successful in 3m42s
CI/CD / Build Frontend (push) Successful in 13s
CI/CD / Build Desktop (Linux) (push) Successful in 5m9s
CI/CD / Release (push) Has been skipped
2026-05-12 17:51:23 +09:00
ReTeamSpeak 4d8cf99b52 fix(ci): downgrade all actions to v3 for Gitea Actions compatibility
CI/CD / Test (ubuntu-latest) (push) Successful in 4m24s
CI/CD / Build Frontend (push) Successful in 36s
CI/CD / Test (macos-latest) (push) Has been cancelled
CI/CD / Test (windows-latest) (push) Has been cancelled
CI/CD / Build Desktop (linux) (push) Has been cancelled
CI/CD / Build Desktop (macos) (push) Has been cancelled
CI/CD / Build Desktop (windows) (push) Has been cancelled
CI/CD / Release (push) Has been cancelled
2026-05-12 17:45:20 +09:00
ReTeamSpeak 5cbe5783d4 fix(ci): downgrade artifact actions to v3 for Gitea Actions compatibility
CI/CD / Test (ubuntu-latest) (push) Successful in 1m37s
CI/CD / Build Frontend (push) Successful in 20s
CI/CD / Test (windows-latest) (push) Has been cancelled
CI/CD / Build Desktop (linux) (push) Has been cancelled
CI/CD / Build Desktop (macos) (push) Has been cancelled
CI/CD / Build Desktop (windows) (push) Has been cancelled
CI/CD / Test (macos-latest) (push) Has been cancelled
CI/CD / Release (push) Has been cancelled
2026-05-12 17:41:01 +09:00
ReTeamSpeak 3e7cee4893 fix: resolve clippy warnings across all crates
CI/CD / Test (ubuntu-latest) (push) Successful in 1m40s
CI/CD / Build Frontend (push) Failing after 12s
CI/CD / Test (macos-latest) (push) Has been cancelled
CI/CD / Test (windows-latest) (push) Has been cancelled
CI/CD / Build Desktop (linux) (push) Has been cancelled
CI/CD / Build Desktop (macos) (push) Has been cancelled
CI/CD / Build Desktop (windows) (push) Has been cancelled
CI/CD / Release (push) Has been cancelled
- Remove inherent to_string() methods shadowing Display (Command, CommandArgument)
- Fix empty line after doc comment in shared/types.rs
- Use sort_by_key with Reverse instead of sort_by in config.rs
- Remove redundant closures in client.rs
- Fix borrow patterns in ephemeral.rs and keys.rs
- Use abs_diff in resend.rs
- Fix needless Ok/? in tsdb/config.rs
- Allow too_many_arguments for create_message in tsdb/message.rs
- Allow dead_code on placeholder tsaudio structs
2026-05-12 17:35:28 +09:00
ReTeamSpeak 2b3ae9ae15 feat: implement TS3 protocol layer, session management, and ServerQuery client
CI/CD / Test (ubuntu-latest) (push) Successful in 2m3s
CI/CD / Build Frontend (push) Failing after 11s
CI/CD / Test (macos-latest) (push) Has been cancelled
CI/CD / Test (windows-latest) (push) Has been cancelled
CI/CD / Build Desktop (linux) (push) Has been cancelled
CI/CD / Build Desktop (macos) (push) Has been cancelled
CI/CD / Build Desktop (windows) (push) Has been cancelled
CI/CD / Release (push) Has been cancelled
- Add real X25519 ECDH key exchange for initivexpand2 bootstrap
- Add P-256 identity key generation with TeamSpeak tomcrypt format
- Add session event loop with tokio::select! for packet/command handling
- Add ServerQuery TCP client with typed parsing (channels, clients, permissions)
- Add Tauri commands: connect (session-based), join_channel, send_message, disconnect
- Add frontend ServerQuery snapshot panel
- Fix CI: Node 22, rustup setup, npm install, workspace checks
- Add mock UDP handshake tests through initserver
- 54 tests passing across shared, tscore, tsaudio, tsdb
2026-05-12 17:24:02 +09:00
ReTeamSpeak ea08823c97 Initial commit: ReTeamSpeak cross-platform TeamSpeak client
CI/CD / Build Frontend (push) Failing after 11s
CI/CD / Test (macos-latest) (push) Has been cancelled
CI/CD / Test (windows-latest) (push) Has been cancelled
CI/CD / Build Desktop (linux) (push) Has been cancelled
CI/CD / Build Desktop (macos) (push) Has been cancelled
CI/CD / Build Desktop (windows) (push) Has been cancelled
CI/CD / Release (push) Has been cancelled
CI/CD / Test (ubuntu-latest) (push) Failing after 2s
- tscore: Protocol implementation (packets, crypto, connection handshake)
- tsaudio: Audio engine (capture, playback, codec, VAD, jitter buffer)
- tsdb: SQLite database (identities, bookmarks, messages, settings)
- shared: Core types and events
- tauri-app: Tauri v2 desktop application with React frontend
- docs: SRS, SAD, SDD documentation
- CI/CD: GitHub Actions workflow
- 32 unit tests passing
2026-05-12 14:41:54 +09:00