Username
aa17159f7e
client: add return annotations and cache users/channels properties
2026-02-24 16:45:45 +01:00
Username
bbd28e2840
audio: add -> None return annotations
2026-02-24 16:45:41 +01:00
Username
0ae0e77814
app: deduplicate config detection, suppress hold-mode PTT spam
2026-02-24 16:45:30 +01:00
Username
c0be5f164e
update tasklist: phase D complete
2026-02-24 16:38:31 +01:00
Username
d117576449
test: refactor audio tests to use public interfaces
...
Replace direct queue/attribute access with capture_callback and
get_capture_frame. Add stop-drains-queues test.
2026-02-24 16:38:03 +01:00
Username
65de74193a
test: add _strip_html edge cases and config validation tests
...
strip_html: nested tags, malformed HTML, comments, entities.
config: unknown key filtering, missing file, mixed valid/invalid.
2026-02-24 16:38:02 +01:00
Username
7c57e03e6d
test: add InputHistory unit tests
...
Covers empty history, push/up/down navigation, draft preservation,
boundary clamping, and full navigation cycle.
2026-02-24 16:37:59 +01:00
Username
4c1a545a8b
test: add ReconnectManager unit tests
...
Covers success, retry, non-retryable abort, max-retry exhaustion,
cancel from another thread, and backoff formula.
2026-02-24 16:37:57 +01:00
Username
e2039558d7
update tasklist: phase C complete
2026-02-24 16:33:14 +01:00
Username
0cf3702c8f
app: extract ReconnectManager to reconnect.py
...
Self-contained reconnection state machine with threading.Event
for instant, thread-safe cancellation. Removes ~50 lines and
all reconnect state from TuimbleApp.
2026-02-24 16:32:29 +01:00
Username
216a4be4fd
app: extract InputHistory, _make_client factory, cache _find_root
...
InputHistory encapsulates history navigation (up/down/push).
_make_client() deduplicates 4 MumbleClient instantiation sites.
_find_root() result cached in set_state() to avoid double lookup.
2026-02-24 16:32:16 +01:00
Username
a6380b53f7
update tasklist: phase A and B complete
2026-02-24 16:26:02 +01:00
Username
bfa79eadcb
app: replace audio send polling with blocking queue.get
...
Deterministic wake on data arrival instead of 5ms sleep loop.
Reduces CPU wake-ups and eliminates up to 5ms of added latency.
2026-02-24 16:25:42 +01:00
Username
7a2c8e3a5d
audio: replace struct pack/unpack with array module in _apply_gain
...
Eliminates format string construction and intermediate tuple/list
allocations. Also drains stale frames from queues on stop().
2026-02-24 16:25:32 +01:00
Username
88e8d4d923
update tasklist with phased improvement plan
2026-02-24 16:23:11 +01:00
Username
897c5b1f6c
client: guard join_channel and send_text against stale ids
...
join_channel raises ValueError on missing channel instead of
KeyError. send_text handles missing channel_id gracefully.
2026-02-24 16:23:05 +01:00
Username
44da57d084
config: filter unknown toml keys before dataclass init
...
Prevents opaque TypeError on typos in config.toml; unknown
keys are logged as warnings and silently dropped.
2026-02-24 16:23:04 +01:00
Username
8be475f23f
app: replace regex html stripping with stdlib parser
...
Handles malformed tags, nested markup, and CDATA that the
naive regex missed.
2026-02-24 16:23:03 +01:00
Username
be6574ae79
app: debounce channel tree and cache render width
2026-02-24 15:32:57 +01:00
Username
57f4559a38
update roadmap and tasklist
2026-02-24 14:55:03 +01:00
Username
351b980b42
docs: add reconnection and error recovery docs
2026-02-24 14:54:40 +01:00
Username
6f590ede38
app: add reconnection status to status bar
2026-02-24 14:54:07 +01:00
Username
e443facd3b
app: add auto-reconnect with backoff
2026-02-24 14:43:29 +01:00
Username
d02bb5239a
app: stop audio on disconnect
2026-02-24 14:40:24 +01:00
Username
a041069cc9
client: add ConnectionFailed and reconnect method
2026-02-24 14:34:40 +01:00
Username
0b186f1f0c
update roadmap and tasklist
2026-02-24 14:19:48 +01:00
Username
0b178d371e
docs: add volume, certificate, and reload docs
2026-02-24 14:19:15 +01:00
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