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.
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.
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.