Commit Graph

36 Commits

Author SHA1 Message Date
Username
0bc41d1a46 app: add config reload on F5 2026-02-24 14:18:19 +01:00
Username
e9726da401 app: add volume key bindings and status display 2026-02-24 14:17:02 +01:00
Username
5e44ee9e38 app: wire volume and certificate config 2026-02-24 14:15:42 +01:00
Username
6467f5fe32 client: add certificate parameters 2026-02-24 14:15:24 +01:00
Username
e9944c88eb audio: add gain control to capture and playback 2026-02-24 14:14:52 +01:00
Username
eb98165370 config: add gain and certificate fields 2026-02-24 14:13:18 +01:00
Username
0856ab3c55 docs: update tasklist with completed items 2026-02-24 13:58:02 +01:00
Username
b852459eff feat: add channel navigation and user status indicators
Tab cycles focus to sidebar where Up/Down navigates channels
and Enter joins the selected one. Muted/deafened users show
status symbols in the channel tree.
2026-02-24 13:57:57 +01:00
Username
ec81fac507 docs: add key bindings and fix ptt key in readme 2026-02-24 13:31:56 +01:00
Username
931c6d4776 docs: add up/down key bindings to usage 2026-02-24 13:28:08 +01:00
Username
6c16883135 feat: add chat input history navigation (up/down) 2026-02-24 13:28:03 +01:00
Username
f77375422a add --cprofile flag with periodic dump 2026-02-24 13:18:10 +01:00
Username
ee145b4071 app: log transmit state changes to chatlog 2026-02-24 13:09:03 +01:00
Username
89ebad6c15 app: add F1 self-deafen toggle and bold TX indicator 2026-02-24 13:02:38 +01:00
Username
a6bdc02484 client: add set_self_deaf server notification 2026-02-24 13:02:09 +01:00
Username
3bbe8a96f3 audio: add deafened property to suppress playback
When deafened, playback callback writes silence and
queue_playback discards incoming PCM.
2026-02-24 12:58:39 +01:00
Username
31ac90d2c9 fix: ptt auto-detect falls back to toggle mode
Textual does not expose key-release events, so KittyPtt
hold-mode never received key_up and stayed transmitting.
Auto-detect now tries evdev first, then falls back to
toggle (press-on/press-off). Default mode changed to toggle.
2026-02-24 12:50:40 +01:00
Username
bc0da57625 ptt: change default key from space to f4
Space conflicts with chat input. F4 is unused by default
in most terminal emulators and won't interfere with typing.
2026-02-24 12:46:45 +01:00
Username
623c51a19d fix: enable word wrap in chat log
RichLog defaults wrap=False, causing long messages to extend
beyond the visible area instead of wrapping at the widget edge.
2026-02-24 12:42:39 +01:00
Username
227d415c24 fix: enable rich markup in chat log
RichLog defaults markup=False, so all Rich console markup tags
([dim], [#9ece6a], etc.) rendered as literal text. Pass
markup=True in ChatLog constructor.
2026-02-24 12:41:09 +01:00
Username
e7698fd181 fix: use content_size and fixed width for sidebar layout
width: auto on Static expands to content width before clamping,
so self.size.width matched content and truncation never fired.
Switch to fixed width with dynamic resize, use content_size to
exclude padding/border from width calculations.
2026-02-24 12:38:24 +01:00
Username
590e5e8f0f app: responsive terminal layout
Sidebar uses auto width (min 16, max 32) instead of fixed 24.
Channel and user names truncate with ellipsis at widget boundary.
Status bar adapts format based on available width. Resize events
trigger re-render of width-aware widgets.
2026-02-24 12:31:55 +01:00
Username
e92adeda7f fix: enable receive sound in pymumble
Without set_receive_sound(True), pymumble silently drops all
incoming audio packets.
2026-02-24 12:25:37 +01:00
Username
08ac934b17 add audio-diag and voice-smoke test tools 2026-02-24 12:23:50 +01:00
Username
54a70c108f tests: rename get_encoded_frame to get_capture_frame 2026-02-24 12:23:43 +01:00
Username
c4f60df224 audio: remove opus codec, pass raw pcm to pymumble
pymumble handles opus encode/decode internally. The pipeline
is now pure PCM on both capture and playback paths.
2026-02-24 12:23:34 +01:00
Username
657ea6c255 docs: mark phase 2 voice complete 2026-02-24 12:10:58 +01:00
Username
0eccda1a2c add audio pipeline tests 2026-02-24 12:10:54 +01:00
Username
6673ad187e app: wire audio pipeline and ptt
Start AudioPipeline on server connect, send loop polls capture
queue, PTT toggles mic encoding, incoming sound queued for playback.
Audio failure logs to chatlog without crashing.
2026-02-24 12:10:50 +01:00
Username
0aa7b81439 audio: fix playback path to accept raw pcm
pymumble already decodes incoming audio. Remove the decoder from
the playback callback — write PCM directly to the output buffer.
2026-02-24 12:10:44 +01:00
Username
6efa9591dc docs: update roadmap and tasklist for phase 1 completion 2026-02-24 12:01:16 +01:00
Username
a8960e2027 add client dispatcher unit tests 2026-02-24 12:01:11 +01:00
Username
2f7b192640 app: wire mumble connection, text chat, channel tree
Connect to server on mount via @work(thread=True). Bridge pymumble
callbacks to Textual messages (ServerConnected, ServerDisconnected,
TextMessageReceived, ServerStateChanged). Render live channel/user
tree recursively. Send text on input submit. Clean disconnect on quit.
2026-02-24 12:01:06 +01:00
Username
5fecebaa12 client: replace async wrapper with thread-safe dispatcher
Convert connect/disconnect to blocking calls (pymumble is synchronous).
Remove asyncio loop coupling. Add set_dispatcher() for marshalling
callbacks into the host event loop. Register all pymumble callbacks:
connected, disconnected, user/channel CRUD, text message, sound.
2026-02-24 12:00:59 +01:00
Username
5df1f484a4 fix: use rich markup instead of raw ansi in tui widgets 2026-02-24 11:48:30 +01:00
Username
836018d146 feat: scaffold tuimble TUI mumble client
Core modules: TUI app (textual), mumble protocol client,
audio pipeline (sounddevice + opus), push-to-talk with
kitty protocol / evdev / toggle backends. Config via TOML.
2026-02-24 11:44:06 +01:00